Seite 2 von 2
Verfasst: Montag 8. Juni 2009, 23:17
von BlackJack
@Aeron: Ich denke schon das sortiert wird, aber nicht nach dem Zahlenwert der Punkte, sondern alphabetisch. Wenn Du Zahlen sortieren möchtest, müssen das auch wirklich Zahlen sein.
Code: Alles auswählen
In [822]: '10' > '2'
Out[822]: False
In [823]: 10 > 2
Out[823]: True
Verfasst: Montag 8. Juni 2009, 23:40
von yipyip
Hallo Aeron,
irgendwie hast Du Dich mit Deinem Klassendesign
ziemlich arg in den Fuss geschossen.
Wieso brauchst Du eine extra Klasse 'HighscoreEntry'?
Zur Verwirrung traegt ausserdem bei,
dass Deine Klasse 'Highscore' ein Attribut 'HighscoreEntry' hat,
dies aber eine *Liste* von Eintraegen ist.
Damit Du auf etwas andere Gedanken kommst:
http://paste.pocoo.org/show/121872/
yipyip
Verfasst: Montag 8. Juni 2009, 23:48
von BlackJack
@yipyip: Also gegen die Klasse `HighscoreEntry` spricht IMHO nichts. Die weiss halt wie man sie mit anderen `HighscoreEntry`\s vergleicht. Alternative wäre ein Tupel, aber dann hätte man die sprechenden Bezeichner nicht mehr.
Und wehe es kommt jetzt jemand mit "named tuple" -- das gibt's in meiner Welt (Python 2.5) noch nicht.

Verfasst: Dienstag 9. Juni 2009, 00:07
von yipyip
Bin davon ausgegangen, dass man eine Highscoreliste eigentlich
nur nach "Punkten" sortieren muss, daher erschien mir
eine extra Klasse fuer die Eintraege als etwas ueberdimensioniert.
named tuple?
Waren bis eben voellig neu fuer mich.
yipyip
Verfasst: Dienstag 9. Juni 2009, 07:48
von cofi
Named Tuple sind quasi ein C-Struct

Ganz nett, aber ich denke in den meisten Fällen bieten sich eher Klassen an.
In meiner Welt gibts die schon
Code: Alles auswählen
In [3]: from collections import namedtuple
In [4]: Contributor = namedtuple("Contributor", "name email")
In [5]: contributor = Contributor("John Doe", "john.doe@example.net")
In [6]: contributor.name
Out[6]: 'John Doe'
In [7]: contributor.email
Out[7]: 'john.doe@example.net'
Verfasst: Dienstag 9. Juni 2009, 18:28
von Aeron
Soo... hat gereicht im Konstruktor der HighscoreEntry-Objekte einfach die Punkte nach Integer zu casten
Code: Alles auswählen
class HighscoreEntry(object):
def __init__(self, n, s, d):
self.PlayerName=n
self.Score=int(s)
self.Date=d
Danke für die Hilfe.
Verfasst: Dienstag 9. Juni 2009, 19:15
von derdon
Ich würde s (was neben n und d ein sehr schöner Name ist) gleich als Integer übergeben. Eine Typumwandlung in der Funktion __init__ ist nicht schön.
Edit: __init__ ist kein Konstruktor!
Verfasst: Dienstag 9. Juni 2009, 19:18
von DasIch
- __init__ ist nicht der Kontruktor.
- Python ist eine stark typisierte Sprache da castet man nichts.