鱼C论坛

 找回密码
 立即注册
查看: 12557|回复: 71

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

[复制链接]
发表于 2018-3-15 21:51:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 冬雪雪冬 于 2018-3-16 20:55 编辑

我们的玩法做了一下改变:

1. 楼主不再提供答案。
2. 请大家先独立思考”,再参考其他鱼油的解答,这样才有助于自己编程水平的提高。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予1~3鱼币的奖励。

题目:
元音字母 有:a,e,i,o,u五个, 写一个函数,交换字符串的元音字符位置。
假设,一个字符串中只有二个不同的元音字符。
二个测试用例:
输入 apple  输出 eppla
输入machin  输出 michan
不符合要求的字符串,输出None,比如:
输入 abca (两个元音相同) 输出 None
输入 abicod (有三个元音) 输入None

感谢 @shigure_takimi 提供题目,也希望大家有适宜的题目提供给我们,共同把每日一题这个项目做好。请 @shigure_takimi 多回一帖,给予出题奖励。
要求:
题目难易适度,以python语言的运用为主,算法为辅。
对于提供优质题目的鱼油给予鱼币奖励。
可以发私信给我或直接发帖。

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-3-15 22:17:48 | 显示全部楼层
本帖最后由 sukiwhip 于 2018-3-16 10:24 编辑
  1. list_a = ['a','e','i','o','u']
  2. list_b = list(input('输入一个字符串:'))

  3. count_1 = []

  4. for i in list_a:
  5.     if list_b.count(i) == 1:
  6.         count_1.append(i)
  7.         t = True

  8.     else: #字符串有多个同原音或完全没有的返回 None
  9.         print('None')
  10.         t = False
  11.         break

  12. if t:
  13.     if len(count_1) == 2: #只执行包含两个原音的字符串
  14.         a = count_1[0]
  15.         b = count_1[1]
  16.         position_a = list_b.index(count_1[0])
  17.         position_b = list_b.index(count_1[1])
  18.         del list_b[position_a]
  19.         list_b.insert(position_a,b)
  20.         del list_b[position_b]
  21.         list_b.insert(position_b,a)
  22.         word = ''.join(list_b)
  23.         print('结果是:',word)

  24.     else:
  25.         print('None')
复制代码

点评

输入apple,打印None  发表于 2018-3-16 21:00
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2018-3-15 22:25:44 | 显示全部楼层
list1 = ['a','e','i','o','u']
str1 = input('输入一个只有2个不同的元音字符:')
y = []
wz = []
num1 = 0
num2 = 0
for i in str1:
    if i in list1:
        num1 += 1
        if i in y:
            pass
        else:
            y.append(i)
            num2 += 1
if num1 == num2 and num1 == 2:
    for i in str1:
        if i in y:
            wz.append(str1.find(i))
    str2 = str1[:wz[0]] + str1[wz[1]] + str1[wz[0] + 1:]
    str2 = str2[:wz[1]] + str1[wz[0]] + str2[wz[1] + 1:]
    print(str2)
else:
    print('None')

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-3-15 22:32:40 From FishC Mobile | 显示全部楼层
  1. #   不考虑大小写,默认都是小写。
  2. def func(string):
  3.     yuanyin = [i for i in string if i in 'aiueo']
  4.     if len(yuanyin)==2 and len(set(yuanyin)) == 2:
  5.         i = string.index(yuanyin[0])
  6.         j = string.index(yuanyin[1])
  7.         string = list(string)
  8.         string[i], string[j] = string[j], string[i]
  9.         return ''.join(string)
  10.     else:
  11.         return None
  12.                
  13. a = 'apple'
  14. b = 'machin'
  15. c = 'appla'
  16. d = 'abicod'
  17. e = 'abbbbbbb'
  18. f = 'bdfssdfs'
  19. g = 'abocda'

  20. print(func(a))  #  -- > eppla
  21. print(func(b))  #  -- > michan
  22. print(func(c))  #  -- > None
  23. print(func(d))  #  -- > None
  24. print(func(e))  #  -- > None
  25. print(func(f))  #  -- > None
  26. print(func(g))  #  -- > None
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-3-15 22:34:14 From FishC Mobile | 显示全部楼层
本帖最后由 shigure_takimi 于 2018-3-15 22:46 编辑

