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

Python3猜数字游戏报错:无法比较int与string问题求助

猜数字游戏的错误原因及修复方案

核心错误原因

  • 参数名与函数名重名冲突:你给game函数的第一个参数命名为userInput,和你定义的获取用户输入的userInput()函数同名了。进入game函数后,局部的userInput会覆盖全局的函数引用,此时userInput是传入的整数值,后续尝试调用userInput()时,相当于调用一个整数,会触发TypeError: 'int' object is not callable错误,你误以为是int和string比较,实际是调用对象类型错误引发的问题。
  • 未更新用户输入变量:就算参数名不冲突,你在循环里调用userInput()后,没把返回的新输入赋值给变量,导致后续比较的还是最初传入的旧值,永远无法匹配电脑的猜测值。

修复后的代码

PROMPT = "Please enter an integer: "
WELCOME = "THE GUESSING GAME"

# 获取用户输入
def get_user_input():
    return int(input(PROMPT))

# 获取电脑猜测值
def computer_guess():
    import random
    return int(random.random() * 6)

def game(user_input, computer_input):
    while user_input != computer_input:
        print("Try again")
        # 更新用户输入变量,用新输入覆盖旧值
        user_input = get_user_input()
        if user_input == computer_input:
            print("You win!!")      
            break  # 猜对后直接退出循环

def main():
    # 获取用户初始输入
    the_input = get_user_input()
    # 生成电脑的猜测值
    computer = computer_guess()
    # 启动游戏逻辑
    game(the_input, computer)

main()

修复说明

  • 修改命名避免冲突:把获取用户输入的函数改名为get_user_input,game函数的参数改为user_input,既解决了命名冲突,也符合Python的PEP8命名规范(小写字母加下划线)。
  • 更新用户输入变量:循环里调用get_user_input()后,把返回的新值赋值给user_input,确保每次循环都用最新的输入和电脑值比较。
  • 添加循环退出逻辑:猜对后用break跳出循环,避免无用的循环执行。

内容的提问来源于stack exchange,提问作者Larry Loch

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:25:21