2016-07-03 5 views
0
from random import randint 

count = 0 
Validation = False 

def generateNumber(): 
    Number = randint(1, 10) 
    return Number 

def checkNumber(Guess): 
    Number = generateNumber() 
    if int(Guess) == Number and count < 1: 
     return "First time right! Genius?" 
     Validation = True 

    elif int(Guess) == Number and count == 2: 
     return "Correct. Second time, nice!" 
     Validation = True 
    elif int(Guess) == Number and count < 4: 
     return "Correct. Good job." 
     Validation = True 
    elif int(Guess) == Number and count > 3: 
     return "Correct. Took you long enough." 
     Validation = True 
    else: 
     return "Wrong! Try again " 

while Validation == False: 
    Guess = input("Please guess a number between 1 to 10: ") 
    print (checkNumber(Guess)) 
    count += 1 
else: 
    TryAgain = input("Would you like to try again? y/n \n") 

Таким образом, проблема в том, что, когда пользователь угадывает правильное число. Валидация должна быть повернута к True. Таким образом, цикл while прекратит цикл. Но валидация переменных не становится правдой, когда игрок догадывается о правильном числе.Изменение переменной в функции

+0

Проверка считается локальной, если вы не префикс ее глобальным. Если вы хотите ссылаться на свою глобальную проверку на функцию, вам нужно объявить ее так: 'global Validation' в функции, таким образом, когда вы измените значение, оно будет устойчивым –

+0

Хмм. когда я добавляю к нему глобальное значение, я делаю это в самой функции, в объявлении переменной сверху или в цикле while. Это дает мне сильную синтаксическую ошибку. – Soundwave

+0

Еще одна серьезная проблема в вашем коде заключается в том, что вы возвращаете строку, эффективно нарушая функцию перед установкой поля Validation. Пожалуйста, см. Мой ответ для правильного порядка ('Validation = True' только, чем' return '... "') –

ответ

0

Глобальные переменные в Python немного сложны, недостаточно объявить переменную в верхней части файла.

Кроме того, держать вас возвращают значение, прежде чем установить значение Validation, вызывая функцию для завершения перед установкой этой переменной

Последний вопрос логика некоторое время, коррекционных для использования raw_input вместо ввода и еще отступа

Доступ только к глобальным переменным работает только в ожидании, но при изменении их значения в функции требуется еще один дополнительный шаг, вы должны объявить глобальную переменную глобальной. В вашем случае:

def generateNumber(): 
    Number = randint(1, 10) 
    return Number 

def checkNumber(Guess): 
    global Validation #<-- this instructs Python to use the global variable 
    Number = generateNumber() 
    if int(Guess) == Number and count < 1: 
     Validation = True 
     return "First time right! Genius?" 

    elif int(Guess) == Number and count == 2: 
     Validation = True 
     return "Correct. Second time, nice!" 

    elif int(Guess) == Number and count < 4: 
     Validation = True 
     return "Correct. Good job." 

    elif int(Guess) == Number and count > 3: 
     Validation = True 
     return "Correct. Took you long enough." 

    else: 
     return "Wrong! Try again " 

while Validation == False: 
    Guess = input("Please guess a number between 1 to 10: ") 
    print (checkNumber(Guess)) 
    count += 1 
    if (Validation): 
     if (raw_input("Would you like to try again? y/n \n") == "y"): 
      count = 0 
      Validation = False 
     else: 
      break 
0

Вам нужно установить Validation к Правда перед возвращением из метода, например:

if int(Guess) == Number and count < 1: 
    Validation = True 
    return "First time right! Genius?" 

Сделайте это для всех, если-заявления.

0

I пятно два (полтора) проблемы в вашем коде:

  1. Как было отмечено Ишай Пелед, вы должны сделать проверки глобальной
  2. Ваши заявления «возвратных» расположены перед тем вы изменить значение «Проверка»
  3. «пока» не имеет «другое»

Вот обновленный код:

from random import randint 

count = 0 
Validation = False 

def generateNumber(): 
    Number = randint(1, 10) 
    return Number 

def checkNumber(Guess): 
    global Validation 
    Number = generateNumber() 
    if int(Guess) == Number and count < 1: 
     Validation = True 
     return "First time right! Genius?" 

    elif int(Guess) == Number and count == 2: 
     Validation = True 
     return "Correct. Second time, nice!" 
    elif int(Guess) == Number and count < 4: 
     Validation = True 
     return "Correct. Good job." 
    elif int(Guess) == Number and count > 3: 
     Validation = True 
     return "Correct. Took you long enough." 
    else: 
     return "Wrong! Try again " 


while Validation == False: 
    Guess = input("Please guess a number between 1 to 10: ") 
    print (checkNumber(Guess)) 
    print "validation: %s" % str(Validation) 
    count += 1 

TryAgain = input("Would you like to try again? y/n \n") 
0

Помимо проблемы глобальной переменной, вам необходимо сделать еще один набор исправлений. Все ваши назначения в Validation = True появляются после операторов «return». Validation = True никогда не будет выполняться! Он выйдет из функции перед выполнением этих функций. Установите «Validation = True» перед тем, как вы вернетесь ». Вы все еще должны иметь глобальную декларацию, как заявил Ишай.

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