多回一贴,领奖励咯!
之前还写了一个比较墨迹的,粘贴于此。

  1. def func(string):
  2.     yuanyin = 'aiueo'
  3.     container = []
  4.     firstYuanyin = [0, False]
  5.     secondYuanyin = [0, False]
  6.     for i in string:
  7.         if i in yuanyin:
  8.             if firstYuanyin[1] == False:
  9.                 firstYuanyin[0], firstYuanyin[1] = string.index(i), True
  10.                 container.append(i)
  11.             elif secondYuanyin[1] == False:
  12.                 if i in container:
  13.                     return None, '重复元音'
  14.                 else:
  15.                     secondYuanyin[0], secondYuanyin[1] = string.index(i), True
  16.             else:
  17.                 return None, '多于两个元音'
  18.     if firstYuanyin[1] == False:
  19.         return None, '没有元音'
  20.     elif secondYuanyin[1] == False:
  21.         return None, '只有一个元音'
  22.    
  23.     newSring = list(string)
  24.     newSring[firstYuanyin[0]], newSring[secondYuanyin[0]] = newSring[secondYuanyin[0]], newSring[firstYuanyin[0]]
  25.     return ''.join(newSring)
  26.                

  27. a = 'apple'
  28. b = 'machin'
  29. c = 'appla'
  30. d = 'abicod'
  31. e = 'abbbbbbb'
  32. f = 'bdfssdfs'
  33. g = 'abocda'

  34. print(func(a))  #  -- > eppla
  35. print(func(b))  #  -- > michan
  36. print(func(c))  #  -- > (None, '重复元音')
  37. print(func(d))  #  -- > (None, '多于两个元音')
  38. print(func(e))  #  -- > (None, '只有一个元音')
  39. print(func(f))  #  -- > (None, '没有元音')
  40. print(func(g))  #  -- > (None, '多于两个元音')
复制代码

评分

参与人数 1荣誉 +10 鱼币 +10 收起 理由
冬雪雪冬 + 10 + 10

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-15 22:44:22 | 显示全部楼层
  1. def check_vowel(str1):
  2.         standard = 'aeiou'
  3.         flag = {}
  4.        
  5.         index_number = []
  6.         for i in range(len(str1)):
  7.                 if str1[i] in standard:
  8.                         if str1[i] in flag:
  9.                                 flag[str1[i]] += 1
  10.                         else:
  11.                                 flag[str1[i]] = 0
  12.                         index_number.append(str1[i])

  13.                

  14.         if len(flag) != 2:
  15.                 return 0
  16.         for each in flag.values():
  17.                 if each == 1:
  18.                         return 0

  19.         result = ''
  20.         cnt = 0
  21.         for each in str1:
  22.                 if each not in standard:
  23.                         result = result + each
  24.                 else:
  25.                         cnt = cnt + 1
  26.                         result = result + index_number[len(index_number) - cnt]
  27.         return result

  28. if __name__ == '__main__':
  29.         str1 = input('请输入字符串:')
  30.         if type(check_vowel(str1)) == str:
  31.                 print(check_vowel(str1))
  32.         else:
  33.                 print('None')


复制代码


#################
请输入字符串:aeigh
None

***Repl Closed***
#################
请输入字符串:aadfg
None

***Repl Closed***
#################
请输入字符串:avbnm
None

***Repl Closed***
#################
请输入字符串:apple
eppla

***Repl Closed***
#################
请输入字符串:machin
michan

***Repl Closed***

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-15 23:39:44 | 显示全部楼层
vowel = 'aeiou'

def changev(l):
    vlist = []#字符串中元音字母列表,用于对比出现元音字母是否相等
    klist = []#字符串中元音字母索引列表,用于后面字母对换
    vsum = 0#记录字符串中元音字母数量
    for each in range(len(l)):
        if l[each] in vowel:
            vsum += 1
            klist.append(each)
            vlist.append(l[each])
    if vsum != 2:
        print('None')
    elif vlist[0] == vlist[1]:
        print('None')
    else:
        llist = list(l)
        temp = llist[klist[0]]
        llist[klist[0]] = llist[klist[1]]
        llist[klist[1]] = temp
        result = ''.join(llist)
        print(result)


str1 = input('输入字符串:')
changev(str1)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-15 23:58:10 | 显示全部楼层
  1. def new_del(s):
  2.     k = []
  3.     for i in s:
  4.         if i not in k:
  5.             k.append(i)
  6.     return k
  7. while True:
  8.     word = input("请输入你想要输入的字符:")
  9.     L_1 = list(word)
  10.     proving = ['a','e','i','o','u']

  11.     num = 0 #元音字母出现的次数
  12.     L_2 = []
  13.     for i in new_del(L_1):
  14.         if i in proving:
  15.             num += 1
  16.     if num != 2:  #判断当输入字符不满足条件时
  17.         print('None')
  18.         #下面运行的代码是当输入字符满足条件时
  19.     else:
  20.         for i in L_1:
  21.             if i in proving:
  22.                 L_2.append(L_1.index(i))
  23.             #变换
  24.         a = L_1[L_2[0]]
  25.         L_1[L_2[0]] = L_1[L_2[1]]
  26.         L_1[L_2[1]] = a
  27.         print("".join(L_1))
  28.     result = input("是否还想验证:请输入'Y'or'N'")
  29.     if result == 'N':
  30.         break
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-16 00:06:24 | 显示全部楼层
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 :
    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')

