2016-11-02 6 views
0

Ich schreibe ein "Sie denken an eine Nummer und der Computer muss es erraten" Programm eingeben. Mein Code ist hier: http://pastebin.com/6Ny01PJV, und wenn es eine Funktion von einer anderen Funktion aufruft, beendet es entweder das Programm oder die Fehler heraus.Aufruf Funktion innerhalb der Funktion löst Fehler

def guess(): 
    global guess 
    guess = choice(list) 
    if guess in cache: 
     guess() 
else: 
    pass 
    print (guess) 
    cache.append(guess) 

def check(guess): 
    global check 
    check = input("Was " + str(guess) + " the number? (y, n) ").lower() 
    if check == "n": 
     global wrong 
     wrong = input("Lower or higher? ").lower 

elif check == "y": 
    playAgain = input ("I guessed the number! Play again? (y, n)") 
    if playAgain == "y": 
#Right here it will error out with a TypeError 
      main() 
    if playAgain == "n": 
      exit() 
    else: 
     print("Please answer in the format 'y' or 'n'" 

def reguess(): 
    if wrong == "lower": 
     reguess = choice(list < guess) 
#Here it will end the program, no crash, just no error given 
     check(reguess) 
    elif wrong == "higher": 
#The same happens here 
     check(reguess) 
     reguess = choice(list > guess) 

Wenn ich entweder 'höher' oder 'niedriger' tippe, wird das Programm beendet.

Mache ich es falsch oder gibt es einen Fehler in meinem Code, den ich nicht sehe?

+1

Bitte verwenden Sie nicht PasteBin. Fügen Sie Ihren Code der Frage als [mcve] hinzu –

+1

Fügen Sie auch das traceback hinzu ... Ich sehe, dass Sie die 'list' Funktion überschrieben haben und nicht wirklich wissen, wie' global' funktioniert –

+0

Python ist nicht Pascal, in dem Sie müssen Weisen Sie dem Funktionsnamen einen Wert zu, um ihn von der Funktion zurückzugeben. – furas

Antwort

0

Sie machen den gleichen Fehler immer wieder. Ich werde versuchen es zu erklären.

global list # already is globally defined on next line 
list = list(range(0,11)) # list() is a function, you overwrite it here 
print (list) 

global cache # not necessary, again already global 
cache = [] 

print ("Write down a number anywhere from 1-10.\nThe computer will try to guess your number.") 

def guess(): # this defines a global function 'guess' 
    global guess # probably gets resolved to the function 
    guess = choice(list) # you overwrite the 'guess' function 

Nun, wie gesagt, halten Sie das gleiche Problem haben. Sie lassen Ihre Variablen die Funktionen überschreiben. Sie nennen diese Variablen dann als Funktionen, als ob Sie nichts überschrieben hätten.

So, TypeError: 'int' object is not callable. oder etwas ist nicht aufrufbar.

Vorschlag: entfernen global für return den Wert von jeder Funktion

Ein weiteres Problem, das ich

sehen
reguess = choice(list < guess) 

nicht klar, was Sie erwarten, dass zu tun ... list < guess ist ein boolean und Sie können 't random.choice das.

+0

Diese behobene Hälfte meines Problems. Ich bekomme immer noch das Problem, dass die Eingabe von "low" oder "high" das Programm immer noch beendet. – Ryan

0

TypeError: 'int' object is not callable bedeutet, dass Sie das Äquivalent dies getan haben:

def a(x): 
    return x+1 
a = 1 
a(2) 

Hier haben wir eine Funktion mit dem Namen definiert ‚a‘, dann neu definiert ‚a‘ ein int zu sein, dann versucht um unsere Funktion zu nennen. Dies funktioniert nicht, weil der Name 'a' nicht mehr auf die Funktion verweist, sondern sich jetzt auf die Ganzzahl 1 bezieht.

Schauen Sie sich Ihren Code an und ich wette, Sie werden etwas Ähnliches wie oben sehen.

Verwandte Themen