鱼C论坛

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

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

[复制链接]
发表于 2018-3-16 10:44:52 | 显示全部楼层
本帖最后由 雪人爱晒大太阳 于 2018-3-16 10:45 编辑

想了好久。。。感觉自己想复杂了。。
def detective_string(x):
    count = {'a':0,'e':0,'i':0,'o':0,'u':0}
    flag = 1
    kind = []
    for i in x:
        if i in count:
            count[i] += 1
    for key,value in count.items():
        if value > 2 :
            flag = 0
            break
    for key,value in count.items():
        if value == 0:
            kind.append(key)
    for i in kind :
        count.pop(i)
    k = len(count)
    if k > 2 or k <= 1:
        flag = 0
    return flag,count

def string_change(x,count):
    index_list = []
    value_list = []
    for key,value in count.items():
        num = x.find(key)
        index_list.append(num)
        value_list.append(key)
    string_reverse = x[::]
    t = string_reverse[::]
    string_change = ''
    string_reverse = string_reverse.replace(value_list[0],value_list[-1])
    k = 0
    for i in string_reverse:
        if k == index_list[-1]:
            i = value_list[0]
            string_change += i
        else:
            string_change += i
        k += 1
    
    return string_change


def main():
    x = input("Please input a string:")
    (flag,count) = detective_string(x)
    if flag == 0:
        print("None")
    else:
        string_reverse = string_change(x,count)
        print(string_reverse)

>>> main()
Please input a string:apple
eppla
>>> main()
Please input a string:machin
michan
>>> main()
Please input a string:abca
None
>>> main()
Please input a string:abicod
None

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-16 10:54:11 | 显示全部楼层
import re
def alp(x):
    p='[aeiou]'
    l=re.findall(p,x)
    try:
        a=re.search(p,x).start()
        b=re.search(p,x[a+1:]).start()+a+1
        if len(l)==2 and len(set(l))==2:
            return x[:a]+x[b]+x[a+1:b]+x[a]+x[b+1:]
    except:
        pass

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-16 11:30:53 | 显示全部楼层
def fun(str):
    suba = 'a'
    sube = 'e'
    subi = 'i'
    subo = 'o'
    subu = 'u'
    sub = 'aeiou'
    counta = str.count(suba)
    counte = str.count(sube)
    counti = str.count(subi)
    counto = str.count(subo)
    countu = str.count(subu)
    if((counta+counte+counti+counto+countu) ==2 and counta<=1 and counte<=1 and counti <=1 and counto<=1 and countu<=1):
        index1 = -1
        index2 = -1
        for i in sub:
            if index1 == -1:
                index1 = str.find(i)
            elif index2 == -1:
                index2 = str.find(i)
        mi = min(index1,index2)
        ma = max(index1,index2)
        temp = str[ma]
        trailer = str[ma+1:] if ma + 1 < len(str) else ''
        str = str[0:ma] + str[mi] + trailer
        str = str[0:mi] + temp + str[mi+ 1:]
        return str
    else:
        return None

print(fun('machin'))

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-16 11:31:12 | 显示全部楼层
def f(s):
    vowel = 'aeiou'
    cnt = []
    for i in vowel:
        cnt.append(s.count(i))
    D = dict(zip(vowel, cnt))
    if sum(D.values()) == 2 and max(D.values()) == 1:
        swap = [v for v in D.keys() if D[v] == 1]
        L = list(s)
        L[s.index(swap[0])] = swap[1]
        L[s.index(swap[1])] = swap[0]
        return ''.join(L)
    return 'None'

print(f('apple'))
print(f('machin'))
print(f('abca'))
print(f('abicod'))

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-16 12:02:26 | 显示全部楼层
def fun(word):
    
    if not word.islower():
        return None

    vowel = 'aeiou'
    serial = []
    all_vowel = 0
    for each in vowel:
        num_vowel = word.count(each)
        if num_vowel > 1:
            return None
        elif num_vowel == 1:
            serial.append(each)
            all_vowel += 1
        else:
            continue

    if all_vowel != 2:
        return None
    else:
        new = word.replace(serial[0], '+')
        new = new.replace(serial[1], serial[0])
        new = new.replace('+', serial[1])
        return new

