Das Problem ist, dass Sie eine arkane Version der Rekursion verwendet haben, um Ihr Programm zu durchlaufen. Wenn Sie einen Float erhalten, rufen Sie check_int, drucken Sie die Nachricht, und dann wieder auf die Eingabefunktion. Dies führt zu einer hängenden Rückkehr zu Ihrem ersten Anruf auf dem Stapel. Wenn Sie schließlich eine Ganzzahl erhalten, lassen Sie check_int normal, aber dann zurück zu even_odd, die immer noch auf die Parität der Floats zu verarbeiten wartet. Das erzeugt die zusätzlichen Linien der Ausgabe.
Wenn Sie etwas als Nicht-Integer zurückweisen, müssen Sie eine Schleife zurück zur Eingabe machen oder andernfalls die Parität später nicht überprüfen.
def check_int(x,y):
return x != int(x)
def even_odd():
given_number = input("Please type an integer: ")
if check_int(given_number, even_odd):
print "The number is not an integer"
else:
print "The number is an integer"
# Check parity
if (given_number % 2) != 0:
print "The number is odd"
elif (given_number % 2) == 0:
print "The number is even"
even_odd()
Wenn Sie Schleife zu wollen, bis Sie eine ganze Zahl zu erhalten, schreiben, dass als separate, äußere Schleife.
Was ist 'n% 2' für einige float n? Um das Programm zu debuggen, versuchen Sie 'print '{} ist die Zahl' .format (x)' an verschiedenen Stellen. –
Verwenden Sie str.isdigit – YOU
Ändern Sie 'input' in' raw_input', wenn Sie Python 2 verwenden. 'Input' ist die korrekte Funktion bei der Verwendung von Python 3. – Evert