2017-05-10 1 views
-4

Ich möchte den Benutzer einen Namen und Highscore eingeben lassen, dann möchte ich überprüfen, ob dieser Highscore größer als einer der Highscores im Array ist. Ich denke, die .isdigit() hat etwas damit zu tun, benötigt aber weitere Hilfe.Sortierung durch Ganzzahlen in mehrdimensionalen Array

HighScores = (("FredROX",43651),("ACE51",41032),("RangiBoi",40080), 
       ("Prince",38987),("DaiZ",35346),("ACE51",35344),("WASSABI",34513), 
       ("MasterG",31095),("RSGuru",30521),("SnipeU",25948)) 


name = input("Please input a name") 
score = int(input("Enter a highscore")) 


def Print_Scores(): 
    #Function to print the high score table 
    #allow function to access HighScores from outside the function 
    global HighScores 
    for x in HighScores.isdigit(): 
     if score > HighScores: 
      HighScores.append(name, score) 
    print(HighScores)   








#call the printing function 
Print_Scores() 
+1

Sie versuchen, das Ergebnis eines Aufrufs von 'HighScores.isdigit' zu durchlaufen, aber' HighScores' ist vermutlich eine 'liste'. Sie erhalten wahrscheinlich einen 'AttributError'. Zukünftig sollten Sie den * vollständigen Fehler einschließlich des Stack-Trace * posten. Es ist nicht klar, was Sie mit Ihrer "Für" -Anweisung erwarten, ich denke, Sie müssen es klären. Außerdem ist Ihre 'globale' Anweisung unnötig.Und Ihre Funktion soll die Highscores "drucken", aber sie "hängt" an einer Liste von Highscores an? Schließlich ist das kein mehrdimensionales Array, das ist ein Tupel-Tupel. –

+0

Also, wenn Sie das 'NameError' bekommen, ist es wahrscheinlich, dass Sie Python 2 anstelle von Python 3 verwenden. –

Antwort

-1

Anstatt dies:

for x in HighScores.isdigit(): 
    if score > HighScores: 
     HighScores.append(name, score) 
print(HighScores) 

tun Sie dies:

for x in HighScores: 
    if score > x[1]: 
     HighScores.append((name, score)) 
print(HighScores) 

Denken Sie daran, machen Bewerten Sie ein int, wenn Sie eine Eingabe erhalten.

isDigit() überprüft, ob ein Zeichen eine Ziffer ist. Machen Sie HighScores eine Liste, kein Tupel, indem Sie eckige Klammern anstelle von Klammern verwenden.

+0

Warum der Downvote? –

+0

Ich bekomme das, nachdem ich den Namen Jo eingegeben habe. Traceback (letzter Aufruf zuletzt): Datei "C: \ Benutzer \ Mr \ Downloads \ Highscore comparing.py", Zeile 6, in Name = Eingabe ("Bitte Name eingeben") Datei "", Zeile 1, in NameError: Name 'jo' ist nicht definiert – Droid2

+0

Ich fand heraus, warum ich 2,7 Leerlauf anstelle von 3 verwendet. – Droid2

0

Ihre for-Schleife sollte wahrscheinlich in etwa so aussehen. Das Ergebnis ist immer das zweite Element in jedem Tupel. Sie können diesen Wert also sofort auswählen, anstatt isDigit zu überprüfen. Sie möchten dann den Namen und die Punkte in einem Tupel an diese Liste anhängen.

for tup in HighScores: 
    if score > tup[1]: 
     HighScores.append((name, score)) 
+0

Warum sollte eine" print_scores "-Funktion' .append' zu einer Liste von Highscores? –

+0

Sorry, es sollte print_scores nicht heißen, das von einer vorherigen Aufgabe war. Ich sollte es wahrscheinlich in etwas wie append_scores umbenennen – Droid2

+0

Ich bekomme Traceback (letzten Anruf zuletzt): Datei "C: \ Benutzer \ Mr \ Downloads \ Highscore comparing.py", Zeile 6, in name = Eingabe ("Bitte einen Namen eingeben ") Datei" ", Zeile 1, in NameError: Name 'Brendan' ist nicht definiert – Droid2

0

Versuchen Sie folgendes:

# import itemgetter 
from operator import itemgetter 

# HighScores should be a list, not a tuple. That way you can modify it 
HighScores = [("FredROX",43651),("ACE51",41032),("RangiBoi",40080), 
       ("Prince",38987),("DaiZ",35346),("ACE51",35344),("WASSABI",34513), 
       ("MasterG",31095),("RSGuru",30521),("SnipeU",25948)] 

# cleaned up the input 
name = input("Please input a name: ") 
score = int(input("Enter a highscore: ")) 


def Print_Scores(): 
    #Function to print the high score table 
    #allow function to access HighScores from outside the function 
    global HighScores 
    # explained below 
    if score > max(HighScores, key=itemgetter(1))[1]: 
     HighScores.append((name, score)) 
    print(HighScores)   

#call the printing function 
Print_Scores() 

Die Linie

if score > max(HighScores, key=itemgetter(1))[1] 

Erklärung verdient.

Der itemgetter(1) Teil ist eine Funktion, die dazu äquivalent ist:

def itemgetter(i): 
    def f(x): 
     return x[i] 
    return f 

itemgetter(1) So gibt das zweite Element aus einer Sequenz.

Jetzt verwenden wir diese Funktion als den Schlüssel zu max, so dass es das Element findet, das die größte Punktzahl hat.

max(HighScores, key=itemgetter(1)) 

Dann nehmen wir das und seinen zweiten Einzelteil erhalten (seine Partitur)

max(HighScores, key=itemgetter(1))[1] 

Und wenn es weniger als die Partitur sie eintraten, fügen wir ein Tor zu HighScores.

Für zukünftige Referenz ist es wahrscheinlich besser, wenn Sie nicht an die Liste innerhalb einer Funktion namens PrintScores anhängen, da die Leute das nicht erwarten. Ich würde es direkt tun, nachdem Sie den Benutzereingaben erhalten, wie folgt aus:

from operator import itemgetter 

HighScores = [("FredROX",43651),("ACE51",41032),("RangiBoi",40080), 
       ("Prince",38987),("DaiZ",35346),("ACE51",35344),("WASSABI",34513), 
       ("MasterG",31095),("RSGuru",30521),("SnipeU",25948)] 


name = input("Please input a name: ") 
score = int(input("Enter a highscore: ")) 

if score > max(HighScores, key=itemgetter(1))[1]: 
    HighScores.append((name, score)) 

def Print_Scores(): 
    #Function to print the high score table 
    #allow function to access HighScores from outside the function 
    global HighScores 
    print(HighScores)   

#call the printing function 
Print_Scores() 

Natürlich an diesem Punkt Sie wirklich nicht die PrintScores Funktion benötigen und Sie können nur print(HighScores)

+0

Warum sollte eine "print_scores" Funktion ".append" zu einer Liste von High Scores führen? –

+0

@ juanpa.arrivillaga Ich mache es nur, weil das sein Code ist. Er hatte die richtige Idee, wusste einfach nicht die Syntax –

+0

Keine Notwendigkeit für eine Bibliothek. –

Verwandte Themen