Lotto Generator und Simulator

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Malta
User
Beiträge: 83
Registriert: Samstag 8. Januar 2011, 23:51

Ich möchte euch meinen Lotto Generator und Simulator vorstellen.

Das Pythonprogramm generiert Lottozahlen und kann eine Ziehung simulieren.
Die GUI ist Qt4.

Download
https://github.com/MarkusHackspacher/pyLottoSimu

Info auf meiner Homepage
http://markush.cwsurf.de/joomla_17/inde ... -simulator
Zuletzt geändert von Malta am Sonntag 1. April 2012, 19:16, insgesamt 3-mal geändert.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Ich kann das Archivformat nicht öffnen, das du verwendest. Warum keinen Hosting-Dienst wie GitHub, Bitbucket o.ä. verwenden? Oder wenigstens ein besseres Archivformat wie *.tar.gz, *.tar.bz2, *.zip. Aber am besten fände ich immer noch, wenn man sich die Dateien online anschauen könnte.
Malta
User
Beiträge: 83
Registriert: Samstag 8. Januar 2011, 23:51

Ich hab die Dateien mit 7zip komprimiert.
http://www.7-zip.de/

Die Datei ist eben viel kleiner als bei .zip.

Andere sind auch schon auf 7zip umgestiegen,
z.B. Inkscape http://inkscape.modevia.com/win32/?M=D
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Inkscpae bietet deutlich mehr Formate zum Herunterladen an als 7zip: http://inkscape.org/download/?lang=en. 7zip ist da lediglich ein Format, das für Windowsbenutzer gedacht ist, die den Quellcode herunterladen wollen (anstalle einer fertigen exe oder eines Installers). Außerdem kann man bei Inkscape den Code online ansehen: https://code.edge.launchpad.net/~inkscape.dev. Wenn du es so wie Inkscape machen würdest, hätte ich überhaupt nichts zu meckern was das Bereitstellen und Verbreiten des Codes angeht ;)
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Ich kann es auch nicht öffnen. :(
BlackJack

@Malta: Schau Dir mal `random.sample()` an.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich kann es unter Linux auch nicht öffnen... muss doch eine 7zip-Implementation dafür geben? Dennoch würde ich auch für ein Hosting a la BitBucket plädieren.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Es gibt für alle Betriebssysteme Versionen von 7z. Jedenfalls viel besser als rar.
Dennoch ist der direkte Zugriff quasi ein Muss, wenn man Mitstreiter sucht.
BlackJack

@Hyperion: Klar gibt's eine Implementierung -- einfach mal in die Paketverwaltung schauen. Würde mich wundern wenn es heute noch Distributionen gäbe, die p7zip nicht an Bord hätten. Das ist doch schon vor Jahren angetreten um RAR mit etwas vergleichbarem aber freiem abzulösen.

Reine Kompressionsprogramme wie ``gzip`` oder ``bz2``, die den Algorithmus können, werden mittlerweile auch von GNU Tar mit eigenen Optionen unterstützt (`-J`/`--xz`/`--lzma`) -- also nicht wundern wenn's irgendwo `*.tar.xz` oder `*.tar.lzma` zum runterladen gibt. :-)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ja, hab eine gefunden. "p7zip". Damit gings jetzt.

Zum Code: Ich würde ja das uic-Modul zum dynamischen Lader der GUI gegenüber der statischen Generierung per pyuic vorziehen!

Für die verschiedenen Sätze bei der Ziehung, solltest Du Dir auch mal Dictionaries angucken. Damit kannst Du Die etliche elif-Kaskaden sparen.

Das folgende ist typisch für Umsteiger auf Python; ich wette Du kennst PHP oder C? ;-)

Code: Alles auswählen

laenge_zuf = len(zufallszahl)
           for i in range(laenge_zuf):
               if zufallszahl[i]<10:
                   text = text + "0"+ str(zufallszahl[i]) + " "
               else:
                   text = text + str(zufallszahl[i]) + " "
