鱼C论坛

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

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

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

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

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

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

print(fun('str'))
print(fun('FishC'))
print(fun('boolean'))
print(fun('too'))
sTR
fiShc
booLean
TOO

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

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2017-8-25 13:23:40 | 显示全部楼层
耍宝写法,return嵌套
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])

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-8-25 18:39:23 | 显示全部楼层
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

评分

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

查看全部评分

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

使用道具 举报

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

def fun(string):
    s = string.lower()
    if set(s).intersection(set("aeiou")):
        m = re.search(r"(?<=[aeiou])[^aeiou]", s)
        return s[:m.start()]+s[m.start():].capitalize() if m else s.upper()
    else:
        return s.capitalize().swapcase()
如果不用 re 的话
我想先找出所有辅音,然后用字母外的东东拼长,
再与原string对比,,元素不同且不为元音的就是目标,取其索引
def fun2(string):
    s = string.lower()
    cons = [i for i in s if i not in "aeiou"]
    nums = {k for i,j,k in zip(cons+list('。'*len(s)),s,range(len(s))) if i!=j and j not in "aeiou"}
    
    if cons == list(s):
        return s.capitalize().swapcase()     
    else:
        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 | 显示全部楼层
def fun(str0):
   index0 = -1
   index1 = -1
   for i in str0:
       if(i in ('aeiouAEIOU')):
          index0 = str0.index(i)
          for j in str0[index0:]:
            if(j not in ('aeiouAEIOU')):
               index1 = str0.index(j)
               break
          break
   if(index0 == -1):
      return str0[0].lower()+str0[1:].upper()
   elif (index1!=-1):
      return str0[0:index1].lower()+str0[index1].upper()+str0[index1+1:].lower()
   else:
      return str0.upper()
str0=input('请输入一个字符串:')
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 | 显示全部楼层
def fun():
    str1 = input('请输入:')
    for x in str1:
        if x in 'aeiouAEIOU':
            if str1.endswith(x):
                return str1.upper()
            for t in range(str1.find(x)+1, len(str1)):
                if str1[t] not in 'aeiouAEIOU':
                    return str1[:t].lower() + str1[t].upper() + str1[t+1:].lower()
            else:
                return str1.upper()
    return str1[0].lower() + str1[1:].upper()

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

使用道具 举报

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

def fun(string):
    string = string.lower()
    i = 0
    while i < len(string):
        if is_vowel(string[i]) and not is_vowel(string[i + 1]):
            return string[:i+1] + string[i+1].upper() + string[i+2:]
        else:
            i += 1
            if i == len(string)-1 and is_vowel(string[i]):
                return string.upper()
    else:
        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 | 显示全部楼层
yuanYin = 'aeiouAEIOU'
fuYin = 'bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ'

def hasYuanyin(string):
    for char in string:
        if char in yuanYin:
            return True
    return False

def fun(string):
    if not hasYuanyin(string):
        s = [char for char in string.upper()]
        s[0] = s[0].lower()
        return ''.join(s)
    else:
        length = len(string)
        s = [char for char in string.lower()]
        startYuanyin = 0  # 起始元音位置
        continuousYuanyin = 0 # 首个元音后连续元音个数(含首个元音)
        startFuyin = 0
        for i in range(length):
            if s[i] in yuanYin:
                startYuanyin = i
                break
        if startYuanyin == length - 1:
            return string.upper()
        else:
            for i in range(startYuanyin, length):
                if s[i] in yuanYin:
                    continuousYuanyin += 1
                else:
                    break
            startFuyin = startYuanyin + continuousYuanyin
            if startFuyin == length:
                return string.upper()
            else:
                s[startFuyin] = s[startFuyin].upper()
                return ''.join(s)

print(fun('str'))
print(fun('FishC'))
print(fun('boolean'))
print(fun('too'))
print(fun('jkjkjkljljlo'))

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

使用道具 举报

发表于 2018-1-29 10:54:29 | 显示全部楼层
def func(string):
    check = 'aeiouAEIOU'
    for i in range(len(string)):
        if string[i] in check and i == len(string)-1:
            return string.upper()
        elif string[i] in check and string[i+1] not in check:
            return string[:i+1].lower()+string[i+1].upper()+string[i+2:].lower()
    else:
        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 | 显示全部楼层
def fun85(str1):
    vowel = ["a","e","i","o","u"]    
    alive = False
    for each in str1:
        if each.lower() in vowel:
            alive = True
            index = str1.index(each)
            break

    if alive:
        while str1[index+1] in vowel:
            index += 1
            if index == len(str1)-1:
                return str1.upper()
        return str1[:index+1].lower() + str1[index+1].upper() + str1[index+2:].lower()        
    else:
        return str1[0].lower() + str1[1:].upper()

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

使用道具 举报

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


def f_85(string: str) -> str:
    if not re.match(r'.*[aeiouAEIOU].*', string):
        return string[0].lower() + string[1:].upper()
    else:
        first_vowels = re.search(r'[aeiouAEIOU]+', string)
        consonants = re.split(first_vowels.group(), string)
        if consonants[1] == '':
            return string.upper()
        else:
            return consonants[0].lower() + first_vowels.group().lower() + consonants[1].capitalize()


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

使用道具 举报

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


def f_85(string: str) -> str:
    if not re.match(r'.*[aeiouAEIOU].*', string):
        return string[0].lower() + string[1:].upper()
    else:
        first_vowels = re.search(r'[aeiouAEIOU]+', string)
        consonants = re.split(first_vowels.group(), string)
        if consonants[1] == '':
            return string.upper()
        else:
            return consonants[0].lower() + first_vowels.group().lower() + consonants[1].capitalize()


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

使用道具 举报

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

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

    if result:
        # 存在[元音+辅音]的组合
        return string[:result] + string[result:].capitalize()
        print(result)
    elif last_char in vowel_list:
        # 没有[元音+辅音]的组合,但有元音
        return string.upper()
    else:
        # 没有元音
        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-11-23 01:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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