马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
【问题描述】
小明对类似于 hello 这种单词非常感兴趣,这种单词可以正好分为四段,第一段由一个或多个辅音字母组成,第二段由一个或多个元音字母组成,第三段由一个或多个辅音字母组成,第四段由一个或多个元音字母组成。 给定一个单词,请判断这个单词是否也是这种单词,如果是请输出yes,否则请输出no。 元音字母包括 a, e, i, o, u,共五个,其他均为辅音字母。
【样例输入】 lanqiao
【样例输出】 yes
【样例输入】world
【样例输出】no
原题的正确代码:if __name__ == '__main__':
word = input().strip()
h = [int(c in 'aeiou') for c in word]
# 首字母不能是元音 尾字母不能是辅音
if h[0] == 1 or h[-1] == 0:
print('no')
exit()
cnt = len([i for i in range(1, len(h)) if h[i - 1] + h[i] == 1])
print('yes') if cnt == 3 else print('no')
自己写的代码:I=input().split()
if I[0] not in "aeiou" or I[-1] in "aeiou":
for i in range(1,len(I)-2):
if I[i] in "aeiou" and I[-2] not in "aeiou":
print("yes")
else:
print("no")
else:
print("no")
感觉错误的地方:for i in range(1,len(I)-2):
if I[i] in "aeiou" and I[-2] not in "aeiou":
print("yes")
else:
print("no")
我认为错误是在对单词非首尾字母的确定上。
我的思路是单词2-倒数2的字母中有一个是aeiou,且倒数第二个字母非aeiou可以 。
但自己写出来了,判断结果却总是错的。自己找不到错误原因,希望各位大佬能帮我找下错误原因。
本帖最后由 悠悠2264 于 2020-4-19 12:39 编辑
1.split()是把输入的按空格切开来,返回一个列表。后面for循环时len(i)返回的是列表的长度,不是字符串的长度,因此就不会执行for循环。所以不需要这个split()
2.你这个只能判断首尾字符是否符合,中间字符和倒数第二个是元音还是辅音,并不符合题目要求的判断辅元辅元(一个或多个字母)。
这个是正确代码: r=input()
num = 0 #num用来记录元辅次数
for i in range(len(r)): #迭代字符索引
if i == 0: #判断是否为第一个字符
if r[i] != 'aeiou': #判断第一个字符是否是元音字母,是num+1并退出此次循环,否不加并退出循环
num +=1
continue
else:
break
if (r[i] in 'aeiou') == (r[i-1] in 'aeiou'): #判断是否和前一个字母的元辅相等,相等则退出此次循环
continue
num+=1 #不相等则num+1
if(num == 4): #num等于4,格式就是元辅元辅,打印yes,否则打印no
print("yes")
else:
print("no")
|