2017-11-14 1 views
-3

So studierte ich für eine Prüfung und ich machte eine einfache Funktion, um 'sequentielle Verarbeitung' zu überprüfen, und dann machte ich diese Funktion (en), die eine Zeichenfolge Eingabe whitespaced Zahlen in eine Liste und Scannen, um die höchste, aber meine Suche Conditional scheint zu denken, 8 ist größer als 20 und 23. Kann mir jemand sagen, warum das so ist?Welches Python-Konzept verursacht dieses Ergebnis?

def findMax(numberlist): 
maxval = numberlist[0] 
for i in numberlist[1:]: 
    print("The value now is:\t",i,"\nThe max value is currently\t",maxval,"\n") 
    if(i > maxval): 
     maxval = i 
print(maxval) 
return maxval 

def makeList(stringput): 
    print(stringput) 
    stringput = stringput.split(" ") 
    for i in stringput[0:]: 
     print("Value is:\t",i) 
    return stringput 

findMax(makeList(input("\nWhat test are to be sorted\n"))) 

Dies ergab das Ergebnis 8 aus dem Eingang "1 20 8 21"

Edit: Sorry, neue Benutzer .

+0

Konvertieren Sie alle Elemente in Ganzzahl und führen Sie dann die Sortierung durch. –

+1

Bitte geben Sie Ihren Quellcode im Klartext an. – Neil

+2

Bitte poste keine Bilder von Code, es ist auf diese Weise nutzlos ... –

Antwort

2

Sie Strings in Python eingeben. Das bedeutet, dass die Sortierung alphabetisch erfolgt - nicht numerisch.

Zum Beispiel, wenn Sie die folgenden zwei Wörter alphabetisch sortiert haben, welche würden Sie zuerst setzen?

Apple-

Bee

Apple-Recht? Da A kommt vor B. Lets versuchen Sie es erneut

Es wird sein 23-8 später im 'Alphabet' ist.

Wenn Sie diese richtig sortieren möchten, werfen Sie sie alle zuerst auf ints. Oder verwenden Sie eine Bibliothek wie natsorted.

+0

So einfach, jetzt erklären Sie es. Vielen Dank – BologneseBandit

2

Also, Sie müssen im Grunde jeder Zeichenfolge Darstellung von ganzen Zahlen zu einer Ganzzahl mithilfe von int(). Also, '20' < '8' weil 2 vor 8 in ASCII-Reihenfolge kommt. Wenn geprüft wird, welche Zeichenfolge größer ist, wird jedes Zeichen verglichen, um zu sehen, welches größer ist, es bestätigt nicht den Kontext der '0' hinter der '2'. Aber int('20') < int('8') wegen der Funktionsweise der Nummernleitung (über vereinfacht).

Sie können dies alles über eine Liste Verständnis:

stringput = [int(val) for val in stringput] 

Ergebnis:

def findMax(numberlist): 
    maxval = numberlist[0] 
    for i in numberlist[1:]: 
     print("The value now is:\t",i,"\nThe max value is currently\t",maxval,"\n") 
     if(i > maxval): 
      maxval = i 
    print(maxval) 
    return maxval 

def makeList(stringput): 
    print(stringput) 
    stringput = stringput.split(" ") 
    stringput = [int(val) for val in stringput] #new line 
    for i in stringput[0:]: 
     print("Value is:\t",i) 
    return stringput 

findMax(makeList(input("\nWhat test are to be sorted\n"))) 
+0

Danke. Die Konvertierung von Char zu Int kam mir völlig in den Sinn. – BologneseBandit

+0

Nur ein Kopf hoch, es ist technisch string zu int. Char ist ein Typ in C++, der ein einzelnes Zeichen oder einen vorzeichenbehafteten 8-Bit-Int darstellt. Also, technisch ist es String zu int (weil es mehr als ein Zeichen gibt).Ich versuche nicht, dir aus dem Weg zu gehen, um dich zu korrigieren, ich dachte nur, dass es wichtig war darauf hinzuweisen. Danke für das Kompliment. – Neil

Verwandte Themen