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

Python石头剪刀布程序获胜判断逻辑异常退出问题求助

石头剪刀布程序异常退出排查

你写的isWin函数中多个and/or组合的获胜判断逻辑完全正确,程序异常退出、判断失效的问题全部来自缩进错误和代码位置错误,具体问题如下:

  • 平局、胜负判断的代码块缩进错误,被放在外层游戏循环的外部,程序跑完用户输入流程后没有执行判断就直接走到返回逻辑,触发异常或直接退出。
  • 电脑随机出拳、打印对战信息的代码被错误放在用户输入合法性校验的内层循环中,用户每次输入非法值时,电脑都会重新生成出拳结果,还会打印包含非法输入字符的错误对战信息。
  • 外层控制是否续玩的while循环缺少更新resp变量的用户输入逻辑,原本设计的重复游玩功能完全失效,且会因为流程错乱直接退出。

修正后可运行代码

import random

def isWin(player,opponent):
    if (player=='p' and opponent=='r') or (player=='r' and opponent=='s') or (player=='s' and opponent=='p'):
        return True
    else:
        return False

def play_rps():
    resp = 'c'
    while resp.lower() != 'n':
        user = 'x'
        # 输入校验循环仅做合法值判断
        while user not in ['r','s','p']:
            user = input("'r' for rock 'p' for paper 's' for scissors ")
        # 输入合法后再生成电脑出拳、打印对战信息
        computer = random.choice(['r', 's', 'p'])
        print(f'You chose {user} and Computer chose: {computer} ')
        # 胜负判断放在输入完成后的流程内
        if computer == user:
            print('Draw')
        elif isWin(user, computer):
            print('You win!')
        else:
            print('You lose!')
        # 询问是否续玩,更新循环控制变量
        resp = input("Enter 'c' to play again, 'n' to quit: ")

play_rps()

注意:Python通过缩进识别代码块归属,编写分支、循环结构时,一定要确认下属执行代码的缩进层级,避免出现逻辑错位。多逻辑运算符组合时只要给每个判断组加括号明确优先级,你当前的写法是完全可行的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 22:12:29