| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
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")
 
  复制代码 
 
 
 |   
 
 
 
 |