我的Pig Latin(猪拉丁语)翻译器运行报TypeError,代码存在什么错误?
代码错误点汇总
- 直接触发报错的变量名混淆:你全局定义了存储元音的列表变量
a,在consonant函数中本该操作传入的单词参数value,却错误写为a,列表切片结果和字符串拼接直接抛出类型错误。 - 循环逻辑错误:
consonant函数中遍历单词字符找元音位置的判断语句,错误写为if a[i] in vowels:,实际应当判断value[i]是否为元音。 - 列表操作错误:Python列表
insert方法的第一个参数是插入位置索引,第二个参数是插入内容,你把二者顺序写反;同时循环遍历原拆分列表时直接插入元素会导致重复处理甚至死循环,应当新建空列表存储转换结果。 - 缩进语法错误:
vowel函数中value=value+'yay'没有缩进在if判断的代码块下,逻辑完全不符合元音开头才加yay的规则。 - 变量作用域不规范:
consonant函数内没有定义变量a,直接调用全局变量的写法很容易出现变量名混淆问题。
修正后的可运行代码
def vowel(value): value = str(value) vowels = ['a','e','i','o','u','A','E','I','O','U'] if value[0] in vowels: value = value + 'yay' return value def consonant(value): value = str(value) vowels = ['a','e','i','o','u','A','E','I','O','U'] b = 0 for i in range(len(value)): if value[i] in vowels: b = i break c = value[b:] + value[:b] + 'ay' return c spam = 'My name is AL SWEIGART and i am 4000 years old.' spam1 = spam.split() vowels_list = ['a','e','i','o','u','A','E','I','O','U'] result = [] for word in spam1: if word[0] in vowels_list: result.append(vowel(word)) else: result.append(consonant(word)) print(' '.join(result))
运行输出:yMa amenay isyay ALyay EIGARTSway andyay iyay amyay 4000ay earsyay old.yay
内容的提问来源于stack exchange,提问作者Python
相关产品推荐
相关产品推荐

