Hey Leute. ich habe ein kleines Programm geschrieben(mit haufenweisen Fehlern aber es funktioniert)
und nu möchte ich, dass der Benutzer, die Veränderungen (in meinem Programm, dass hinzufügen von Listenelementen) speichern kann
benutzer soll speichern können
-
- User
- Beiträge: 44
- Registriert: Dienstag 7. Mai 2013, 23:02
- Wohnort: Greifswald
@mettalqueen: Und die Frage ist nun welche?
Was ist in den Listen drin? Kann man das einfach als JSON serialisieren? Oder reicht vielleicht sogar ein einfacheres Format wie CSV aus?
Was ist in den Listen drin? Kann man das einfach als JSON serialisieren? Oder reicht vielleicht sogar ein einfacheres Format wie CSV aus?
-
- User
- Beiträge: 44
- Registriert: Dienstag 7. Mai 2013, 23:02
- Wohnort: Greifswald
In der Liste sind Namen von Mustern, also Text.
r = ["Afreeka","Well","Heartwave","Tree","Coll","Biloxy","Jasmin"] zum Beispiel
r = ["Afreeka","Well","Heartwave","Tree","Coll","Biloxy","Jasmin"] zum Beispiel
-
- User
- Beiträge: 44
- Registriert: Dienstag 7. Mai 2013, 23:02
- Wohnort: Greifswald
Ok danke dann weiß ich jetzt wonach ich mal googlen muss
-
- User
- Beiträge: 44
- Registriert: Dienstag 7. Mai 2013, 23:02
- Wohnort: Greifswald
Code: Alles auswählen
import sys
d=open("wuerfelnMuster.txt","w")
musterListe = ["Afreeka","Well","Heartwave","Tree","Coll","Biloxy","Jasmin"]
def listeSchreiben():
print"Gib dein Muster ein"
musterEingabe = raw_input()
r.append(e)
def wuerfeln():
musterListe = d.readlines()
random.shuffle(musterListe)
print(musterListe[0:3]
def anfangsMenue():
eingabemenue = input()
if eingabemenue == 1:
listeSchreiben()
if eingabemenue == 2:
wuerfeln()
print"Möchtest du ein Muster zur Datei hinzufügen 1 oder Würfeln 2"
anfangsMenue()
@mettalqueen: Da ist ganz offensichtlich die Einrückung kaputt. Vier Leerzeichen pro Ebene und keine Tabulatorzeichen sind Konvention. Das, und auch etwas zu Namensschreibweisen und Leerzeilen steht im Style Guide for Python Code.
-
- User
- Beiträge: 44
- Registriert: Dienstag 7. Mai 2013, 23:02
- Wohnort: Greifswald
aber ich habe beim letzten doch immer 4 leerzeichen
@mettalqueen: Das Programm hat auch noch eine ganze Reihe anderer Probleme. `sys` wird importiert aber nicht benutzt. `random` wird dagegen nicht importiert, aber verwendet. Auf Modulebene sollten nur Konstanten, Funktionen, und Klassen definiert werden und nicht Dateiobjekte, Listen die verändert werden, oder andere Variablen. `d` ist ein schlechter Name für eine Datei. `input()` sollte man nicht verwenden weil das die Eingabe als Python-Ausdruck interpretiert. ``print`` ist keine Funktion sondern eine Anweisung, also sollte man das nicht so schreiben als wäre es eine Funktion. Zumal das auch mal mit, und mal ohne die ”falschen” Klammern geschrieben wurde. `raw_input()` kann man einen Text für die Eingabeaufforderung als Argument übergeben. `listeSchreiben()` schreibt keine Liste. Das `r` was darin verwendet wird gibt es gar nicht.
@mettalqueen: und zusätzlich was BlackJack schreibt, kann man aus Dateien, die zum Schreiben geöffnet werden, nicht lesen, e ist genauso wenig definiert wie r und musterListe in Zeile 3 wird nie verwendet, sondern nur die lokale musterListe in wuerfeln. Funktionen sollten Parameter entgegen nehmen und/oder Rückgabewerte haben, weil sonst die Funktion einer Funktion pervertiert wird.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Hinzu kommt, dass die Kernfunktionalität nicht gut gekapselt wird! Schauen wir uns mal die ``wuerfeln``-Funktion genauer an. Diese liest die Zeilen einer (global!) geöffneten Textdatei aus und bindet diese an den Namen ``musterListe`` (was an sich auch ein schlechter Name ist!). Danach wird diese Liste gemischt und anschließend die ersten 3 Elemente ausgegeben.
Imho werden da drei verschiedene Aspekte vermischt:
1.) Das Beschaffen der Daten aus einer Datei
2.) Das Mischen und "Berechnen" des Ergebnis
3.) Die Ausgabe des Vorgangs
Die Funktion wäre viel universeller, klarer in ihrer Aufgabe und auch testbar, wenn diese ausschließlich Punkt 2 abbildete, z.B. so:
Woher die Muster stammen ist dieser Implementierung egal - ob die nun aus einer Datei eingelesen werden oder statisch aus dem Programm kommen oder sonst woher...
Indem man das Ergebnis zurückgibt, kann man die Funktion auch anderweitig einsetzen, als nur in einem CLI Programm.
Imho werden da drei verschiedene Aspekte vermischt:
1.) Das Beschaffen der Daten aus einer Datei
2.) Das Mischen und "Berechnen" des Ergebnis
3.) Die Ausgabe des Vorgangs
Die Funktion wäre viel universeller, klarer in ihrer Aufgabe und auch testbar, wenn diese ausschließlich Punkt 2 abbildete, z.B. so:
Code: Alles auswählen
def choose_patterns(patterns):
shuffle(patterns)
return patterns[:3]
Indem man das Ergebnis zurückgibt, kann man die Funktion auch anderweitig einsetzen, als nur in einem CLI Programm.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
-
- User
- Beiträge: 44
- Registriert: Dienstag 7. Mai 2013, 23:02
- Wohnort: Greifswald
Das steht aber alles so nicht in meinem Buch und ich bin Anfängerin und finde es scheiße das sihr alles immer schlecht macht
-
- User
- Beiträge: 44
- Registriert: Dienstag 7. Mai 2013, 23:02
- Wohnort: Greifswald
was bringt es mir denn wenn ihr meine Zeilen so umschreibt dass nicht mehr ein einziges Wort von mir übrig bleibt? was lerne ich denn daraus?
Wie es einfacher, robuster und eleganter geht. Du musst dich eben mit den vorgeschlagenen Lösungen beschäftigen, diese verstehen und mit deinem Ansatz vergleichen. Lies unbekannte Dinge nach und spiele ein wenig damit. So lernt man Dinge.
Das Leben ist wie ein Tennisball.
@mettalqueen: bis jetzt hat noch niemand etwas umgeschrieben. Du hast nach einem Fehler gefragt und die meisten Punkte beziehen sich auf Fehler, die verhindern, dass das Programm "läuft". Daneben solltest Du von Anfang an ein paar Richtlinien mitlernen. Denn ob man jetzt umständliches Zeugs oder das ordentliche Programmieren lernt, macht vom Aufwand her keinen Unterschied.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Dein Buch ist doch nicht Deine Grundschullehrerin, die man als Gott gleiches Wesen nie in Frage gestellt hat! Zum einen muss Dein Buch nicht in allen Punkten gut und richtig sein, zum anderen kann ein Buch ja auch nicht alles beinhalten. (Ansonsten würdest Du Dich ja auch gar nicht hier an das Forum wegen Hilfe richten )mettalqueen hat geschrieben:Das steht aber alles so nicht in meinem Buch und ich bin Anfängerin und finde es scheiße das sihr alles immer schlecht macht
Und wenn in Deinem Buch Funktionen eingeführt werden, wird da sicherlich darauf eingegangen werden, wozu Funktionen so allgemein gut sind und wie man Parameter übergeben und Rückgabewerte erhalten kann. Das ist doch alles kein Zauberkram!
Und Du verwendest ja auch schon reichlich Funktionen aus der Standard Lib. Diese sind doch auch so aufgebaut, dass die eine bestimmte Aufgabe lösen! ``open`` öffnet eine Datei und gibt Dir Objekt zurück, mit welchem Du auf diese Datei zugreifen kannst. ``shuffle`` mischt eine gegebene Sequenz "in place" und ``raw_input`` liest einen String von der Shell ein. Du wirst da kaum Funktionen finden, deren Aufgabe sich so lesen lassen: "Mache dies und das oder das und im Falle X noch dieses dazu und dann gibt das oder jenes zurück".
Und wir machen auch nicht alles schlecht, sondern weisen Dich auf Fehler oder schlechtes Design hin. Das schmälert weder Deinen Wert als Mensch, noch wollen wir Dich als Person schlecht machen oder Deine Anstregungen bewerten. Wir treffen nur Aussagen zu Deinem Code! Aber wir müssen Dich auch nicht loben, um Dich zu motivieren. Das kann mal vorkommen, dass man einem User auch mal ein Lob ausspricht, aber die Regel ist das nicht. Wozu auch? Motivation sollte jeder selber mitbringen und selbst wenn hier zig Postings kommen, die Stil und Vorgehen kritisieren, kannst Du ja dennoch stolz auf Deine bisherige Leistung sein.
Aber eines solltest Du nicht tun: Nämlich Kritik am Code persönlich nehmen!
Wir wollen hier nur helfen, dass *Du* *Deinen* Code verbessern kannst. Nicht mehr und nicht weniger.
Und ich habe auch nicht alles komplett umgeschrieben. Ok, ich habe das auf Englisch formuliert, aber ansonsten habe ich lediglich das Lesen der Muster aus der Datei weggelassen und das Ergebnis nicht *direkt* an ``print`` weitergegeben. Das Mischen und das Zusammenstellen des Ergebnisses ist doch gleich geblieben!
(Für Dich wäre übrigens ``random.sample`` besser geeignet, wenn ich das richtig sehe)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
-
- User
- Beiträge: 44
- Registriert: Dienstag 7. Mai 2013, 23:02
- Wohnort: Greifswald
Ja ich wollte auch nicht böse sein, aber ich war einfach sauer und niedergeschlagen habe den ganzen Tag ununterbrochen dran gearbeitet und das ich noch nicht viel weiß, das weiß ich ja. Es war einfach nur sehr frustrierend. Ein paar verbesserungen habe ich nun auch schon gemacht
Was erwartest du, was bei der letzten zitierten Codezeile passiert?mettalqueen hat geschrieben:Code: Alles auswählen
def listeSchreiben(): print"Gib dein Muster ein" musterEingabe = raw_input() r.append(e)