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

Python实现石头剪刀布代码if语句运行异常问题求助

Python石头剪刀布判断逻辑异常排查

定位到的错误点

  • 最核心的问题是字符串大写方法调用语法错误:代码中所有move.upper都没有加执行括号()。upper是Python字符串的内置方法,不加括号时拿到的是方法本身的对象,不是转成大写后的字符串,拿方法对象和"R"/"P"/"S"这类字符串做相等比较,结果永远是False,所有if分支自然无法按预期执行。
  • 次要隐患:重复多次调用upper()做转换没有必要,且多组and/or混合判断没有加括号明确优先级,后续修改代码很容易出逻辑错误。

修正后可正常运行的代码

import random

print("Rock, Paper, Scissors")
move = input("Type your move (R for Rock, P for Paper, and S for Scissors: ")
# 提前把用户输入统一转大写,后续判断直接复用,避免重复调用方法
player_move = move.upper()
comp_move = random.choice(["R", "S", "P"])
print("Computer: " + comp_move)

def winner(comp_move, player_move):
    if player_move == comp_move:
        print("It's A Tie")
    # 给每组胜负判断加括号明确运算优先级,消除逻辑歧义
    elif (player_move == "R" and comp_move == "S") \
            or (player_move == "P" and comp_move == "R") \
            or (player_move == "S" and comp_move == "P"):
        print("You Won :)")
    else:
        print("You Lose :(")

winner(comp_move, player_move)

修改说明

  • 补全了upper方法的调用括号,确保能拿到用户输入转大写后的结果
  • 提前存储转大写后的用户输入,减少冗余代码
  • 给复合逻辑判断的每个子条件加括号,避免运算符优先级导致的判断异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:42:04