鱼C论坛

 找回密码
 立即注册
楼主: 冬雪雪冬

[技术交流] Python:每日一题 164

[复制链接]
发表于 2018-3-17 00:20:27 | 显示全部楼层
坑得飞起 发表于 2018-3-16 00:06
ss=input()
s1=['a','e','i','o','u']
s2=list(ss)

ss=input()
s1=['a','e','i','o','u']
s2=list(ss)
zs=0
jl=[]
for i in range(len(s2)) :
    if s2[i] in s1:
        jl+=[i]
   
if (len(jl)==2)and(s2[jl[0]]!=s2[jl[1]]) :
    if jl[0]==jl[1]:
        print('None')
    else :
        i=s2[jl[0]]
        s2[jl[0]]=s2[jl[1]]
        s2[jl[1]]=i
        ss=''
        for i in s2 :
            ss+=str(i)
        print(ss)
else :
    print('None')

多谢版主点评
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-17 00:20:59 | 显示全部楼层
a=input('请输入字符串,改变元音字母的顺序')
c=['a','e','i','o','u']
g=[]
k=[]
for b in a:
    if b in c:
        g.append(b)
if len(set(g))==len(g)==2:
    p=list(a)
    m=a.find(g[0])
    n=a.find(g[1])
    t=p[m]
    p[m]=p[n]
    p[n]=t
    print(''.join(p))
else:
    print('None')

   
   
   

            
            
   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-17 07:02:06 | 显示全部楼层
x=input("请输入一个小写英文字符:")
str=x
a=list(str)
cstring1=''   
cstring2=''
h1=0
h2=0
t=0
for i in range(len(str)):
    if (a[i]=='a') or (a[i]=='e') or (a[i]=='i') or (a[i]=='o') or (a[i]=='u'):
        if t==0:
            cstring1=a[i]
            h1=i
        elif t==1:
            cstring2=a[i]
            h2=i
        t=t+1
if (t==0) or (t==1) or (t>2):
    print("None")
else:
    if cstring1==cstring2:
        print("None")
    else:
        a[h1]=cstring2
        a[h2]=cstring1
        f=''
        for i in range(len(a)):
            f=f+a[i]
        print(f)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-17 07:16:51 | 显示全部楼层
def change(s):
    s = list(s)
    lst = ['a', 'e', 'i', 'o', 'u']
    fla = [i for i in s if i in lst]
    if len(fla) % 2 != 0:
        return None
    elif list(set(fla)) != fla:
        return None
    else:
        temp1 = s[int(s.index(fla[0]))]
        temp2 = s[int(s.index(fla[1]))]
        s[int(s.index(fla[1]))] = temp1
        s[int(s.index(fla[0]))] = temp2
    return ''.join(s)
麻烦else哪里怎么改成一行呢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-17 09:24:27 | 显示全部楼层

第一个if语句有问题,如果有元音没有,则会输出none
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-17 11:13:21 | 显示全部楼层
yuanyin = "aeiou"
def ZhuanHuan(str1):
    str1 = list(str1)#由于下面的交换操作时会报错
    n = 0
    pos = []
    for item in str1:
        if item in yuanyin:
            pos.append(n)
        n += 1
    if len(pos) == 2:
        #交换操作
        str1[pos[0]],str1[pos[1]] = str1[pos[1]],str1[pos[0]]
        str1 = ''.join(str1)
       
        return str1
    else:
        return None




def main():
    a = ZhuanHuan("apple")
    b = ZhuanHuan("michan")
    c = ZhuanHuan("abcd")
    d = ZhuanHuan("abicod")
    print (a,b,c,d)

if __name__ == "__main__":
    main()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-17 11:14:59 From FishC Mobile | 显示全部楼层
新手·ing 发表于 2018-3-17 07:16
麻烦else哪里怎么改成一行呢。

