Python Zufallsgenerator: bestimmte Zahlen ausgrenzen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Programmieren funktioniert nicht mittels Raten, du musst schon wissen was du machst. Was soll denn passieren, wenn du Listen von Listen subtrahierst, das ist doch ein wenig unsinnig. Die list-Aufrufe in den Zeilen 18, 20 und 21 deuten auch auf geraten hin. Die sind nämlich total überflüssig. Du suchst wahrscheinlich Mengen (sets). Zeilen 24 bis Ende sind wahrscheinlich auch nicht so gemeint, wie sie dort stehen. Da werden nämlich Tupel mit Integern in einer Liste vermischt. Verschiedene Datentypen in einer Liste möchte man normalerweise vermeiden.

Und dann noch ein wertvoller Hinweise: Schreibe Code niemals blind runter, sondern teste die Zwischenschritte. Bei dir schmiert das Programm ja schon relativ früh ab, der ganze Rest danach baut dann auf falschen Annahmen auf. Lasse deinen Code also zwischendurch mal laufen. Und wenn er irgendwo nicht durchläuft, dann behebe erst den Fehler und programmiere anschließen dahinter weiter.
Das Leben ist wie ein Tennisball.
qEagleStrikerp
User
Beiträge: 21
Registriert: Sonntag 14. September 2014, 09:42

Hi,
ich mach das normalerweise schon so. Auch heute. Nur bin ich bei dem Problem mit den Listen hängen geblieben, hab aber den restlichen Code schonmal eingetippt, sodass ich später nur noch Details ändern muss.
Btw: Das mit dem Listen voneinander subtrahieren hat im letzten Programm bereits funktioniert, wenn du dir die paar Nachrichten vor deiner mal durchliest. Das hat wirklich wunderbar funktioniert. Aber jetzt mit den Tupeln war das nicht mehr so leicht. Mir ist aufgefallen, dass es bei zs eine Liste mit [] ergibt und bei chosen eine mit {}. Ich hab vermutet, dass dort das Problem liegt, bin aber noch zu unerfahren um sowas zu lösen. Daher hab ich auch das aktuell fehlerhafte Programm online gestellt, damit mir bei eben diesem Problem geholfen werden kann.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@qEagleStrikerp: Der Unterschied zwischen [] und {} ist der, dass ersteres eine Liste und zweiteres ein Set erzeugt. Wenn Dir soetwas unklar ist, solltest Du es in der Python-Dokumentation nachlesen, statt es unverstanden zu verwenden.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Vor allem sollte man solche Dinge sofort ad hoc in einer interaktiven Shell (aka REPL) austesten und damit experimentieren :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
qEagleStrikerp
User
Beiträge: 21
Registriert: Sonntag 14. September 2014, 09:42

Hi zusammen,
hab mich letztens mal wieder hingesetzt und das Programm komplett neu geschrieben, diesmal mit Dictionarys. Hab es dann in einem 2. Python Programm über "exec" in einer Schleife aufgerufen und schon kamen erwartete Werte raus.

Danke für eure Bemühungen!
BlackJack

@qEagleStrikerp: Warum um Himmels willen mit `exec`‽ Das ist mit Sicherheit nicht das richtige Werkzeug für so eine Aufgabe.
qEagleStrikerp
User
Beiträge: 21
Registriert: Sonntag 14. September 2014, 09:42

BlackJack hat geschrieben:@qEagleStrikerp: Warum um Himmels willen mit `exec`‽ Das ist mit Sicherheit nicht das richtige Werkzeug für so eine Aufgabe.
Erstaunlicherweise habe ich aber mit folgendem Code (ist nur ein Ausschnitt) genau die Werte bekommen, die ich zuvor theoretisch berechnet habe. Daher eignet es sich scheinbar doch.

Code: Alles auswählen

for i in range(1000000):
    exec(open("dv core ohne fatumknoten.py").read())
Edit: Das Problem war ja, dass ich, wenn ich das Kernprogramm in eine Schleife gesetzt hab, immer ähnliche Werte rausbekommen habe. irgendein Fehler mit dem Zufallsgenerator also. Nun habe ich ein zweites Programm erstellt, dass das erste n mal aufruft - dabei stimmen die Werte.

Edit 2: Ich habe es gerade nochmal probiert, es geht doch ^^. Bei dem alten Programm hat also generell irgendwas wohl nicht so ganz gestimmt.
BlackJack

@qEagleStrikerp: Nur weil etwas funktioniert eignet es sich nicht automatisch. Man kann auch Nägel mit dem Griff eines Schraubendrehers in die Wand kloppen, das macht den Schraubendreher aber nicht zum richtigen Werkzeug für diese Aufgabe.
qEagleStrikerp
User
Beiträge: 21
Registriert: Sonntag 14. September 2014, 09:42

BlackJack hat geschrieben:@qEagleStrikerp: Nur weil etwas funktioniert eignet es sich nicht automatisch. Man kann auch Nägel mit dem Griff eines Schraubendrehers in die Wand kloppen, das macht den Schraubendreher aber nicht zum richtigen Werkzeug für diese Aufgabe.
^^ Da hast du natürlich vollkommen recht. Wie ich ja nachträglich noch geschrieben habe, funktioniert das Programm ja auch mit Schleife, was exec überflüssig macht.
Antworten