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)
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. –
Also, wenn Sie das 'NameError' bekommen, ist es wahrscheinlich, dass Sie Python 2 anstelle von Python 3 verwenden. –