鱼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 in s1:
        jl+=
   
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 | 显示全部楼层
  1. def change(s):
  2.     s = list(s)
  3.     lst = ['a', 'e', 'i', 'o', 'u']
  4.     fla = [i for i in s if i in lst]
  5.     if len(fla) % 2 != 0:
  6.         return None
  7.     elif list(set(fla)) != fla:
  8.         return None
  9.     else:
  10.         temp1 = s[int(s.index(fla[0]))]
  11.         temp2 = s[int(s.index(fla[1]))]
  12.         s[int(s.index(fla[1]))] = temp1
  13.         s[int(s.index(fla[0]))] = temp2
  14.     return ''.join(s)
复制代码

麻烦else哪里怎么改成一行呢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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




  18. def main():
  19.     a = ZhuanHuan("apple")
  20.     b = ZhuanHuan("michan")
  21.     c = ZhuanHuan("abcd")
  22.     d = ZhuanHuan("abicod")
  23.     print (a,b,c,d)

  24. if __name__ == "__main__":
  25.     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哪里怎么改成一行呢。

试了一下:
  1. 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一下
或者这样:
  1. return  ''.join(list(map(lambda x:(fla[0] if x == fla[1] else fla[1]) if x in lst else x, s)))
复制代码


但是貌似上面的这句代码有问题……
  1. 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 | 显示全部楼层
  1. def change(s):
  2.     s = list(s)
  3.     lst = ['a', 'e', 'i', 'o', 'u']
  4.     fla = [i for i in s if i in lst]
  5.     if len(fla) % 2 != 0:
  6.         return None
  7.     elif list(set(fla)) != fla:
  8.         return None
  9.     else:
  10.         temp1 = s[int(s.index(fla[0]))]
  11.         temp2 = s[int(s.index(fla[1]))]
  12.         s[int(s.index(fla[1]))] = temp1
  13.         s[int(s.index(fla[0]))] = temp2
  14.     return ''.join(s)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

  9. print(vocalExchange("apple"))
  10. print(vocalExchange("machin"))
  11. print(vocalExchange("abca"))
  12. 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 编辑
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-

  3. def output(str_origin):
  4.         list_temp = []
  5.         str_origin = str_origin.lower()
  6.         str_vowel = [i for i in str_origin if i in'aeiou']
  7.         for each in str_origin:
  8.                 if each in 'aeiou':
  9.                         list_temp.append(each)
  10.         if (len(str_vowel) == 2) and len(set(str_vowel)) == 2:
  11.                 str_origin = str_origin[:str_origin.index(list_temp[0])] + list_temp[-1] +\
  12.                 str_origin[str_origin.index(list_temp[0]) + 1:str_origin.index(list_temp[-1])]+ list_temp[0] +\
  13.                 str_origin[str_origin.index(list_temp[-1])+1:]
  14.                 return str_origin
  15.         else:return None

  16.                                

  17. if __name__ == '__main__':
  18.         # str_origin = input("请输入字符串:")
  19.         str_origin = 'iye'
  20.         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 | 显示全部楼层
  1. def day164(temp):
  2.     str1 = 'aeiou'
  3.     str2 = ''

  4.     for each in temp:
  5.         for i in str1:
  6.             if each == i:
  7.                 str2 += i

  8.     if len(str2) == 2 and str2[0] != str2[1]:
  9.         temp1 = temp.replace(str2[1],str2[0])
  10.         temp1 = temp.replace(str2[0],str2[1],1)
  11.         return temp1
  12.     else:
  13.         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-5-19 10:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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