2015-12-30 2 views
-1

Так что я делаю сценарий, который выглядит следующим образом,Python имя рекурсии не определено

wanttodoagain() 
def wanttodoagain() 
    print ("Hi whats your name?") 
    name = input ('') 
    print ("Hi, {}".format(name)) 
    print ("So, do you want to do this again?????") 
    print ("Y/N, it has to be capital") 
    doagainanswer=input("") 
    if doagainanswer=="Y": 
     wanttodoagain() 
    if doagainanswer=="N": 
     print ("OK, bye") 

Я хочу рекурсию, чтобы начать автоматически, потому что, когда я закрыть его и запустить его с моего рабочего стола он показывает окно не оболочка python, которая автоматически закрывается и не дожидается ввода пользователем «wanttodoagain()». Когда я запускаю его в оболочке Python, она говорит:

Traceback (most recent call last): 
    File "C:/Users/Jason Nguyen/Desktop/askname.py", line 1, in <module> 
    wanttodoagain() 
NameError: name 'wanttodoagain()' is not defined 
+0

Поместите первую строчку в конец. Функции должны быть определены до того, как вы вызовете их в файле. –

ответ

2

Вы должны поместить вызов после определения функции:

def wanttodoagain() 
    print ("Hi whats your name?") 
    name = input ('') 
    print ("Hi, {}".format(name)) 
    print ("So, do you want to do this again?????") 
    print ("Y/N, it has to be capital") 
    doagainanswer=input("") 
    if doagainanswer=="Y": 
     wanttodoagain() 
    if doagainanswer=="N": 
     print ("OK, bye") 

wanttodoagain() 

Только тогда, когда интерпретатор выполнил def Составной оператор делает имя wanttodoagain есть.

Однако, я бы не использовал рекурсию, чтобы попросить обратную связь с пользователем. Никогда не недооценивайте энтузиазм ваших пользователей; им нужно только поразить Y 1000 раз, чтобы ваша программа достигла предела рекурсии. Просто используйте while True цикл:

while True: 
    print ("Hi whats your name?") 
    name = input ('') 
    print ("Hi, {}".format(name)) 
    print ("So, do you want to do this again?????") 
    print ("Y/N, it has to be capital") 
    doagainanswer=input("") 
    if doagainanswer=="N": 
     print ("OK, bye") 
     break 
1

Вы должны сначала определить функцию перед вызовом. Теперь интерпретатор python не знает, что такое wanttodoagain.

0

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

def wanttodoagain() 
    print ("Hi whats your name?") 
    name = input ('') 
    print ("Hi, {}".format(name)) 
    print ("So, do you want to do this again?????") 
    print ("Y/N, it has to be capital") 
    doagainanswer=input("") 
    if doagainanswer=="Y": 
     wanttodoagain() 
    if doagainanswer=="N": 
     print ("OK, bye") 


wanttodoagain() 
0

вызова Функции должен быть после того, как функция определена. Вы также можете поместить подсказки для ввода пользователем внутри своего входного вызова. Это должно работать на вас:

def wanttodoagain(): 
    name = input("Hi whats your name?") 
    print ("Hi, {}".format(name)) 
    print ("So, do you want to do this again?????") 
    doagainanswer = input("Y/N, it has to be capital") 
    if doagainanswer == "Y": 
     wanttodoagain() 
    if doagainanswer == "N": 
     print ("OK, bye") 
wanttodoagain() 
+0

Я не могу добавить и ответить, потому что ответы каждого верны. Спасибо за твою помощь!!!!! @Heinst Почти каждый ответ в основном такой же, поэтому я не знаю, что выбрать в качестве правильного ответа. –

+0

@PhichNguyen затем принять тот, который вы считаете лучшим ответом – heinst

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