鱼C论坛

 找回密码
 立即注册
查看: 4935|回复: 21

[技术交流] Python:每日一题85(答题领鱼币)

[复制链接]
发表于 2017-8-25 12:29:51 | 显示全部楼层 |阅读模式

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

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

x
题目:
编写一个字符串处理函数,1)如果输入的字符串不包含元音字母(aeiouAEIOU)则输出这个字符且首字符小写其他大写;2)如果输入的字符串包含元音字母,则输入这个字符串且首个元音字母后面紧跟的一个辅音字母(非aeiouAEIOU)大写,其他小写,如果是连续元音字母则后推到后面第一个辅音字母;3)如果输入的字符串包含元音字母,按照2)无法找到辅音字母则输出这个字符串且全体大写。
  1. def fun(string):
  2.     pass

  3. print(fun('str'))
  4. print(fun('FishC'))
  5. print(fun('boolean'))
  6. print(fun('too'))
复制代码

  1. sTR
  2. fiShc
  3. booLean
  4. TOO
复制代码


楼主的解法:
游客,如果您要查看本帖隐藏内容请回复

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2017-8-25 13:23:40 | 显示全部楼层
耍宝写法,return嵌套
  1. def fun(string):
  2.         string = string.lower()
  3.         return string[0]+string[1:].upper() if not set(string)&set('aeiou') else (string.upper() if set(string[1:])<=set('aeiou') else [string[:i+1]+string[i+1].upper()+string[i+2:] for i in range(1, len(string)-1) if string[i] in 'aeiou' and string[i+1] not in 'aeiou'][0])
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-8-25 18:39:23 | 显示全部楼层
  1. def fun(string):
  2.     s = string.lower()
  3.     flag = 0 #没有元音
  4.     y = 0 #存放连续元音最后一个的索引
  5.     for (i,j) in zip(s, range(len(s))):
  6.         if i in 'aeiou':
  7.             if j == len(s)-1:
  8.                 flag = 1 #元音在最后的位置
  9.             elif j+2 <= len(s):
  10.                 if s[j+1] in 'aeiou':
  11.                     continue
  12.                 else:
  13.                     y = j # 有连续元音
  14.                     flag = 2
  15.                     break
  16.    
  17.     if flag == 0:
  18.         s = s[0] + s[1:].upper()
  19.     elif flag == 1:
  20.         s = s.upper()
  21.     elif flag == 2:
  22.         s = s[:y+1] + s[y+1].upper() + s[y+2:]
  23.     return s
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-8-25 19:09:20 | 显示全部楼层
3种情况:1、无元音
              2.1、元音后有辅音
              2.2、元音后无辅音
用re,找元音后第一个辅音
  1. import re

  2. def fun(string):
  3.     s = string.lower()
  4.     if set(s).intersection(set("aeiou")):
  5.         m = re.search(r"(?<=[aeiou])[^aeiou]", s)
  6.         return s[:m.start()]+s[m.start():].capitalize() if m else s.upper()
  7.     else:
  8.         return s.capitalize().swapcase()
复制代码

如果不用 re 的话
我想先找出所有辅音,然后用字母外的东东拼长,
再与原string对比,,元素不同且不为元音的就是目标,取其索引
  1. def fun2(string):
  2.     s = string.lower()
  3.     cons = [i for i in s if i not in "aeiou"]
  4.     nums = {k for i,j,k in zip(cons+list('。'*len(s)),s,range(len(s))) if i!=j and j not in "aeiou"}
  5.    
  6.     if cons == list(s):
  7.         return s.capitalize().swapcase()     
  8.     else:
  9.         return s[:min(nums)]+s[min(nums):].capitalize() if nums else s.upper()
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-8-26 19:03:47 | 显示全部楼层
  1. def fun(str0):
  2.    index0 = -1
  3.    index1 = -1
  4.    for i in str0:
  5.        if(i in ('aeiouAEIOU')):
  6.           index0 = str0.index(i)
  7.           for j in str0[index0:]:
  8.             if(j not in ('aeiouAEIOU')):
  9.                index1 = str0.index(j)
  10.                break
  11.           break
  12.    if(index0 == -1):
  13.       return str0[0].lower()+str0[1:].upper()
  14.    elif (index1!=-1):
  15.       return str0[0:index1].lower()+str0[index1].upper()+str0[index1+1:].lower()
  16.    else:
  17.       return str0.upper()
  18. str0=input('请输入一个字符串:')
  19. print(fun(str0))
