如何在循环中存储函数返回值且避免TypeError错误?
问题分析与解决方案
核心错误原因
你遇到的TypeError根源是函数名与变量名重名:
- 初始时
difference是一个函数,但第一次执行difference = difference(word)后,这个变量被覆盖为函数返回的整数值。 - 第二次进入循环时,再尝试调用
difference(word),实际是在调用一个整数,必然触发类型错误。
具体修复步骤
- 规避命名冲突:将存储差异计数的变量改为与函数名不同的名称(比如
diff_count),或者直接重命名函数(比如calc_char_diff)。 - 优化全局变量与列表转换:
- 不要在循环内重复执行
word_one = list(word_one)和word_two = list(word_two),应该在初始化阶段完成字符串到列表的转换,避免重复操作。 - 函数依赖全局变量
word_one的写法不够规范,建议改为将word_one作为参数传入函数,提升代码可维护性。
- 不要在循环内重复执行
- 提前校验长度:原函数默认两个单词长度一致,否则会触发索引越界错误,要保证
word_picker()生成的word_one和word_two长度相同,也可在输入时增加长度校验。
修改后的代码示例
def calc_char_diff(target_word, original_word): counter = 0 diff_count = 0 for letter in original_word: if letter != target_word[counter]: diff_count += 1 counter += 1 return diff_count # 假设word_picker()已正确初始化word_one和word_two为同长度字符串 word_picker() # 初始化阶段完成字符串转列表 word_one = list(word_one) word_two = list(word_two) attempts = 0 current_word = [] print("Turn this word: "+''.join(word_one)) print("Into this word: "+''.join(word_two)) print() while current_word != word_two: user_input = input("Enter word: ") current_word = list(user_input) # 先校验输入单词长度是否匹配 if len(current_word) != len(word_two): print("Input word must match the length of the target word!") print() continue diff_count = calc_char_diff(current_word, word_one) if diff_count > 1: print("You can only change one letter at a time!") print() # 输入符合规则时,更新基准单词并计数 else: word_one = current_word.copy() attempts += 1
内容的提问来源于stack exchange,提问作者Artem Kizilov
相关产品推荐
相关产品推荐

