每次调用函数

时间:2016-07-21 14:18:48

标签: python

我正在写一个游戏,“猜数字”。最初,计算机选择0-99范围内的随机数,玩家猜测它是什么数字。一旦玩家猜到了这个号码,游戏就会重新开始。

玩家可以使用两个按钮随时重启游戏: “新游戏。范围是0-100” 和 “新游戏。范围是0-1000”

enter image description here

以下是在线编辑器的链接,您可以在其中查看和编辑文件:

http://www.codeskulptor.org/#user41_1sYMUy5rDi_0.py

目前,计算机选择的号码始终打印,但一旦游戏正常运行,它将被删除。

无论如何,问题在于,当用户输入计算机选择的号码时,游戏会重新启动,但计算机会选择相同的号码作为上次。但是,如果用户点击新游戏按钮,计算机会选择不同的数字,这是正确的。

逻辑错误发生在这里:

num_range = random.randrange(0,100)

# helper function to start and restart the game
def new_game():
    print "Guess the number!"
    global secret_number
    global num_range
    secret_number = num_range
    print secret_number

如果我删除

  

secret_number = num_range

来自new_game()函数的行并将其替换为

  

num_range = random.randrange(0,100)

每次用户正确猜测数字时,新游戏都会以相同范围内的不同数字开始,这是正确的,但我需要变量,以便两个按钮起作用。你知道如何使用变量num_range,以便每次用户猜到数字后自动开始游戏,秘密数字与上次不同吗?

以下是整个计划:

import simplegui
import random
import math

num_range = random.randrange(0,100)

# helper function to start and restart the game
def new_game():
    print "Guess the number!"
    global secret_number
    global num_range
    secret_number = num_range
    print secret_number


#event handlers for control panel
def range100():
    # button that changes the range to [0,100) and starts a new game 
    global num_range
    num_range = random.randrange(0,100)
    global secret_number
    secret_number = num_range
    print "The range is 0-100"
    new_game()

def range1000():
    # button that changes the range to [0,1000) and starts a new game     
    global secret_number
    global num_range
    num_range = random.randrange(0, 1000)
    secret_number = num_range
    print "The range is 0-1000"
    new_game()

def input_guess(guess):
    # main game logic
    g = int(guess)
    # remove this when you add your code
    print "Guess was", g
    if g <secret_number :
        print "Higer"
    elif g > secret_number:
        print "Lower"
    else:
        print "Correct"
        print "Starting a new game..."
        print ""
        new_game()


# create frame
frame = simplegui.create_frame("Guess the number",200, 200)
frame.add_input("Enter your guess", input_guess, 200)
frame.add_button("New game. Range is 0-100", range100, 200)
frame.add_button("New game. Range is 0-1000", range1000, 200)
# register event handlers for control elements and start frame


# call new_game 
new_game()

1 个答案:

答案 0 :(得分:2)

让我们快速但不那么难看。

首先,让我们创建一个新的全局变量max_number = 100

然后,您必须对new_game()

进行更改
def new_game():
    print "Guess the number!"
    global secret_number
    global max_number
    secret_number = random.randrange(0,max_number)
    print secret_number

最后,将range100()range1000()的定义替换为:

def range100():
    global max_number
    max_number = 100
    print "The range is 0-"+str(max_number)
    new_game()

def range1000():
    global max_number
    max_number = 1000
    print "The range is 0-"+str(max_number)
    new_game()