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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:06:03