Anfaenger - Untersteutzung?

Code-Stücke können hier veröffentlicht werden.
Antworten
le_bub
User
Beiträge: 8
Registriert: Donnerstag 13. September 2007, 12:22

Tach!

Ich beschaeftige mich seit etwa einer Woche mit Python, hab keinerlei Programmiererfahrung (abgesehen von muessigem Basic-Getippse auf dem C64 vor 12 Jahren). Da ich das ganze im Selbststudium mache, ist die Gefahr gross, dass ich mir eine schlechte Programmierweise angewoehene.
Deswegen wuerde ich die anwesenden Experten bitte, vielleicht kurz ein pruefendes Auge auf den folgenden Code zu werfen und anzumerken, was man grundsaetzlich nicht machen sollte, bzw. was man vielleicht auch eleganter loesen koennte.

Das Programm soll eine kleine Checkin-Anwendung fuer eine Fluglinie sein, die Passagiere eincheckt, Sitzplaetze vergibt und zum Schluss die Gesamtladung auf dem Flugzeug errechnet.

Vielen Dank fuer eure Hilfe,

bub
Code ausgelagert

Edit (Leonidas): Code ausgelagert.
lunar

Ohne mir den Code angesehen zu haben, würde ich dir erstmal zwei Tipps zum Posten geben:
  1. Du solltest das Markup korrigieren, so dass das Highlighting korrekt ist. Am besten nutzt du den Vorschau-Button, um das Posting vor dem Senden nochmal zu checken. Ich habe mir den Code extra in den Editor gepastet, damit er überhaupt lesbar ist!
  2. Bei längeren Listings solltest du überlegen, sie in ein PasteBin (z.B. http://paste.pocoo.org) auszulagern, das erhöht die Lesbarkeit des Postings und lässt mehr Platz für Antworten auf dem Bildschirm des Lesers. Dadurch muss man nicht so viel Scrollen.
Edit: Ok, zu spät...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hallo le_bub, willkommen im Forum,

Also das Beispiel *schreit* ja direkt nach einer Passagier-Klasse, das wäre auf jeden Fall noch zu ergänzen.
Ansonsten sind die Variablennamen viel zu kurz und nichtssagend. ``z``,``bx``, ``bb``, ``bw`` und ``tb`` sind als Namen schlichtweg unbrauchbar.
Die ``global``s müssen weg. Vergiss dass es das Keyword in Python gibt.
Dieses rowXY-Ding würde man auch lösen. Fast immer wenn du anfängst Variablennamen zu nummerieren heißt das, dass du etwas falsch gemacht hast. Dafür würde ich eher den take() Generator nehmen (den ich übrigens jetzt auch anders schreiben würde...).
Ansonsten würde ich den modulglobalen Code so weit wie es geht reduzieren. Besser alles in eine Extra-Funktion ``main()`` packen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

Für die Sitze wäre vielleicht eine zweidimensionale Datenstruktur geeigneter. Dann könnte man aus einer Sitzbezeichnung die Indexe ermitteln und in der verschachtelten Liste `True` und `False` für "Belegt" und "Frei" speichern. Damit wäre es dann auch einfach möglich Sitze wieder freizugeben, z.B. weil ein Passagier Sprengstoff in den Schuhen hatte, oder Passagiere umzusetzen, falls sich herausstellt, dass das Flugzeug mit den 10 Sumoringern auf der rechten Seite Schlagseite bekommt. ;-)

Ansonsten sind Wiederholungen und "magische" Zahlen schlecht.

Bei den ganzen Eingaben wird zum Beispiel Code wiederholt. Anstatt vorher eine Abfrage zu machen, die man in der folgenden ``while``-Schleife nochmal stehen hat, kann man alles in eine "Endlos"-Schleife (``while True:``) packen, die nur dann mit einem ``break`` verlassen wird, wenn die Bedingungen erfüllt sind.

Mit "magischen" Zahlen ist die 18 gemeint die öfter im Quelltext vorkommt. Hier wird eine Information wiederholt, die schon in der Sitzliste enthalten ist. Wenn man die Anzahl der Sitze ändert, muss man überall im Quelltext die 18 ändern. Falls man das irgendwo vergisst ist das Programm fehlerhaft.

Edit: Der Quelltext enthält einen subtilen Fehler: Wenn man als Namen 'M', 'F', oder 'C' eingibt, stimmt die Anzahl der Männer, Frauen, oder Kinder am Ende nicht. Was daran liegt das in der Liste verschiedene Informationen zusammengewürfelt werden. Man hätte wenigstens alle Daten eines Passagiers zu einem Tupel zusammenfassen können.
le_bub
User
Beiträge: 8
Registriert: Donnerstag 13. September 2007, 12:22

vielen Dank mal fuers erste. mal sehen wie das ganze in drei Tagen aussieht!

saludos,

bub
BlackJack

Ich habe mal nebenbei etwas nur mit Funktionen zusammengehackt: http://paste.pocoo.org/show/3754/

Der nächste Schritt sollte dann aber wirklich sein, Klassen für den Sitzplan und die Passagiere einzuführen.
le_bub
User
Beiträge: 8
Registriert: Donnerstag 13. September 2007, 12:22

Wow!

Vielen herzlichen Dank fuer deine Muehen! Ich meld mich dann beizeiten wieder mal, wenn ich weiss, was Klassen sind ;-) (heute Tag 13 meiner Python-"Karriere")

saluts,

bub
Antworten