这fla精简的可怕
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-17 11:45:26 | 显示全部楼层
不好意思,刚刚学python三天,都是些最简单的代码。
yuanyin =['a','e','i','o','u']
n=0
m=0
word = str(input('请输入一个单词'))
for i in word:
    if i in yuanyin:
        n=n+1
         
if n>=3:
    print("None")
else:
    for j in word:
        for k in word:
            if j in yuanyin and k in yuanyin and j==k:
                m=m+1
    if m>=3:
        print("None")
    else:
        Word=word[::-1]
        print ("结果是"+Word)
               
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-17 11:47:51 | 显示全部楼层
import re
def check(n):
    patten = re.compile(r"a|e|i|o|u")
    a = patten.findall(n)
    b = list(n)
    if len(a) == 2:
        if a[0] != a[1]:
            i = b.index(a[0])
            j = b.index(a[1])
            b[i], b[j] = b[j], b[i]
            return ''.join(b)

a = input()
print(check(a))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-17 13:03:36 | 显示全部楼层
新手·ing 发表于 2018-3-17 07:16
麻烦else哪里怎么改成一行呢。

我觉得多行好看点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-17 14:49:05 | 显示全部楼层
新手·ing 发表于 2018-3-17 07:16
麻烦else哪里怎么改成一行呢。

试了一下:
return  reduce(lambda x,y:x+y, map(lambda x:(fla[0] if x == fla[1] else fla[1]) if x in lst else x, s))
不过这样必须得在最前面import一下
或者这样:
return  ''.join(list(map(lambda x:(fla[0] if x == fla[1] else fla[1]) if x in lst else x, s)))

但是貌似上面的这句代码有问题……
elif list(set(fla)) != fla:
set无序,list有序,所以结果就是薛定谔的猫,一会None,一会正常
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-17 17:29:41 | 显示全部楼层
luokaoge 发表于 2018-3-16 10:13
def aeiou():
    #定义空列表
    list1 = []


没看到不能相同元音的条件。。。

def aeiou():
    #定义空列表
    list1 = []
    #让用户输入单词
    a = input('Please input a word:')
    #定义元音字符串
    b = 'aeiou'
    #判断输入单词中元音字母个数
    for i in a:
        if i in b:
            list1.append(i)
        else:
            pass
    if list1[0] != list1[1]:
        #当输入单词仅有两个元音字母时互换两个元音字母的位置
        if len(list1) == 2:
            s1 = list(a)
            #返回输入单词元音字母的索引值
            c = a.index(list1[0])
            d = a.index(list1[1])
            #交换元音字母的位置
            e = s1[c]
            f = s1[d]
            s1[c] = f
            s1[d] = e
            #赋值新的字符串并打印
            new =''.join(s1)
            print('New word is'+ ' ' + new)
        #不为两个元音字母时打印None
        else:
            print('None')
    else :
       print('None')
aeiou()   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-17 17:37:22 | 显示全部楼层
def change(s):
    s = list(s)
    lst = ['a', 'e', 'i', 'o', 'u']
    fla = [i for i in s if i in lst]
    if len(fla) % 2 != 0:
        return None
    elif list(set(fla)) != fla:
        return None
    else:
        temp1 = s[int(s.index(fla[0]))]
        temp2 = s[int(s.index(fla[1]))]
        s[int(s.index(fla[1]))] = temp1
        s[int(s.index(fla[0]))] = temp2
    return ''.join(s)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-17 21:51:46 | 显示全部楼层
def vocalExchange(str1):
    vocal = "aeiou"
    cases = []
    for each in vocal:
        if each in str1 and each not in cases:
            cases.extend((str1.index(each), each))
    if len(cases) == 4:
        return str1[:cases[0]] + cases[3] + str1[cases[0]+1:cases[2]] + cases[1] + str1[cases[2]+1:]

