鱼C论坛

 找回密码
 立即注册
查看: 10606|回复: 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语言的运用为主,算法为辅。
对于提供优质题目的鱼油给予鱼币奖励。
可以发私信给我或直接发帖。

本帖被以下淘专辑推荐:

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

使用道具 举报

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

count_1 = []

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

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

if t:
    if len(count_1) == 2: #只执行包含两个原音的字符串
        a = count_1[0]
        b = count_1[1]
        position_a = list_b.index(count_1[0])
        position_b = list_b.index(count_1[1])
        del list_b[position_a]
        list_b.insert(position_a,b)
        del list_b[position_b]
        list_b.insert(position_b,a)
        word = ''.join(list_b)
        print('结果是:',word)

    else:
        print('None')

点评

输入apple,打印None  发表于 2018-3-16 21:00
想知道小甲鱼最近在做啥?请访问 -> 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

查看全部评分

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

使用道具 举报

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

print(func(a))  #  -- > eppla
print(func(b))  #  -- > michan
print(func(c))  #  -- > None
print(func(d))  #  -- > None
print(func(e))  #  -- > None
print(func(f))  #  -- > None
print(func(g))  #  -- > None

评分

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

查看全部评分

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

使用道具 举报

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

多回一贴,领奖励咯!
之前还写了一个比较墨迹的,粘贴于此。
def func(string):
    yuanyin = 'aiueo'
    container = []
    firstYuanyin = [0, False]
    secondYuanyin = [0, False]
    for i in string:
        if i in yuanyin:
            if firstYuanyin[1] == False:
                firstYuanyin[0], firstYuanyin[1] = string.index(i), True
                container.append(i)
            elif secondYuanyin[1] == False:
                if i in container:
                    return None, '重复元音'
                else:
                    secondYuanyin[0], secondYuanyin[1] = string.index(i), True
            else:
                return None, '多于两个元音'
    if firstYuanyin[1] == False:
        return None, '没有元音'
    elif secondYuanyin[1] == False:
        return None, '只有一个元音'
    
    newSring = list(string)
    newSring[firstYuanyin[0]], newSring[secondYuanyin[0]] = newSring[secondYuanyin[0]], newSring[firstYuanyin[0]]
    return ''.join(newSring)
                

a = 'apple'
b = 'machin'
c = 'appla'
d = 'abicod'
e = 'abbbbbbb'
f = 'bdfssdfs'
g = 'abocda'

print(func(a))  #  -- > eppla
print(func(b))  #  -- > michan
print(func(c))  #  -- > (None, '重复元音')
print(func(d))  #  -- > (None, '多于两个元音')
print(func(e))  #  -- > (None, '只有一个元音')
print(func(f))  #  -- > (None, '没有元音')
print(func(g))  #  -- > (None, '多于两个元音')

评分

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

查看全部评分

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

使用道具 举报

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

                

        if len(flag) != 2:
                return 0
        for each in flag.values():
                if each == 1:
                        return 0

        result = ''
        cnt = 0
        for each in str1:
                if each not in standard:
                        result = result + each
                else:
                        cnt = cnt + 1
                        result = result + index_number[len(index_number) - cnt]
        return result

if __name__ == '__main__':
        str1 = input('请输入字符串:')
        if type(check_vowel(str1)) == str:
                print(check_vowel(str1))
        else:
                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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> 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

查看全部评分

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

使用道具 举报

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

    num = 0 #元音字母出现的次数
    L_2 = []
    for i in new_del(L_1):
        if i in proving:
            num += 1
    if num != 2:  #判断当输入字符不满足条件时 
        print('None')
        #下面运行的代码是当输入字符满足条件时
    else:
        for i in L_1:
            if i in proving:
                L_2.append(L_1.index(i))
            #变换
        a = L_1[L_2[0]]
        L_1[L_2[0]] = L_1[L_2[1]]
        L_1[L_2[1]] = a
        print("".join(L_1))
    result = input("是否还想验证:请输入'Y'or'N'")
    if result == 'N':
        break

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> 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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> 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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> 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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> 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

查看全部评分

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

使用道具 举报

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

评分

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

查看全部评分

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

使用道具 举报

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

    if len(set(list1)) == 2 and len(list1) == 2:
        list1.reverse()
        for i in n:
            if i not in ['a', 'e', 'i', 'o', 'u']:
                string += i
            else:
                for each in list1:
                    if each not in string:
                        string += each
                        break

        return string

    else:
        return None

temp = input('请输入有两个不同元音的单词:')
X = vowels(temp)
print(X)

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-16 09:53:08 | 显示全部楼层
list1 = ['a','e','i','o','u']
list2 = []
def swap(str1):
    """交换字符串中的元音字母位置"""
    str1 = list(str1)
    for i in str1:
        if i in list1:
            #保存元音字母在给定字符串中的下标
            sub = str1.index(i)
            #储存在list2中
            list2.append(sub)
    #根据下标个数判断元音个数       
    if len(list2) == 2:
        #判断两个元音字母是否相等
        if str1[list2[0]] != str1[list2[1]]:
            #交换元音字母位置
            str1[list2[0]],str1[list2[1]] = str1[list2[1]],str1[list2[0]]
            #转换成字符串
            print(''.join(str1))
        else:
            print("None")
    else:
        print("None")
        
str1 = input("输入进行测试的字符串:")
swap(str1)

评分

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

查看全部评分

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

使用道具 举报

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

    str_a = []
    p = []
    ss = ''

    for i in range(len(mm)):
        str_a.append(mm[i])
        if mm[i] in x:
            n += 1
            p.append(i)
        else:
            pass


    if n == 2:
        ss = str_a[p[0]]
        str_a[p[0]] = str_a[p[1]]
        str_a[p[1]] = ss
        for each in str_a:
            new_mm += each

        print(new_mm)

    else:
        print('None')
结果:
输入字符串:edit
idet
输入字符串:history
hostiry
输入字符串:hisiiii
None
输入字符串:hisdf
None
输入字符串:

点评

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

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> 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

查看全部评分

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

使用道具 举报

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

时间有限,先写了一个,有点复杂,有空再优化。
str1 = input("请输入字符串:")
vowel=['a', 'e', 'i', 'o', 'u']
num = []
for s in vowel:
    num.append(str1.count(s))

if num.count(1)==2:
    v = []
    for i, c in enumerate(str1):
        if c in vowel:
            v.append(i)
            v.append(c)
    tmp = list(str1)
    tmp[v[0]], tmp[v[2]] = v[3], v[1]
    print(''.join(tmp))
else:
    print("不符合条件")

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> 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

查看全部评分

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

使用道具 举报

发表于 2018-3-16 10:39:00 | 显示全部楼层
def exchange(st):    
    count = 0
    vowel = ['a', 'e', 'i', 'o', 'u']
    collector = []
    lis = [i for i in st]
    for j in vowel:
        if j in lis:
            count += 1
            collector.append(j)
    if count >= 3 or count < 2 or len(set(collector)) == 1:
        return 'None'
    else:
        i = lis.index(collector[0])
        j = lis.index(collector[1])
        lis[i], lis[j] = lis[j], lis[i]
        st = ''.join([i for i in lis])
        return st
str1 = 'apple'
str2 = 'machin'
str3 = 'abca'
str4 = 'abicod'
print(exchange(str1))
print(exchange(str2))
print(exchange(str3))
print(exchange(str4))

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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