点评

输入abca,错误。  发表于 2018-3-16 21:07

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
冬雪雪冬 + 1 + 1

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-16 01:49:56 | 显示全部楼层
list1 = list(input('请输入一个字符串:'))
list2 = ['a','e','i','o','u']
n=0
list3 = []
for i in list1:
    if i in list2:
        list3.append(list1.index(i))
        n = n + 1
def fun(n):
    if n==2:
        list1[list3[0]],list1[list3[1]]=list1[list3[1]],list1[list3[0]]
        return (''.join(list1))
    else:
        return None
print(fun(n))

点评

输入abca,错误。  发表于 2018-3-16 21:09

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
冬雪雪冬 + 1 + 1

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-16 09:02:27 | 显示全部楼层
while 1:
    str1=input()
    str1.replace('a','b')

    x= 'auieo'
    list1=[]
    count=0
    for i in range(len(str1)):
        for r in range(5):
            if str1[i]==x[r]:
                count+=1
                list1.append(i)
               

    str2=list(str1)
   
    if count==2 :
        a=str2[list1[0]]
        b=str2[list1[1]]
        if a!=b:
            str2[list1[0]]=b
            str2[list1[1]]=a
            str3=''.join(str2)#将列表转化为字符串
            print(str3)
        else:
            print('none')
    else:
        print('none')
显示:
ersde
none
sdee
none
sdefa
sdafe
sdfeae
none

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-16 09:13:35 | 显示全部楼层
刚刚穿错了,加了个函数
def position():
   
        str1=input()
        x= 'auieo'
        list1=[]
        count=0
        for i in range(len(str1)):
            for r in range(5):
                if str1[i]==x[r]:
                    count+=1
                    list1.append(i)
                    

        str2=list(str1)
        
        if count==2 :
            a=str2[list1[0]]
            b=str2[list1[1]]
            if a!=b:
                str2[list1[0]]=b
                str2[list1[1]]=a
                str3=''.join(str2)#将列表转化为字符串
                print(str3)
            else:
                print('none')
        else:
            print('none')

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-16 09:25:57 | 显示全部楼层
  1. def change(old):
  2.     vowel = 'aeiou'
  3.     #list1存储每个元音的个数
  4.     list1 = [0] * 5
  5.     for i in range(5):
  6.         list1[i] = old.count(vowel[i])
  7.     if list1.count(1)!= 2:
  8.         return None
  9.     else:
  10.         #list2存储两个元音在原字符串里的索引值
  11.         list2 = []
  12.         for i in range(5):
  13.             if old.find(vowel[i])!= -1:
  14.                 list2.append(old.find(vowel[i]))
  15.         list2.sort()
  16.         x = list2[0]
  17.         y = list2[1]
  18.         new = old[:x] + old[y] + old[x+1:y] + old[x] + old[y+1:]
  19.         return new