Wozu brauchst Du hier den Index? Du guckst Dir doch jede einzelne Zufallszahl aus der liste "zufallszahl" (der Name passt nicht zum Inhalt nebenbei) an. Du kannst in Python doch direkt über die Elemente von Listen iterieren.

Code: Alles auswählen

for value in zufallzahl:
    print value
Das Zusammenbauen des Strings geht hier sicherlich auch eleganter; da kann man etwas mit den Formatierungsmöglichkeiten von Python basteln. Zudem entfiele hier die Schleife:

Code: Alles auswählen

In [21]: values = range(7, 13)

In [22]: "".join(map("{0:02d}".format, values))
Out[22]: '070809101112'
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Malta hat geschrieben:Die Datei ist eben viel kleiner als bei .zip.
Selbst wenn es 50% kleiner ist, was ich nicht glaube wären das ja auch nur 40 KB. Man muss beim Wahl des Kompressionsformates einfach auch die Sinnhaftigkeit bedenken. Ich denke am praktischsten für Leute in diesem Forum ist tar.gz, weil die Tools auf ihren Systemen schon da sind.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
lunar

Bei allem Respekt, ich finde das Verhalten mancher Beteiligter reichlich befremdlich. Es ist weiß Gott nicht schwer, die passende Linux-Implementierung für dieses Archiv-Format zu finden. Es ist folglich ziemlich dreist, den OP für die Wahl dieses Formats zu kritisieren, wenn man nicht willens oder nicht fähig ist, selbstständig das passende Programm zum Entpacken zu finden, umso mehr, als manche der Betroffenen gerne schnell dabei sind, andere zu mehr Eigeninitiative anzumahnen, wenn mal wieder eine Frage gestellt wird, die sich durch einen Blick in die Dokumentation beantworten ließe.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mich wunderts auch dass 7zip einigen unbekannt ist. Ich wollte dem OP aufzeigen, dass es sinnvoller ist Dateien wenn es nicht wirklich auf das Format ankommt, in einem populäreren Format zu verteilen. Genauso wie man keine Dateien bei 1-Click-Hostern hochladen sollte, weil sich niemand die Mühe machen will die Wartezeit abzuwarten und dann irgendwelche obskuren Captchas einzugeben.

Um mal was zum Programm zu sagen: Ich finde die Namensgebung von ``Anleitung.txt`` und ``hilfe.html`` komisch, das Programm schaut auch bei mir ziemlich hässlich aus, man kann es mittels Ctrl+C nicht in der Konsole beenden, wenn man es dann übers Menü beendet gibt es danach die KeyboardInterrupt-Exception. Außerdem finde ich das Nachfragen ob ich es schließen will ziemlich nervig - es ist ja nicht so als ob da irgendwelche Daten wären wo es schade drum wäre wenn sie verloren gehen. Programme sollten nur nachfragen wenn dabei irgendwelche Daten verloren gehen würden. Den Ausgabefeld-Leeren Button finde ich überflüssig.

Zum Code ``#!/usr/bin/python`` ist keine gute Wahl für die Shebang, ich würde das prüfen auf Gleikhommazahlen nicht über ``floor`` machen denn das filtert Zahlen wie 3.0 raus. Und wenn du das ausschließen willst, dann würde man das wohl als erste Bedingung setzen. Nach einem ``raise`` macht ein ``return`` keinen Sinn. Außerdem ist das Würfeln sehr komisch gelöst.

Code: Alles auswählen

for i in range(len(zufallszahl)):
    text1=text1 + str(zufallszahl[i]) + " "
ist sehr unpythonisch. Der Zuordnungs-Code scheint auch in ``ontimer`` irgendwie fehl am Platz.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Bei mir sieht's aehnlich unschoen aus wie bei Leonidas. Ich seh da auch lauter feste Groessenangaben fuer die Widgets... Das sollte man vermeiden.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Malta
User
Beiträge: 83
Registriert: Samstag 8. Januar 2011, 23:51

