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

如何实现无限循环的石头剪刀布游戏并简化Python代码?

解决方案:无限循环+简化版石头剪刀布代码

直接用下面的代码替换原有代码,它实现了无限循环直到输入q退出,同时大幅简化了逻辑:

import random

# 定义合法的移动选项和胜负规则
VALID_MOVES = ["r", "p", "s"]
WIN_CONDITIONS = {"r": "s", "p": "r", "s": "p"}  # 玩家出key时能击败的电脑出法

while True:
    user_move = input("Enter your move: (r)ock (p)aper (s)cissors or (q)uit: ").lower()
    
    if user_move == "q":
        print("You've quit the game!")
        break
    
    if user_move not in VALID_MOVES:
        print("Invalid move, please enter r/p/s/q.")
        continue
    
    # 电脑随机出拳
    computer_move = random.choice(VALID_MOVES)
    
    # 判断胜负
    if computer_move == WIN_CONDITIONS[user_move]:
        print("You've won!")
    elif computer_move == user_move:
        print("You went even!")
    else:
        print("You lost!")

关键修改说明:

  • 无限循环实现:用while True作为循环主体,只有当用户输入q时才用break退出,同时把输入语句放到循环内部,保证每次循环都能重新获取用户输入。
  • 修复原代码致命bug:你原代码中把Move2列表重新赋值为单个字符(Move2=random.choice(Move2)),导致第二次循环时random.choice会报错,现在改用computer_move变量存储电脑的出拳,保留原列表VALID_MOVES。
  • 简化胜负判断:用字典WIN_CONDITIONS直接映射玩家获胜的情况,替代原代码中冗长的if-elif嵌套,逻辑更清晰,也更容易维护。
  • 修正条件判断逻辑:原代码if Move1 == "r" or "p" or "s" or "q"的写法是错误的(它等价于if (Move1 == "r") or True or True or True,永远为真),现在改用user_move in VALID_MOVES来判断合法输入。
  • 移除多余break:原代码的每个胜负分支都有break,导致一次游戏就结束,现在去掉这些break,让循环持续运行直到用户主动退出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:55:27