Python新手写的石头剪刀布游戏除平局外总获胜,如何排查错误
石头剪刀布游戏BUG修复方案
问题根因
- 核心错误:调用
game胜负判断函数前,你已经把computer、player两个变量从原始的数字1/2/3,转为了对应出拳的字符串值。但game函数内部的判断逻辑全是基于数字比对(比如computer == 1),除了平局时字符串相等会返回None,其余所有判断分支都不会触发,函数会直接返回初始化的bool = 1,数字1在布尔判定里等价于True,所以除平局外你永远显示获胜。 - 次要问题:代码存在冗余的数字转字符串逻辑、部分行缩进错误、拼写错误。
修复方案
只需要调整代码顺序,在调用game函数完成胜负判定之后,再把数字转成字符串用于输出即可,不需要引入额外模块。修复后的完整代码如下:
import random # 电脑随机出拳,保留数字格式用于后续判断 random_element = random.randrange(1,4) computer_num = random_element print("Computer has chosen, Now it's your turn.") # 玩家输入,保留数字格式用于后续判断 player_num = int(input("Player's Turn: Enter (1) to choose Stone, (2) for Paper, and (3) for Scissor:\n")) # 胜负判断函数,用数字比对 def game(computer, player): result = 1 if computer == player: result = None elif computer == 1: if player == 2: result = True if player == 3: result = False elif computer == 2: if player == 3: result = True if player == 1: result = False elif computer == 3: if player == 1: result = True if player == 2: result = False return result answer = game(computer_num, player_num) # 数字转字符串,仅用于输出展示 def num_to_choose(n): if n == 1: return 'Stone' elif n == 2: return 'Paper' else: return 'Scissor' computer = num_to_choose(computer_num) player = num_to_choose(player_num) # 结果输出 if answer == True: print(f"Computer chosen: {computer} \nand You chosen: {player} \nSo, You Won the Game.") elif answer == False: print(f"Computer chosen: {computer}\nand You chosen: {player}\nSo, You lose the Game.") elif answer == None: print(f"Computer was chosen: {computer}\nand you choose: {player}\nIt is a Tie..")
内容的提问来源于stack exchange,提问作者user17086391
相关产品推荐
相关产品推荐

