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

Python石头剪刀布游戏胜负判断异常及循环无法终止求助

问题解释
  1. 循环无终止逻辑:你用了while True无限循环,但代码里完全没加终止判断——就算满足胜负条件,程序也不知道要跳出循环。
  2. 得分统计搞反:pattern函数里写的是用户赢的场景(比如用户出r、电脑出s),但主函数里却在pattern返回True时给电脑加得分,等于把输赢搞反了,得分统计全错。
  3. 胜负判断逻辑混乱:score函数的条件完全错误,比如computer +2 > user根本不是“电脑领先2分”的判断,而且不管什么情况都返回True,还乱打印输赢,完全没起到正确判断胜负的作用。
修正方案

步骤1:修正pattern函数的输赢判断

让它正确判断电脑赢的场景:

def pattern(user, computer):
    # 电脑赢的情况:电脑s克用户r,电脑r克用户p,电脑p克用户s
    if (computer == 's' and user == 'r') or (computer == 'r' and user == 'p') or \
       (computer == 'p' and user == 's'):
        return True

步骤2:重写score函数,正确判断胜负

让函数返回「是否结束游戏」的结果,同时明确打印输赢:

def score(user_score, computer_score):
    # 判断是否有人先拿到3分
    if user_score == 3:
        print("You win!")
        return True
    if computer_score == 3:
        print("I win!")
        return True
    # 判断是否有人领先2分
    score_diff = abs(user_score - computer_score)
    if score_diff >= 2:
        if user_score > computer_score:
            print("You win by 2 points!")
        else:
            print("I win by 2 points!")
        return True
    # 不满足获胜条件,游戏继续
    return False

步骤3:给主循环加终止逻辑

调用score函数后,根据返回值跳出循环,同时补全细节优化:

import random  # 必须导入random模块,否则会报错

def rpc_game_normal():
    rpc = ['r', 'p', 's']
    computer_wins = 0
    user_wins = 0  # 变量名改成user_wins,避免歧义

    while True: 
        print(f"Me: {computer_wins}  | You: {user_wins} ")
        user = input('Your move human: ').lower()
        # 增加输入校验,防止用户输错
        if user not in rpc:
            print("Invalid move! Please enter r, p, or s.")
            continue
        computer = random.choice(rpc)

        if user == computer:
            print("It's a tie!")
        elif pattern(user, computer):
            computer_wins += 1
            print("I won this round!")
        else:
            user_wins += 1
            print("You won this round!")
        
        # 调用score判断是否结束游戏,满足条件就跳出循环
        game_over = score(user_wins, computer_wins)
        if game_over:
            break
        print(f"I chose {computer} and you chose {user}.\n")

# 启动游戏
rpc_game_normal()

额外优化说明

  • 补了import random:你之前的代码用了random.choice但没导入,运行会直接报错
  • 增加输入校验:避免用户输入非r/p/s的内容,提升游戏体验
  • 变量名优化:把wins改成user_wins,更清晰易懂

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 14:00:32