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
相关产品推荐
相关产品推荐

