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

Python实现石头剪刀布游戏时else/elif语句运行异常问题求助

错误排查与修复方案

核心问题点

  • 你在获取用户输入后已经通过upper()方法将输入转为大写,但是elif分支的判断条件使用的是小写的'r'、'p'、's',大小写不匹配导致获胜判断逻辑永远无法触发,所有非平局场景都会直接进入else分支判定为输。
  • 使用Python内置关键字list作为自定义变量名属于不规范写法,可能会导致后续调用列表内置方法时出现异常。

最小改动修复版本

import random
# 替换内置关键字变量名
gesture_list = ['R', 'P', 'S']

def play():
    x = input('Please input R, P, or S: ').upper()
    y = random.choice(gesture_list)
    if x == y:
        print('You both picked {}, pick again'.format(x))
        play()
    # 判断条件改为大写匹配
    elif (x == 'R' and y == 'S') or (x == 'P' and y == 'R') or (x == 'S' and y == 'P'):
        print('You won! You picked {} and computer picked {}'.format(x,y))
    else:
        print('You lost. You picked {} and computer picked {}'.format(x,y))

play()

可选优化建议

当前平局时使用递归调用play()的方式,如果连续多次平局会触发递归深度超限报错,可以改用循环逻辑实现重玩:

import random
gesture_list = ['R', 'P', 'S']

def play():
    while True:
        x = input('Please input R, P, or S: ').upper()
        y = random.choice(gesture_list)
        if x == y:
            print('You both picked {}, pick again'.format(x))
            continue
        elif (x == 'R' and y == 'S') or (x == 'P' and y == 'R') or (x == 'S' and y == 'P'):
            print('You won! You picked {} and computer picked {}'.format(x,y))
        else:
            print('You lost. You picked {} and computer picked {}'.format(x,y))
        break

play()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:06:02