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

Python调用game_hints函数后如何返回Game_process且不改变Mystery_NUM

猜数字游戏问题修复方案

现有代码核心问题

  • 主流程Game_Process的循环逻辑错误:每执行一次循环不管本轮是否猜中,都会重新生成随机数Mystery_NUM,这是调用完hint返回后目标数字被重置的核心原因
  • game_hints函数没有定义形参,调用时传入的用户猜测值、目标数字无法被函数接收,函数内直接访问外部变量会触发报错
  • game_hints内误用了未定义的points变量,实际应该操作全局积分变量SCORE
  • 猜错后没有设置当前轮次的重试逻辑,直接进入下一轮循环生成新数字
  • 随机数生成逻辑有偏差:random.randrange(10)生成的是0-9的整数,和提示的猜数范围1-10不符

具体修改步骤

  1. 调整Game_Process的循环嵌套结构:外层循环控制总轮次,内层循环控制单轮猜数字的重试逻辑,只有猜中后才跳出内层循环进入下一轮、生成新的随机数
  2. 给game_hints增加两个形参player_guess和Mystery_NUM,接收调用时传入的参数
  3. 修复game_hints内的变量错误,将points改为SCORE,补充用户不购买线索的分支逻辑
  4. 调整随机数生成逻辑为random.randrange(1,11),匹配1-10的猜数范围

修复后完整可运行代码

import random     
SCORE = 0
ROUNDS = 1
          
def player_stats():
    print(f"SCORE: {SCORE} | ROUNDS: {ROUNDS}")
    
def game_hints(player_guess, Mystery_NUM):
    print("Would you like purchase a hint for 5 points? [1=Yes/2=No]: ")
    USER_HINT = int(input())
    global SCORE

    if USER_HINT == 1:
        SCORE -= 5
        if Mystery_NUM % 2 == 0:
            divisibility = "even"
        else:
            divisibility = "odd"    
        if player_guess > Mystery_NUM:
            value = "smaller"
        else:
            value = "larger"  
        print(f"CLUE: Mystery Number is {divisibility} and try a {value} guess | -5 POINTS")
    else:
        print("You choose not to buy hints, keep guessing!")

      
def Game_Process():
    global ROUNDS, SCORE
    while ROUNDS <= 10:
        # 每轮仅生成一次目标数字,不会被hint调用影响
        Mystery_NUM = random.randrange(1,11)
        # 单轮猜数字的内层重试循环
        while True:
            print("Guess the num [1-10]: ")
            USER_GUESS = int(input())
            if USER_GUESS == Mystery_NUM:
                print("\nGood Job! +10 Coins!")
                SCORE += 10
                ROUNDS += 1
                player_stats()
                # 猜中后跳出内层循环,进入下一轮
                break
            else:
                print("Wrong! Try Again")
                game_hints(USER_GUESS, Mystery_NUM)
    # 10轮全部结束触发游戏结束
    print("Game Over!")
    Game()        
    
def Game():
    user_opt = input("\"Welcome to Guess Game\" \nPress [Y] to Play or [N] to Exit: ").lower()
    if user_opt == "n":
        print("Good bye!")
        exit()
    elif user_opt == "y":
        Game_Process()
    else:
        print("Invalid Input!")
        Game()
Game()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:06:05