鱼C论坛

 找回密码
 立即注册
查看: 1028|回复: 8

[已解决]自己的代码找不出错误原因

[复制链接]
发表于 2020-4-19 11:10:18 | 显示全部楼层 |阅读模式

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

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

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可以 。
但自己写出来了,判断结果却总是错的。自己找不到错误原因,希望各位大佬能帮我找下错误原因。
最佳答案
2020-4-19 12:35:02
本帖最后由 悠悠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")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-19 11:46:55 | 显示全部楼层
首先第一句不对,要改成I=input().split('')才能把你的输入单词转换为独立字母的列表。其实列表和字符串在这里的应用是完全一样的,也就是说I=input(),也是一样的结果。其次,你在for循环里做判断打印,循环多少次,就会打印多少次,肯定不是你需要的,你再试试。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-19 12:35:02 | 显示全部楼层    本楼为最佳答案   
本帖最后由 悠悠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")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-19 15:47:49 | 显示全部楼层
txxcat 发表于 2020-4-19 11:46
首先第一句不对,要改成I=input().split('')才能把你的输入单词转换为独立字母的列表。其实列表和字符串在 ...

感谢开头确实就以及错了,但不能用split()来切分,要用strip()来对输入进行切分
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-19 15:52:20 | 显示全部楼层
悠悠2264 发表于 2020-4-19 12:35
1.split()是把输入的按空格切开来,返回一个列表。后面for循环时len(i)返回的是列表的长度,不是字符串的长 ...

感谢给予我的帮助,你修改后的代码还是有错误的,题干中说单词的第二段由一个或多个元音字母组成,第三段由一个或多个辅音字母组成来确定是否为与hello类似的单词,而不是通过判断是否和前一个字母的元辅相等来确定。不过你的代码给了我很大的启发,我已经自己修改好了,感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-19 16:13:56 | 显示全部楼层
澍梵. 发表于 2020-4-19 15:47
感谢开头确实就以及错了,但不能用split()来切分,要用strip()来对输入进行切分

strip()是去掉前后空格,标答其实就是对字符串本身进行操纵。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-4-19 17:04:17 | 显示全部楼层
澍梵. 发表于 2020-4-19 15:52
感谢给予我的帮助,你修改后的代码还是有错误的,题干中说单词的第二段由一个或多个元音字母组成,第三段 ...


第一段是辅音,那么第二段和第一段不一样,就肯定是元音;第三段和第二段不一样,就是辅音;第四段和第三段不一样,就是元音。这样看是可以的,样例输入输出也都是正确的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-4-19 18:39:56 | 显示全部楼层
悠悠2264 发表于 2020-4-19 17:04
第一段是辅音,那么第二段和第一段不一样,就肯定是元音;第三段和第二段不一样,就是辅音;第四段和第 ...

嗯 好,我在看看,谢谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-19 18:40:41 | 显示全部楼层
txxcat 发表于 2020-4-19 16:13
strip()是去掉前后空格,标答其实就是对字符串本身进行操纵。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-26 16:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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