2016-07-21 7 views
-1

Я пишу игру «Угадай номер». Вначале компьютер выбирает случайное число в диапазоне 0-99, и игрок догадывается, сколько это стоит. Как только игрок угадал номер, игра снова начинается.Случайное число не обновляется каждый раз, когда я вызываю функцию

Игрок может начать игру в любое время, используя две кнопки: «Новая игра Диапазон 0-100» и

enter image description here

«Новая игра Диапазон 0-1000.»

Вот ссылка на онлайн-редактор, в котором можно просматривать и редактировать файл:

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

в настоящем время, число, что COMPU ter выбирается всегда, но как только игра будет работать правильно, она будет удалена.

В любом случае проблема заключается в том, что когда пользователь вводит номер, который выбрал компьютер, игра перезапускается, но тот же номер выбирается компьютером в последний раз. Но если пользователь нажимает на кнопку новой игры, на компьютере выбирается другой номер, что является правильным.

Логическая ошибка возникает здесь:

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() 
+2

Вы определяете случайное число только при первом запуске программы. –

+1

Кто-то должен опубликовать ссылку: https://xkcd.com/221/ –

+1

* «Случайное число не обновляется каждый раз, когда я вызываю функцию» * - ... вы ** никогда не просите об этом **. – jonrsharpe

ответ

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() «s по:

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() 
+0

Почему я не думал об этом? Благодаря! – Ekaterina1234

Смежные вопросы