Also um das mal Klar zustellen Black Jack den Code hab ich selbst geschrieben und nicht alle funktionen hier reingestellt, wie zum Beispiel Changer und die Lösung die ihr mir gegeben habt werde ich auch verwenden ich dachte das darf ich oder etwa nicht? Ich werde den User oder besser gesagt die Quelle auf jeden Fall angeben der Rest des Codes ist von mir, also nicht irgentwo geklaut. Der Code ist auch noch lange nicht fertig mir fehlt ja noch der Entpacker den werde ich in der nächsten zeit noch coden =)BlackJack hat geschrieben:@Schaf220: Nun ja jetzt sehen wir, dass Du einfach nur eine Lösung kopiert hast und nicht selber entwickelt hast.
Die vorhandenen Kommentare kannst Du alle entfernen, die erzählen ja nur das nun wirklich Offensichtliche, was da schon als Quelltext daneben steht. Generell sollten Kommentare nicht erzählen *was* gemacht wird, das sollte schon aus dem Quelltext ersichtlich sein, sondern *warum* das im Quelltext so gemacht wird, wie es gemacht wird.
Den Quelltext auf Modulebene würde ich in einer `main()`-Funktion verschwinden lassen.
Die Kommandozeilen-API ist etwas ungewöhnlich und es gibt auch verschiedene Datentypen. `--quiet` sollte zum Beispiel eher ein `bool` sein. Da eigentlich immer die Namen für Ein- und Ausgabedatei benötigt wird, die also nicht *optional* sind, sollten das auch keine Optionen sondern Argumente sein. Bleibt eine Option, die angibt, ob ge- oder entpackt werden soll. Könnten auch zwei Optionen mit dem gleichen `dest` sein und das jeweils auf `True` oder `False` setzen. Auf jeden Fall sollten falsche Kombinationen auch mit einer Fehlermeldung quittiert werden.
`packer()` sollte `pack()` heissen. Funktionen und Methoden werden in der Regel mit Verben benannt, die beschreiben was sie tun. `Packer` (in dieser Schreibweise) ist eher ein Name für eine Klasse. `number` ist nur ein Name für den Wert 1 und ändert sich nie. `last_byte` wäre ein passenderer Name für `place` und `i` sollte man in Schleifen nur an ganze Zahlen binden. Alles andere ist sehr verwirrend für Leser.
Man kann Optionen mit einem Defaultwert vorbelegen, damit ist die entsprechende ``if``-Abfrage in `write_file()` überflüssig. Das Argument der Funktion heisst `final_list`, es wird aber *eine* Zeichenkette übergeben. Anstelle der ``for``-Schleife hätte man hier auch die `writelines()`-Methode verwenden können. Macht natürlich auch nur Sinn, wenn man auch wirklich eine Liste bekommt und keine Zeichenkette.
Die ``except``-Anweisungen mit `StandardError` und ohne konkrete Ausnahme sind schlecht. Du machst nirgends mit den Ausnahmen etwas sinnvolles. Ausgegeben werden sie auch, wenn man sie nicht abfängt.
Über Zeilen in einer Datei kann man ganz einfach mit einer ``for``-Schleife iterieren, die ``while``-Konstruktionen sind viel zu kompliziert.
Die Funktion `changer()` ist nirgends definiert.
`write_file()` ist mit jeweils nur 2 Leerzeichen pro Ebene eingerückt.
Gruß Schaf220