复制代码

运行结果:
>>>
============== RESTART: C:\Users\每日一题\85.py==============
请输入一个字符串:str
sTR
>>>
============== RESTART: C:\Users\每日一题\85.py==============
请输入一个字符串:FishC
fiShc
>>>
============== RESTART: C:\Users\每日一题\85.py==============
请输入一个字符串:boolean
booLean
>>>
============== RESTART: C:\Users\每日一题\85.py ==============
请输入一个字符串:too
TOO

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-8-28 22:24:58 | 显示全部楼层
def fun(string):
    s = string.lower()
    flag = 0 #没有元音
    y = 0 #存放连续元音最后一个的索引
    for (i,j) in zip(s, range(len(s))):
        if i in 'aeiou':
            if j == len(s)-1:
                flag = 1 #元音在最后的位置
            elif j+2 <= len(s):
                if s[j+1] in 'aeiou':
                    continue
                else:
                    y = j # 有连续元音
                    flag = 2
                    break
   
    if flag == 0:
        s = s[0] + s[1:].upper()
    elif flag == 1:
        s = s.upper()
    elif flag == 2:
        s = s[:y+1] + s[y+1].upper() + s[y+2:]
    return s
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-29 00:54:44 | 显示全部楼层
  1. def fun():
  2.     str1 = input('请输入:')
  3.     for x in str1:
  4.         if x in 'aeiouAEIOU':
  5.             if str1.endswith(x):
  6.                 return str1.upper()
  7.             for t in range(str1.find(x)+1, len(str1)):
  8.                 if str1[t] not in 'aeiouAEIOU':
  9.                     return str1[:t].lower() + str1[t].upper() + str1[t+1:].lower()
  10.             else:
  11.                 return str1.upper()
  12.     return str1[0].lower() + str1[1:].upper()

  13. print(fun())
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-30 16:10:14 | 显示全部楼层
  1. def is_vowel(s):
  2.     if s.lower() in 'aeiou':
  3.         return True
  4.     else:
  5.         return False

  6. def fun(string):
  7.     string = string.lower()
  8.     i = 0
  9.     while i < len(string):
  10.         if is_vowel(string[i]) and not is_vowel(string[i + 1]):
  11.             return string[:i+1] + string[i+1].upper() + string[i+2:]
  12.         else:
  13.             i += 1
  14.             if i == len(string)-1 and is_vowel(string[i]):
  15.                 return string.upper()
  16.     else:
  17.         return string[0] + string[1:].upper()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-16 13:55:26 | 显示全部楼层
def fun(string):
        string = string.lower()
        return string[0]+string[1:].upper() if not set(string)&set('aeiou') else (string.upper() if set(string[1:])<=set('aeiou') else [string[:i+1]+string[i+1].upper()+string[i+2:] for i in range(1, len(string)-1) if string[i] in 'aeiou' and string[i+1] not in 'aeiou'][0])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-5 09:29:33 | 显示全部楼层
  1. yuanYin = 'aeiouAEIOU'
  2. fuYin = 'bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ'

  3. def hasYuanyin(string):
  4.     for char in string:
  5.         if char in yuanYin:
  6.             return True
  7.     return False

  8. def fun(string):
  9.     if not hasYuanyin(string):
  10.         s = [char for char in string.upper()]
  11.         s[0] = s[0].lower()
  12.         return ''.join(s)
  13.     else:
  14.         length = len(string)
  15.         s = [char for char in string.lower()]
  16.         startYuanyin = 0  # 起始元音位置
  17.         continuousYuanyin = 0 # 首个元音后连续元音个数(含首个元音)
  18.         startFuyin = 0
  19.         for i in range(length):
  20.             if s[i] in yuanYin:
  21.                 startYuanyin = i
  22.                 break
  23.         if startYuanyin == length - 1:
  24.             return string.upper()
  25.         else:
  26.             for i in range(startYuanyin, length):
  27.                 if s[i] in yuanYin:
  28.                     continuousYuanyin += 1
  29.                 else:
  30.                     break
  31.             startFuyin = startYuanyin + continuousYuanyin
  32.             if startFuyin == length:
  33.                 return string.upper()
  34.             else:
  35.                 s[startFuyin] = s[startFuyin].upper()
  36.                 return ''.join(s)

  37. print(fun('str'))
  38. print(fun('FishC'))
  39. print(fun('boolean'))
  40. print(fun('too'))
  41. print(fun('jkjkjkljljlo'))

  42. sTR
  43. fiShc
  44. booLean
  45. TOO
  46. JKJKJKLJLJLO
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-29 10:54:29 | 显示全部楼层
  1. def func(string):
  2.     check = 'aeiouAEIOU'
  3.     for i in range(len(string)):
  4.         if string[i] in check and i == len(string)-1:
  5.             return string.upper()
  6.         elif string[i] in check and string[i+1] not in check:
  7.             return string[:i+1].lower()+string[i+1].upper()+string[i+2:].lower()
  8.     else:
  9.         return string[0].lower()+string[1:].upper()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-28 17:44:25 | 显示全部楼层
