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

猜数字游戏代码问题求助:分数重置异常及代码优先级疑问

解决猜数字游戏分数自动重置的问题

嘿,我来帮你搞定这个头疼的问题!你遇到的分数每次输入后自动变回10的情况,几乎可以确定是分数变量的作用域搞错了——大概率是把player_score和computer_score放在了循环内部,导致每次循环都会重新初始化分数,覆盖掉之前的变化。

先还原一下常见的错误代码结构(结合你描述的游戏逻辑):

from random import randint

while True:
    # 错误:每次循环都重新初始化分数,之前的修改直接被覆盖
    player_score = 10
    computer_score = 10
    
    player_guess = int(input("输入1或2:"))
    computer_number = randint(1,2)
    
    if player_guess == computer_number:
        computer_score -= 1
        print(f"电脑分数减1,现在是{computer_score}")
    else:
        player_score -= 1
        print(f"你的分数减1,现在是{player_score}")

问题根源

上面的代码里,player_score和computer_score是在while循环内部定义的,意味着每次循环启动时,这两个变量都会被重新赋值为10,上一轮的分数变化自然就被清零了。

修正后的完整代码

把分数初始化移到循环外面,只执行一次,这样每次循环只会修改它们的值,不会重置:

from random import randint

# 分数初始化放在循环外,仅执行一次
player_score = 10
computer_score = 10

while True:
    # 先处理输入合法性,避免程序崩溃
    try:
        player_guess = int(input("请输入1或2的数字:"))
    except ValueError:
        print("请输入有效的整数哦!")
        continue
    
    if player_guess not in (1, 2):
        print("只能输入1或2,请重新输入!")
        continue
    
    computer_number = randint(1, 2)
    
    if player_guess == computer_number:
        computer_score -= 1
        print(f"🎉 猜对啦!电脑分数减1 → 电脑:{computer_score},你:{player_score}")
    else:
        player_score -= 1
        print(f"😅 猜错啦!你的分数减1 → 你:{player_score},电脑:{computer_score}")
    
    # 增加游戏结束条件,一方分数归0就终止游戏
    if player_score == 0:
        print("\n游戏结束!你输啦😢")
        break
    if computer_score == 0:
        print("\n游戏结束!你赢啦🥳")
        break

关键改进点

  • 作用域调整:将分数变量移到循环外部,确保初始值只设置一次,后续循环仅做修改操作。
  • 输入校验:增加了异常捕获和范围判断,避免玩家输入非整数或超出1-2范围的内容导致程序崩溃。
  • 游戏完整性:添加了分数归0的结束条件,让游戏有明确的胜负判定。

内容的提问来源于stack exchange,提问作者Allawi Asiri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:25:36