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

Python石头剪刀布游戏函数失效、得分无法累计问题求解

异常根因定位
  • 自定义交互函数运行异常的典型场景:
    • 未对用户的非法输入做容错处理,遇到非预期值直接抛出异常退出程序,没有回到交互等待逻辑
    • 函数定义后未在主对局流程中实际调用,或传参时遗漏了外层的状态引用
    • 输入判断的分支条件写反,所有输入都触发默认报错逻辑
  • 对局得分无法正常累加的典型场景:
    • 得分变量在函数内部定义为局部变量,每次函数执行时都会被重置为初始值,无法保留历史累计值
    • 函数内修改得分时未通过global关键字声明引用全局作用域变量,Python会默认将其识别为全新的局部变量,修改不会同步到外部的实际得分值
    • 胜负判定分支逻辑漏写/写反,所有对局结果都走到平局分支,根本不会触发得分累加的代码块
可直接运行的完整对局实现
import random

# 全局初始化得分,避免局部变量作用域问题
user_score = 0
comp_score = 0

def get_user_choice():
    # 自定义交互函数,循环校验用户输入直到合法或主动退出
    valid_choices = ['石头', '剪刀', '布']
    while True:
        user_input = input("请出拳(输入石头/剪刀/布,输入q退出对局):").strip()
        if user_input.lower() == 'q':
            return 'quit'
        if user_input in valid_choices:
            return user_input
        print("输入无效,请按照提示输入合法内容")

def judge_round(user_choice, comp_choice):
    # 自定义对局判定函数,完成胜负判定与得分累加
    global user_score, comp_score
    if user_choice == comp_choice:
        return "本轮平局"
    win_cases = [('石头', '剪刀'), ('剪刀', '布'), ('布', '石头')]
    if (user_choice, comp_choice) in win_cases:
        user_score += 1
        return "本轮你获胜"
    else:
        comp_score += 1
        return "本轮计算机获胜"

# 主对局循环
print("=== 石头剪刀布对局启动 ===")
while True:
    user_choice = get_user_choice()
    if user_choice == 'quit':
        print(f"对局结束,最终累计得分:你 {user_score} : {comp_score} 计算机")
        break
    comp_choice = random.choice(['石头', '剪刀', '布'])
    print(f"你出了:{user_choice},计算机出了:{comp_choice}")
    round_result = judge_round(user_choice, comp_choice)
    print(round_result)
    print(f"当前累计得分:你 {user_score} : {comp_score} 计算机")
实现校验要点
  • 交互函数内置输入循环逻辑,遇到无效输入不会中断程序,持续等待用户输入合法值或退出指令
  • 得分变量统一在全局作用域初始化,胜负判定阶段明确声明对全局得分变量的修改,确保每轮结束后得分实时更新
  • 胜负判定逻辑穷举所有获胜场景,不会漏触发得分更新流程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 19:54:03