word = input('请输入单词:')
print(fun(word))

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-16 12:23:12 | 显示全部楼层
本帖最后由 天圆突破 于 2018-3-17 14:58 编辑
from functools import reduce
def func(string):
    aeiou = set(filter(lambda x: x if x in ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'] else False, string))
    if len(aeiou) != 2:
        return None
    else:
        a, b = aeiou
        return reduce(lambda x,y:x+y, map(lambda x: (a if x == b else b) if x in aeiou else x,list(string)))

if __name__ == '__main__':
    print(func('apple'))
    print(func('machin'))
    print(func('abca'))
    print(func('abicod'))


强行一行:
from functools import reduce
func = lambda y:None if len(set(filter(lambda x: x if x in ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'] else False, y))) != 2 else reduce(lambda x,y:x+y, map(lambda x: (list(set(filter(lambda x: x if x in ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'] else False, y)))[0] if x == list(set(filter(lambda x: x if x in ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'] else False, y)))[1] else list(set(filter(lambda x: x if x in ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'] else False, y)))[1]) if x in list(set(filter(lambda x: x if x in ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'] else False, y))) else x,list(y)))

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-16 12:39:05 | 显示全部楼层
'''
元音字母 有:a,e,i,o,u五个, 写一个函数,交换字符串的元音字符位置。
假设,一个字符串中只有二个不同的元音字符。
二个测试用例:
输入 apple  输出 eppla
输入machin  输出 michan
不符合要求的字符串,输出None,比如:
输入 abca (两个元音相同) 输出 None
输入 abicod (有三个元音) 输入None
'''

#判断是否符合要求的字符串
#如果符合要求,返回元音字符索引,否则返回False
def yy_counter(strx):
    teststr=['a','e','i','o','u']
    counter=0
    for c in teststr:
        tcounter=strx.count(c)
        if tcounter>=2:
            return False
        else:
            counter=counter+tcounter
            if counter>2:
                return False
            else:
                continue
    if counter==2:
        lt=[]
        for c in teststr:
            label=strx.find(c)
            if label!=-1:
                lt.append(label)
            else:
                continue               
        return lt
    else:
        return False

#最终函数
def replace_yychar(strx):
    tl=list(strx)
    if not yy_counter(strx):
        return 'None'
    else:
        jf=yy_counter(strx)
        tc=tl[jf[1]]
        tl[jf[1]]=tl[jf[0]]
        tl[jf[0]]=tc
        return ''.join(tl)
teststr=replace_yychar('ab    cod') 
print(teststr) 

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-16 12:47:16 | 显示全部楼层
list1 = ['a','e','i','o','u']
list2 = []
def search_str(instr):
    count = 0
    count1 = -1
    for i in instr:
        if i in list1:
            count += 1
            list2.append(i)
    if count == 2:
        for x in range(count):
            if list2[x] == list2[x+1]:
                print('None')
            break
        for x in range(len(instr)):
            count1 += 1
            if instr[count1] not in list1:
                print(instr[count1],end='')
            else:
                print(list2.pop(),end='')
    else:
        print('None')

temp = input('---:')
search_str(temp)

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-16 13:12:54 | 显示全部楼层
def fun(s):
    s, lst =  list(s), ['a', 'e', 'i', 'o', 'u']
    vowel = [i for i in s for j in lst if i == j]

    if len( set(vowel) ) == 2:
        i, j = s.index( vowel.pop() ), s.index( vowel.pop() )
        s[i], s[j] = s[j], s[i]
        return ''.join(s)
    return None

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-16 14:25:33 | 显示全部楼层
def getnewstr(mstr):
  loc=[]
  k=0
  for p in mstr:
    if p in 'aeiou':
      loc.append(k)
      if len(loc)>2:
        return "None"
    k+=1
  if len(loc)<2:
    return "None"
  if mstr[loc[1]]==mstr[loc[0]]:
    return "None"
  newstr=''
  for k in range(0,len(mstr)):
    if k==loc[0]:
      newstr+=mstr[loc[1]]
    elif k==loc[1]:
      newstr+=mstr[loc[0]]
    else:
      newstr+=mstr[k]
  return newstr

mstr='case'
print("\n原字符"+mstr+"\n新字符"+getnewstr(mstr))

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-16 16:56:54 | 显示全部楼层
#-*- coding:utf-8 -*-
vowel = ['a','e','i','o','u']
def fun(string):
    i = 0
    lis = []
    new = ""
    for word in string:
        if word in vowel:
            lis.append(string.index(word))
            i += 1
    if i<2 or i >2:
        print(new + "none")
    else:
        temp = string[lis[0]]
        temp_1 = string[lis[1]]
        for st in string:       
            if string.index(st) == lis[0]:
                print(new + temp_1, end="")
            elif string.index(st) == lis[1]:
                print(new + temp, end="")
            else:
                print(new + st, end="")
    return new       
if __name__ == '__main__':
    string = "apple"
    fun(string)
    print()
    string1 = "banana"
    fun(string1)
    string2 = "juice "
    fun(string1)

测试结果
eppla
none
none

点评

abca出错  发表于 2018-3-17 20:57

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-16 17:08:08 | 显示全部楼层
刚开始学,感觉写的比较臃肿
def test1 :
    word = input('请输入一个单词:')

    list1 = ['a','e','i','o','u']
    list2 = list(word)
    list3 = []

    num = 0

    for x in list1 :
        nn = list2.count(x)
        if nn >=2 or num >2:
            print('None')
            break
        elif nn < 1:
            print('nn=%d ,x=%s'%(nn,x))
        else :
            num=num+nn
            list3.append(x)


    print(num)

    if num == 2:
        x=list2.index(list3[0])
        y=list2.index(list3[1])
        al=list2[x]
        bl=list2[y]
        list2[x]=bl
        list2[y]=al
        str1=''.join(list2)
        print(list3)
        print(str1)
    else :
        print('None')

点评

定义函数没有括号。  发表于 2018-3-17 21:00

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-16 17:22:20 | 显示全部楼层
本帖最后由 阿bang 于 2018-3-16 18:46 编辑
def change_vowel(word):
    count = 0
    changeword =list(word)
    for i in changeword:
        if i in 'aeiou':
            count += 1
            if count == 1:
                first = changeword.index(i)
                continue
            if i == changeword[first]:
                print 'None'
                return None
            if count == 2 and i != changeword[first]:
                second = changeword.index(i)

    if count == 2:
        temp = changeword[first]
        changeword[first] = changeword[second]
        changeword[second] = temp
        print ''.join(changeword),
    else:
        print 'None'
        return None


word = raw_input('Please input a string:')
change_vowel(word)

初学python,方法贼蠢.

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-16 18:18:15 | 显示全部楼层
本帖最后由 阿bang 于 2018-3-16 18:53 编辑
def change_vowel(word):
    char_numbers = 0
    for i in 'aeiou':
        if word.count(i):
            if word.count(i) >= 2:
                print None
                return
            char_numbers += word.count(i)
            if char_numbers == 1:
                firstord = word.index(i)
            elif char_numbers == 2:
                secondord = word.index(i)
    if char_numbers == 2:
        list1 = list(word)
        temp = word[firstord]
        list1[firstord] = list1[secondord]
        list1[secondord] = temp
        print ''.join(list1)
        return
    else:
        print None
        return

word = raw_input('Please input a string:')
change_vowel(word)

判断的过程换了个写法,思路和判断会清晰一点,对于None的返回效率会更高一点。不会无脑暴力执行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-16 20:05:45 | 显示全部楼层
def yuan(c):
    if c == 'a'or c == 'e' or c == 'i' or c == 'o' or c == 'u':
        return c
    else:
        return 0
str1 = input()
set1 = set()
list1 = []
for eachch in str1:
    if yuan(eachch):
        list1.append(str1.index(eachch))
        set1.add(eachch)
if len(set1) == 2:
            str1 = str1[:list1[0]] + str1[list1[1]]+str1[list1[0]+1:list1[1]]+str1[list1[0]]+str1[list1[1]+1:]
            print (str1)
else: 
    print ('None')

评分

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

查看全部评分

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

使用道具 举报

 楼主| 发表于 2018-3-16 20:57:35 | 显示全部楼层
评分截至标记。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-16 21:37:05 | 显示全部楼层
def ys(rs):
    sm = 0
    for i in list(rs):
        if i in list(yuany):
            sm += 1
    return sm
def mnn(sr):
    lieb = list(sr)
    for n in list (yuany):
        if n in sr:
            m=lieb.index(n)
            for n in list (yuany):
                if n in sr:
                    g=lieb.index(n)
        break
    lieb[m],lieb[g]=lieb[g],lieb[m]
    for i in lieb:
        print (i,end='')
        
   
   
sr = input ()
yuany = 'aeio'
ms = ys(sr)
if ms == 2:
    mnn(sr)
else:
    print ('None')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-16 22:08:44 | 显示全部楼层
本帖最后由 Agoni 于 2018-3-16 22:10 编辑
def swap(letter):
    vowel = "aeiou"
    pos_1 = 0   # 位置1
    pos_2 = 0   # 位置2
    temp = []
    num = 0
    for each in letter:
        if each in vowel:
            num += 1
            temp.append(each)
 #   print(num)
    if temp[0] == temp[1] or num > 2:
        return None
    # 查找元音字母的位置
    pos_1 = letter.find(temp[0])
    pos_2 = letter.find(temp[1])
#    print(temp,pos_1,pos_2)
    
    return letter[:pos_1] + temp[1] + letter[pos_1+1:pos_2] + temp[0] + letter[pos_2:]

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

使用道具 举报

发表于 2018-3-16 22:37:59 | 显示全部楼层
str1 = input('请输入单词:')
vowel = 'aeiou'
i = 0
j = 0
k = 0
ch1 = []
ch2 = []
temp1 = []
temp2 = []
for each in str1:
    if each in vowel:
        ch1.append(each)
        i += 1
if i != 2:
    print('None')
elif ch1[0] == ch1[1]:
        print('None')
else:
    ch2 = list(str1)
    for each in str1:
        if each in vowel:
            temp1.append(ch2[j])
            temp2.append(j)
            k += 1
        j += 1
    ch2[temp2[0]] = temp1[1]
    ch2[temp2[1]] = temp1[0]
str2 = ''.join(ch2)
print(str2)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-16 22:53:31 | 显示全部楼层
def fun(eng):
    List = ['a', 'e', 'i', 'o', 'u']
    leng = list(eng)
    count = 0
    k = []
    for i, each in enumerate(eng):
        if each in List:
            count += 1
            k.append([i, each])
        if count > 2:
            return None

    if count == 2:
        leng[k[0][0]], leng[k[1][0]] = k[1][1], k[0][1]
        result = ''.join(leng)
        if result != eng:
            return result


print(fun('apple'))
print(fun('appile'))
print(fun('aapple'))
print(fun('abca'))
没赶上时间,不过还是放这里。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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