Hab die Formatierung jetzt anders gestaltet

Code: Alles auswählen

"".join(map("{0:02d}".format, zufallszahl))
Und kein Nachfragen beim Beenden.


Wie findet ihr den Aufruf einer Anleitung im Browser im Menü Hilfe --> Hilfe?

Oder gibt es da eine bessere Lösung?
monthy
User
Beiträge: 1
Registriert: Montag 31. Oktober 2011, 12:45

Hey kann mir jemand auch den Zip schicken? Ich will mal den zahlenarchiv auf lotto.de und http://www.lottovergleich.com unter der lupe nehmen, wäre ganz schön spannende
Malta
User
Beiträge: 83
Registriert: Samstag 8. Januar 2011, 23:51

Malta
User
Beiträge: 83
Registriert: Samstag 8. Januar 2011, 23:51

Hab eine neue Version und die kann bei github heruntergeladen werden.

Ich habe Github deshalb gewählt, weil ich durch das Versionsverwaltungssystem die Änderungen besser verdeutlichen kann.
https://github.com/MarkusHackspacher/pyLottoSimu

Und Änderungen im Code werden auch dokumentiert.

In der neuen Version habe ich das Hintergrundbild geändert, der Geschwindigkeitsregler ist jetzt besser sichtbar. Bei der Simulation werden jetzt zufällige Texte ausgegeben.
Und hab paar Kleinigkeiten am Code verbessert.
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

Hallo

Wollte mal das Programm testen und hab mir Qt4 runter geladen und installiert. Beim Ausführen des Programms (lotto.pyw) kommen bei mir folgende Fehlermeldungen:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\Python27\Lotto\lotto.pyw", line 13, in <module>
    lotto.lotto_gui1.gui()
  File "C:\Python27\Lotto\lotto\lotto_gui1.py", line 195, in gui
    dialog = MeinDialog()
  File "C:\Python27\Lotto\lotto\lotto_gui1.py", line 24, in __init__
    self.setupUi(self)
  File "C:\Python27\Lotto\lotto\lotto.py", line 167, in setupUi
    self.retranslateUi(MainWindow)
  File "C:\Python27\Lotto\lotto\lotto.py", line 179, in retranslateUi
    self.anzahl.setAccessibleName(QtGui.QApplication.translate("MainWindow", "Anzahl", None, QtGui.QApplication.UnicodeUTF8))
AttributeError: 'QSpinBox' object has no attribute 'setAccessibleName'
Ich bin noch ein Frischling i.S. Python und darum vermag ich diese Fehler noch nicht wirklich zu interpretieren. Kann mir jemand helfen?

mfg
Benutzeravatar
/me
User
Beiträge: 3554
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

lackschuh hat geschrieben:Ich bin noch ein Frischling i.S. Python und darum vermag ich diese Fehler noch nicht wirklich zu interpretieren.
Ich verwende Qt bisher fast gar nicht. Dann kann ich ja mal völlig unbelastet darangehen die Fehlermeldung "AttributeError: 'QSpinBox' object has no attribute 'setAccessibleName'" gemeinsam mit dir zu deuten. Es existiert offensichtlich ein Objekt vom Typ QSpinBox. Auf diesem Objekt soll das Attribut setAccessibleName verwendet werden. Dieses gibt es laut Fehlermeldung nicht.

Wo kann es hingekommen sein?

Meine Vermutung ist, dass dieses Attribut in neueren Qt-Versionen (bzw. PyQt-Versionen) hinzugefügt wurde und du eine etwas ältere Version installiert hast. Welche Version ist es denn?


Das Netz weist nach kurzem Google-Fu auch noch auf mögliche Probleme mit Qt ohne "accessibility support" hin.
Antworten