You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在循环中存储函数返回值且避免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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 03:53:12