2017-02-02 2 views
0

Ich bin neu in der Programmierung und machte ein einfaches Programm, um festzustellen, ob eine vom Benutzer eingegebene Nummer gerade oder ungerade war. Ich habe auch eine Funktion gemacht, die überprüft, ob die eingegebene Zahl eine Ganzzahl und nicht ein Float ist.Warum gibt dieses Programm die Nachricht mehr als einmal aus?

Das Programm wird meistens korrekt ausgeführt, wenn ein Benutzer eine Nummer eingibt, aber die Meldung, ob die Zahl ungerade oder gerade ist, wird mehrmals gedruckt, wenn der Benutzer zuerst mehrere Floats eingibt. Warum passiert das?

+0

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. –

+0

Verwenden Sie str.isdigit – YOU

+0

Ändern Sie 'input' in' raw_input', wenn Sie Python 2 verwenden. 'Input' ist die korrekte Funktion bei der Verwendung von Python 3. – Evert

Antwort

2

even_odd wird von innerhalb check_int wieder aufgerufen (unter dem Namen y). Deshalb sehen Sie seine Ausgabe mehrmals.

Ich denke, Sie denken, dass dies erforderlich ist, um mit even_odd nach check_int ist fertig. Dies ist nicht erforderlich. Wenn eine Funktion beendet ist, wird das Programm automatisch von dort fortgesetzt, wo die Funktion aufgerufen wurde.

einfach die y Parameter aus check_int entfernen, entfernen Sie die Zeile y() und check_int(given_number, even_odd)-check_int(given_number) ändern.

2

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.

0

Es gibt ein paar Probleme mit Ihrem Code.

Vor allem brauchen Sie kein elif. Wenn given_number % 2 !=0 falsch ist, ist die entgegengesetzte Bedingung immer True. Das Gegenteil von != 0 ist 0.

Auch übergeben Sie keine Funktion als Rückruf. Die Art, wie Sie es geschrieben haben, könnte Ihr Programm möglicherweise zum Absturz bringen. Ich schlage vor, Sie lesen mehr über loops.

Prost!

Verwandte Themen