复制代码
  1. >>> change('apple')
  2. 'eppla'
  3. >>> change('machin')
  4. 'michan'
  5. >>> change('abca')
  6. >>> change('abicod')
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-16 09:38:26 | 显示全部楼层
  1. def vowels(n):
  2.     list1 = []
  3.     string = ''
  4.     for i in n:
  5.         if i in ['a', 'e', 'i', 'o', 'u']:
  6.             list1.append(i)

  7.     if len(set(list1)) == 2 and len(list1) == 2:
  8.         list1.reverse()
  9.         for i in n:
  10.             if i not in ['a', 'e', 'i', 'o', 'u']:
  11.                 string += i
  12.             else:
  13.                 for each in list1:
  14.                     if each not in string:
  15.                         string += each
  16.                         break

  17.         return string

  18.     else:
  19.         return None

  20. temp = input('请输入有两个不同元音的单词:')
  21. X = vowels(temp)
  22. print(X)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-16 09:53:08 | 显示全部楼层
  1. list1 = ['a','e','i','o','u']
  2. list2 = []
  3. def swap(str1):
  4.     """交换字符串中的元音字母位置"""
  5.     str1 = list(str1)
  6.     for i in str1:
  7.         if i in list1:
  8.             #保存元音字母在给定字符串中的下标
  9.             sub = str1.index(i)
  10.             #储存在list2中
  11.             list2.append(sub)
  12.     #根据下标个数判断元音个数      
  13.     if len(list2) == 2:
  14.         #判断两个元音字母是否相等
  15.         if str1[list2[0]] != str1[list2[1]]:
  16.             #交换元音字母位置
  17.             str1[list2[0]],str1[list2[1]] = str1[list2[1]],str1[list2[0]]
  18.             #转换成字符串
  19.             print(''.join(str1))
  20.         else:
  21.             print("None")
  22.     else:
  23.         print("None")
  24.         
  25. str1 = input("输入进行测试的字符串:")
  26. swap(str1)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-16 10:02:57 | 显示全部楼层
  1. while True:
  2.     temp = input('输入字符串:')
  3.     mm = str(temp)
  4.     n = 0
  5.     x = ['a', 'e', 'i', 'o', 'u']
  6.     new_mm = ''

  7.     str_a = []
  8.     p = []
  9.     ss = ''

  10.     for i in range(len(mm)):
  11.         str_a.append(mm[i])
  12.         if mm[i] in x:
  13.             n += 1
  14.             p.append(i)
  15.         else:
  16.             pass


  17.     if n == 2:
  18.         ss = str_a[p[0]]
  19.         str_a[p[0]] = str_a[p[1]]
  20.         str_a[p[1]] = ss
  21.         for each in str_a:
  22.             new_mm += each

  23.         print(new_mm)

  24.     else:
  25.         print('None')

复制代码

结果:
输入字符串:edit
idet
输入字符串:history
hostiry
输入字符串:hisiiii
None
输入字符串:hisdf
None
输入字符串:

点评

输入abca错误  发表于 2018-3-16 21:52

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
冬雪雪冬 + 1 + 1

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-16 10:05:49 | 显示全部楼层

def check_a(alpha):
        a = ''
        b = ''
        output = ''
        count = 0
        for i in alpha:
                if i in check_str:
                        count +=1
                        if count < 3:
                                if not len(a):
                                        a = i
                                else:
                                        b = i
                                        #print(a,b)
                                if a == b:
                                        return None    #a和b一样return None
                        else:
                                return None                #元音超过3个return None

        if len(a) == len(b) == 1:
                beta = list(alpha)
                x = beta.index(a)
                y = beta.index(b)
                beta[x], beta[y] = b, a
                for j in beta:
                        output += j
                return output
        else:
                return None      #其他不符合情况return None

check_str = 'aeiou'
alpha = input('请输入字符串:')
print(check_a(alpha))

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-16 10:07:33 | 显示全部楼层
本帖最后由 graceasyi 于 2018-3-16 11:36 编辑

时间有限,先写了一个,有点复杂,有空再优化。

  1. str1 = input("请输入字符串:")
  2. vowel=['a', 'e', 'i', 'o', 'u']
  3. num = []
  4. for s in vowel:
  5.     num.append(str1.count(s))

  6. if num.count(1)==2:
  7.     v = []
  8.     for i, c in enumerate(str1):
  9.         if c in vowel:
  10.             v.append(i)
  11.             v.append(c)
  12.     tmp = list(str1)
  13.     tmp[v[0]], tmp[v[2]] = v[3], v[1]
  14.     print(''.join(tmp))
  15. else:
  16.     print("不符合条件")
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-16 10:13:11 | 显示全部楼层
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 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')

点评

输入abca错误  发表于 2018-3-16 21:55

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
冬雪雪冬 + 1 + 1

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-16 10:39:00 | 显示全部楼层
  1. def exchange(st):   
  2.     count = 0
  3.     vowel = ['a', 'e', 'i', 'o', 'u']
  4.     collector = []
  5.     lis = [i for i in st]
  6.     for j in vowel:
  7.         if j in lis:
  8.             count += 1
  9.             collector.append(j)
  10.     if count >= 3 or count < 2 or len(set(collector)) == 1:
  11.         return 'None'
  12.     else:
  13.         i = lis.index(collector[0])
  14.         j = lis.index(collector[1])
  15.         lis[i], lis[j] = lis[j], lis[i]
  16.         st = ''.join([i for i in lis])
  17.         return st
  18. str1 = 'apple'
  19. str2 = 'machin'
  20. str3 = 'abca'
  21. str4 = 'abicod'
  22. print(exchange(str1))
  23. print(exchange(str2))
  24. print(exchange(str3))
  25. print(exchange(str4))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-27 01:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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