kankan
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-28 17:45:26 | 显示全部楼层
本帖最后由 咕咕鸡鸽鸽 于 2019-3-2 13:48 编辑

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

使用道具 举报

发表于 2019-2-28 17:46:33 | 显示全部楼层
本帖最后由 咕咕鸡鸽鸽 于 2019-3-2 13:48 编辑

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

使用道具 举报

发表于 2019-2-28 17:48:10 | 显示全部楼层
  1. def fun85(str1):
  2.     vowel = ["a","e","i","o","u"]   
  3.     alive = False
  4.     for each in str1:
  5.         if each.lower() in vowel:
  6.             alive = True
  7.             index = str1.index(each)
  8.             break

  9.     if alive:
  10.         while str1[index+1] in vowel:
  11.             index += 1
  12.             if index == len(str1)-1:
  13.                 return str1.upper()
  14.         return str1[:index+1].lower() + str1[index+1].upper() + str1[index+2:].lower()        
  15.     else:
  16.         return str1[0].lower() + str1[1:].upper()

  17. print(fun85("str"))
  18. print(fun85("FishC"))
  19. print(fun85("boolean"))
  20. print(fun85("too"))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-17 14:06:58 | 显示全部楼层
  1. import re


  2. def f_85(string: str) -> str:
  3.     if not re.match(r'.*[aeiouAEIOU].*', string):
  4.         return string[0].lower() + string[1:].upper()
  5.     else:
  6.         first_vowels = re.search(r'[aeiouAEIOU]+', string)
  7.         consonants = re.split(first_vowels.group(), string)
  8.         if consonants[1] == '':
  9.             return string.upper()
  10.         else:
  11.             return consonants[0].lower() + first_vowels.group().lower() + consonants[1].capitalize()


  12. print(f_85('aOOl'))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-17 14:09:34 | 显示全部楼层
  1. import re


  2. def f_85(string: str) -> str:
  3.     if not re.match(r'.*[aeiouAEIOU].*', string):
  4.         return string[0].lower() + string[1:].upper()
  5.     else:
  6.         first_vowels = re.search(r'[aeiouAEIOU]+', string)
  7.         consonants = re.split(first_vowels.group(), string)
  8.         if consonants[1] == '':
  9.             return string.upper()
  10.         else:
  11.             return consonants[0].lower() + first_vowels.group().lower() + consonants[1].capitalize()


  12. print(f_85('aOOl'))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-31 19:54:08 | 显示全部楼层
  1. def fun(string):
  2.     vowel_list = ["a", "e", "i", "o", "u"]
  3.     string = string.lower()
  4.    
  5.     last_char = "c"
  6.     result = 0

  7.     for s in string:
  8.         # 查找[元音+辅音]的组合
  9.         if (s not in vowel_list) and (last_char in vowel_list):
  10.             # 找到后返回辅音的下标
  11.             result = string.find(s)
  12.             break
  13.         else:
  14.             last_char = s

  15.     if result:
  16.         # 存在[元音+辅音]的组合
  17.         return string[:result] + string[result:].capitalize()
  18.         print(result)
  19.     elif last_char in vowel_list:
  20.         # 没有[元音+辅音]的组合,但有元音
  21.         return string.upper()
  22.     else:
  23.         # 没有元音
  24.         return string.capitalize().swapcase()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 10:07:26 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-9 08:46:04 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-18 11:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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