print(vocalExchange("apple"))
print(vocalExchange("machin"))
print(vocalExchange("abca"))
print(vocalExchange("abicod"))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-19 09:24:53 | 显示全部楼层
_小菜鸟 发表于 2018-3-16 16:56
测试结果
eppla
none

主函数调用的第三个参数,调试的时候写成string1了,应该改成string2。至于出错的话,不知道是不是abca打印了两次,如果是的话,就是上面这个原因。如果不是的话,请说明一下具体的出错内容。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-19 16:50:43 | 显示全部楼层
本帖最后由 夜与晨 于 2018-3-19 17:01 编辑
#!/usr/bin/env python
# -*- coding: utf-8 -*-

def output(str_origin):
        list_temp = []
        str_origin = str_origin.lower()
        str_vowel = [i for i in str_origin if i in'aeiou']
        for each in str_origin:
                if each in 'aeiou':
                        list_temp.append(each)
        if (len(str_vowel) == 2) and len(set(str_vowel)) == 2:
                str_origin = str_origin[:str_origin.index(list_temp[0])] + list_temp[-1] +\
                str_origin[str_origin.index(list_temp[0]) + 1:str_origin.index(list_temp[-1])]+ list_temp[0] +\
                str_origin[str_origin.index(list_temp[-1])+1:]
                return str_origin
        else:return None

                                

if __name__ == '__main__':
        # str_origin = input("请输入字符串:")
        str_origin = 'iye'
        print(output(str_origin))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-20 13:14:51 | 显示全部楼层
list1 =['a','e','i','o','u']
list2 = list(input("请输入一个测试用例:"))
temp = []
for num in list2:
   if num in list1:
       temp.append(num)
   continue
if len(temp)==2:
        a =temp[0]
        b = temp [1]
        c=list2.index(a)
        d = list2.index(b)
        list2[c] = b
        list2[d] = a
        print(list2)
else:
     print("NONE")
#python小白,欢迎指导!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-20 22:33:05 | 显示全部楼层
def day164(temp):
    str1 = 'aeiou'
    str2 = ''

    for each in temp:
        for i in str1:
            if each == i:
                str2 += i

    if len(str2) == 2 and str2[0] != str2[1]:
        temp1 = temp.replace(str2[1],str2[0])
        temp1 = temp.replace(str2[0],str2[1],1)
        return temp1
    else:
        return None
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-21 09:09:21 | 显示全部楼层
def func():
    string = input("请输入一个英文单词:")

    words = ["a", "e", "i", "o", "u"]
    word_list = []
    test = []

    for i in range(len(string)):
        word_list.append(string[i])  #由于字符串不能直接被修改,转换成列表
        if string[i] in words:
            test.append(string[i])   #统计原字符串中元音字母

    if (len(test) == 2) and (test[0] != test[1]):      #只有在元音字母数量为2且不一样的情况下,才有输出
        word_list[string.index(test[0])], word_list[string.index(test[1])] = word_list[string.index(test[1])], word_list[string.index(test[0])]
        new_string = "".join(word_list)
        return new_string
    else:
        return None
   

测试结果:
>>> func()
请输入一个英文单词:apple
eppla
>>> func()
请输入一个英文单词:machin
michan
>>> func()
请输入一个英文单词:appleapple
None
>>> func()
请输入一个英文单词:abcd
None
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-21 11:12:16 | 显示全部楼层
vowel_num = []
vowel_list = ['a', 'e', 'i', 'o', 'u']


def swap_vowel(word):
    num = 0
    for each_word in word:
        if each_word in vowel_list:
            vowel_num.append(each_word)
            num += 1
    vowel1 = vowel_num[0]
    vowel2 = vowel_num[1]
    #print(vowel1, vowel2)
    if num != 2 or (num == 2 and vowel1 == vowel2):
        return None
    else:
        str1 = str(word).replace(vowel1, '$')
        str1 = str1.replace(vowel2, vowel1)
        str1 = str1.replace('$', vowel2)
        return str1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-16 21:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表