2015-02-03 2 views
-4

Я искал и об этом уже много ответил, но в основном это связано с ошибками версии. Я проверил версию Python (это 3.4.2), но все равно возвращает ошибку.NameError: имя '' не определен?

Код ж/ошибки:

import random 

def start(): 
    rannum = random.randint(0, 20) 
    inpnum = int(input('Please enter a number between 0 and 20: ')) 
    calc() 

def loop(): 
    inpnum = int(input('Please enter a number between 0 and 20: ')) 
    calc() 

def calc(): 

    if inpnum > rannum: 
     print('The number you entered is too high.') 
     loop() 

    if inpnum < rannum: 
     print('The number you entered is too low.') 
     loop() 

    if inpnum == rannum: 
     print('Congratulations! You guessed the number!') 
     input('') 

start() 

Это возвращает код ошибки:

Traceback (most recent call last): 
    File "guessthenumber.py", line 26, in <module> 
    start() 
    File "guessthenumber.py", line 6, in start 
    calc() 
    File "guessthenumber.py", line 14, in calc 
    if inpnum > rannum: 
NameError: name 'inpnum' is not defined 

Я пытался исправить это сам и изменил его выглядеть следующим образом:

import random 

def loop(): 
    inpnum = int(input('Please enter a number between 0 and 20: ')) 
    calc() 

def calc(): 

    rannum = random.randint(0, 20) 
    inpnum = int(input('Please enter a number between 0 and 20: ')) 

    if inpnum > rannum: 
     print('The number you entered is too high.') 
     loop() 

    if inpnum < rannum: 
     print('The number you entered is too low.') 
     loop() 

    if inpnum == rannum: 
     print('Congratulations! You guessed the number!') 
     input('') 

calc() 

Он работает, но он продолжает делать новый номер (я думаю, что знаю, почему, rannum = random.randint (0, 20) продолжает составлять новый номер каждый время), и он запрашивает у вас номер ввода дважды (потому что он уже запрашивает один в loop(), но делает это снова в calc(), я думаю), поэтому вы должны случайно догадываться, пока не получите его правильно, потому что он постоянно меняет каждый Угадай.

Для меня это выглядит как полный код Python. Кто-нибудь еще знает, что делать здесь?

+0

Какая строка 26? –

+0

'inpnum' никогда не определяется в' calc', почему вы удивлены? Сделайте это явным параметром. – jonrsharpe

+0

У вас возникла проблема, связанная с лексической сферой. Вы должны рассмотреть передачу 'inpnum' в качестве аргумента' calc'. например "def calc (inpnum):'. –

ответ

2

Одним из решений было бы изменить функцию известково, чтобы принять arguemnt:

def calc(num): 
    # do stuff with num 

и передать ipnum в него:

def loop(): 
    inpnum = int(input('Please enter a number between 0 and 20: ')) 
    calc(inpnum) 

Так вы используете локальные переменные в одной функции в другой функции.

+0

Спасибо, это помогло мне на моем пути :) – EmilianSpo

0

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

пример:

import random 

def calc(): 
    rannum = random.randint(0, 20)   
    inputnum = None 
    while inputnum != rannum: 
     inpnum = int(input('Please enter a number between 0 and 20: ')) 
     if inpnum > rannum: 
      print('The number you entered is too high.') 
     elif inpnum < rannum: 
      print('The number you entered is too low.') 

    print('Congratulations! You guessed the number!') 

calc() 
0

Здесь вы идете;

import random 

def ask(): 
    rannum = random.randint(0, 20) 
    print "Num: {}".format(rannum) 
    while True: 
     inpnum = int(input('Please enter a number between 0 and 20: ')) 
     if inpnum > rannum: 
      print('The number you entered is too high.') 
     elif inpnum < rannum: 
      print('The number you entered is too low.') 
     else: 
      print('Congratulations! You guessed the number!') 
      break 

ask() 

Результат

$ python lol.py 
Num: 18 
Please enter a number between 0 and 20: 1 
The number you entered is too low. 
Please enter a number between 0 and 20: 20 
The number you entered is too high. 
Please enter a number between 0 and 20: 18 
Congratulations! You guessed the number! 
0

Это работает. Я помещаю print(), чтобы сделать пространство между строками, чтобы оно выглядело лучше.

import random 

def loop(): 
    rannum = random.randint(0, 20) 

    while True: 

     inpnum = int(input('Please enter a number between 0 and 20: ')) 
     print() 
     if inpnum == rannum: 
      print('Congratulations! You guessed the number!') 
      print() 
      break 

     if inpnum > rannum: 
      print('The number you entered is too high.') 
      print() 
      continue 

     if inpnum < rannum: 
      print('The number you entered is too low.') 
      print() 
      continue 




loop() 
Смежные вопросы