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

