Python实现石头剪刀布游戏代码无法稳定输出对局结果如何解决
石头剪刀布游戏代码问题排查及修复
根因定位
is_win函数逻辑错误:仅在玩家获胜时返回True,未获胜时没有返回False,反而错误递归调用play(),打乱程序正常执行流程,导致对局结果无法正常返回。- 胜负判断条件逻辑失效:
play函数中elif not user == is_win(user, computer):将字符串类型的用户输入和布尔类型的返回值做相等判断,永远无法匹配到正确的获胜场景。 - 启动指令校验不严谨:用户重新输入启动指令时未做小写转换,大小写混合的输入会被判定为无效。
修复后完整代码
import random start_game = input('输入start开始游戏:').lower() def play(): user = input("输入 'rock'(石头)、'paper'(布)、'scissors'(剪刀),输入quit退出游戏:").lower() if user == 'quit': print("游戏结束:(") exit() computer = random.choice(['rock', 'paper','scissors']) # 可取消下行注释实现电脑出拳中文展示 # computer = {'rock':'石头','paper':'布','scissors':'剪刀'}[computer] print(f"电脑出拳:{computer}") if user == computer: return '平局' elif is_win(user, computer): return '你赢了!' else: return '你输了!' def is_win(player,opponent): if (player == 'rock'and opponent == 'scissors') or (player == 'scissors'and opponent == 'paper') or \ (player=='paper' and opponent == 'rock'): return True return False while True: if start_game != 'start': start_game = input('输入无效,请重新输入start启动游戏:').lower() else: print(play())
调整说明
- 补全
is_win函数的返回逻辑,未获胜时直接返回False,删除错误的递归调用代码 - 修正
play函数的胜负判断规则,直接判断is_win的返回值即可识别玩家获胜场景 - 所有交互提示改为中文,同时保留原有的英文输入规则,也可以根据需要自行调整为中文输入
- 启动指令二次输入时增加小写转换,兼容大小写输入
内容的提问来源于stack exchange,提问作者Harini
相关产品推荐
相关产品推荐

