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

石头剪刀布游戏循环异常求助:电脑仅生成一次随机选择

问题分析与修复方案

你的代码存在几个关键逻辑问题,导致电脑仅生成一次随机选择、后续忽略玩家输入:

  • games_played变量未初始化就直接使用,运行时会触发未定义错误
  • 循环内调用get_choices()后,没有将新获取的玩家/电脑选择赋值给choices,始终使用第一次的选择数据
  • result仅在程序开头计算了一次,循环内未更新,导致每次打印的都是第一局的结果
  • 循环内调用check_win时未接收返回值,也没有输出每一局的对战结果

修正后的完整代码

import random

def get_choices():
    player_choice = input("Enter a choice (rock, paper, scissors): ")
    options = ["rock", "paper", "scissors"]
    computer_choice = random.choice(options)

    answers = {"player": player_choice, "computer": computer_choice}
    return answers


def check_win(player, computer):
    print(f"You chose {player}, Computer chose {computer}")
    if player == computer:
        return "It's a tie!"
    elif player == "rock":
        if computer == "scissors":
            return "Rock smashes scissors! You win!"
        else:
            return "Paper covers rock. You lose."
    elif player == "paper":
        if computer == "rock":
            return "Paper covers rock! You win!"
        else:
            return "Scissors cut paper. You lose."
    elif player == "scissors":
        if computer == "paper":
            return "Scissors cut paper! You win!"
        else:
            return "Rock beats scissors. You lose."


# 初始化游戏次数计数器
games_played = 0
while games_played < 5:
    games_played += 1
    # 每局重新获取玩家和电脑的选择
    choices = get_choices()
    # 计算当前局的对战结果
    result = check_win(choices["player"], choices["computer"])
    print(f"Number of games played: {games_played}")
    print(result)
    print("---")
else:
    print("\nEnd of game")

主要修改说明

  1. 补充import random(原代码遗漏,运行会报错)
  2. 初始化games_played为0,解决变量未定义问题
  3. 将choices和result的赋值逻辑移入循环,确保每局都获取新选择、计算新结果
  4. 在check_win中添加玩家/电脑选择的打印语句,提升对战过程的可读性
  5. 将循环条件改为games_played < 5,逻辑更直观,避免次数计算偏差
  6. 增加局间分隔线,优化输出格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 20:27:13