2017-10-24 2 views
0

Ich bin ein Noobie, lernen zu programmieren und ich stolperte über eine falsche Ausgabe beim Üben eines Codes in Python, bitte helfen Sie mir damit. Ich habe mein Bestes versucht, um das Problem im Code zu finden, aber ich konnte es nicht finden.falsche Ausgabe beim Aufruf der Funktion

Code:

def compare(x,y): 
    if x>y: 
     return 1 
    elif x==y: 
     return 0 
    else: 
     return -1 

i=raw_input("enter x\n") 
j=raw_input("enter y\n") 

print compare(i,j) 

Ausgang:

-> python python.py 
enter x 
10 
enter y 
5 
-1 

Die Ausgabe, die ich zu erhalten hatte, ist 1, aber die Ausgabe, die ich erhalten -1. Bitte helfen Sie mir mit dem unsichtbaren Fehler in meinem Code.

Vielen Dank.

Antwort

1

raw_input gibt immer einen String zurück.

so müssen Sie die Eingabewerte in Zahlen konvertieren.

i=raw_input("enter x\n") 
j=raw_input("enter y\n") 
print compare(i,j) 

sollte

i=int(raw_input("enter x\n")) 
j=int(raw_input("enter y\n")) 
print compare(i,j) 
+0

jetzt verstehe ich, dass raw_input String-Wert zurück, wenn mein Code ist wie folgt: 'def vergleichen (x, y): wenn x> y: return 1 elif y> x: return -1 sonst: return 0 i = raw_input j = raw_input ("geben Sie y \ n") drucken vergleichen (i, j) ("x \ n eingeben") 'dann wird die Ausgabe, die ich empfangen ist:' - > python python.py eingeben x eingeben y -1' wie kommt die Ausgabe ist -1 anstatt 0 – balakumaran

+1

können Sie auch Alphabete vergleichen, sie sind nach ihren ASCII-Wert bestellt Sie können in der repl einchecken, indem Sie "b" <'a'', was sollte Gib dir Falsch und ''a' '' 'wird dir Wahr geben. Das ist, warum Sie nicht 0 – Anbarasan

0

Ihr Problem ist, dass raw_input() einen String zurückgibt, nicht eine ganze Zahl.

Daher überprüft Ihre Funktion tatsächlich "10"> "5", das ist False, daher fällt es durch Ihren if Block und erreicht die else Klausel.

Um dies zu beheben, müssen Sie Ihre Eingabezeichenfolgen in Ganzzahlen umwandeln, indem Sie die Werte in int() einschließen.

d.h.

i = int(raw_input("enter x\n")).

+0

erhielten Eigentlich gibt es nichts wie "Casting" in Python. "Casting" (in "type casting") bedeutet "die gleiche Variable als einen anderen Typ zu interpretieren", was in Python nicht möglich ist. Was "int (somestr)" tut, ist das Anlegen eines neuen "int" -Objekts aus dem numerischen Wert von "somestr", so dass der korrekte Ausdruck "konvertieren" und nicht "werfen" wäre. –

0

Verwenden Sie die integrierte cmp-Built-in-Funktion.

>>> help(cmp) 
Help on built-in function cmp in module __builtin__: 

cmp(...) 
    cmp(x, y) -> integer 

    Return negative if x<y, zero if x==y, positive if x>y. 

So wird Ihre Funktion so aussehen.

>>> def compare(x,y): 
... return cmp(x,y) 
... 
>>> 

erhalten dann zwei Variablen raw_input(), die Zeichenfolge zurückgibt, wenn Sie also zwei Zahlen mit einem blankspace in der Mitte der Eingabe, Splitting basierend auf Leerzeichen zeigt zwei Zahlen in dieser x und y speichern, und dann Wenden Sie map function an, die zwei Parameter benötigt, eine int-Funktion und die Sequenz, die nichts anderes ist als eine aus split() erstellte Liste.

>>> x,y = map(int, raw_input().split()) 
3 2 

Jetzt Vergleicht man die x und y, Da x = 3 und y = 2, Da nun nach der Dokumentation von cmp() Es wenn xy negativ zurück.

>>> compare(x,y) 
1 
>>> compare(y,x) 
-1 
>>> compare(x-1,y) 
0 
>>> 
+0

Veröffentlichen Sie Screenshots nicht als Antworten - und eine Buchung ohne Erklärungen ist keine gute Antwort. –

+0

@bruno deshuilliers: Meine Antwort mit Detailbeschreibung aktualisiert. – kvivek

Verwandte Themen