neffe vs onkel part 2

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.
Antworten
blackmamba28
User
Beiträge: 26
Registriert: Freitag 14. September 2007, 09:58
Wohnort: bonn

Code: Alles auswählen


import pickle

def anlegen(charts):
    interpret=raw_input("Interpret: ")
    while interpret:
        titel=raw_input("Titel: ")
        stmmnzhl=input("Stimmenzahl: ")
        hit=[interpret,titel,stmmnzhl]
        charts.append(hit)
        print " "
        interpret=raw_input("Interpret: ")

def speichern(charts):
    hitlist=file("Charts.txt","w")
    pickle.dump(charts,hitlist)
    hitlist.close()

def ausgeben(charts):
    for hit in charts:
        print hit

leute wo ist der fehler bei mir
windner
User
Beiträge: 76
Registriert: Freitag 19. Oktober 2007, 11:25

Das ist schon eher gemein: du hast ja einen Python-Interpreter, der dir den Fehler sagt, aber uns verschweigst du ihn...
hitlist=file("Charts.txt","w")
Doch lieber open() statt file()?
Jona
User
Beiträge: 94
Registriert: Sonntag 23. September 2007, 23:25

ich habe keine lust mehr dir zu helfen
du gehst überhaupt nicht auf anregungen / fragen von uns ein.
liest du die antworten überhaupt?
du gibtst dir keinerlei mühe beim stellen der fragen.
BlackJack

Pickle-Dateien sollte man im Binärmodus öffnen. `stmmnzhl` ist eine schreckliche Verstümmelung um drei Buchstaben zu sparen. Und die Schleife zur Eingabe der Daten hätte ich als ``while True:`` Schleife geschrieben die bei einer leeren Eingabe für den Interpreten mit ``break`` verlassen wird.

`input()` sollte man nicht verwenden weil da beliebiger Python-Code eingegeben werden kann, der dann ausgeführt wird.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

windner hat geschrieben:Doch lieber open() statt file()?
Hallo windner!

Das macht keinen Unterschied.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
windner
User
Beiträge: 76
Registriert: Freitag 19. Oktober 2007, 11:25

Und die Schleife zur Eingabe der Daten hätte ich als ``while True:`` Schleife geschrieben die bei einer leeren Eingabe für den Interpreten mit ``break`` verlassen wird.
Dabei hast du mir erst beigebracht, dass das schöner mit iter(raw_input(), '') geht. :wink:

@gerold:
Stimmt. Wie gehts btw den C-Extensions?
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

blackmamba28 hat geschrieben:leute wo ist der fehler bei mir
Dass du Fragen stellst, die auf: "ratet mal, was meine Frage ist" hinauslaufen.

Der gepostete code hat keine syntaxfehler und tut nichts. Also keine Fehler in Sicht.
Wenn du eine Frage stellst, und möchtest, dass man dir hilft,
- beschreibe den Sollzustand ("möchte einen Whopper haben")
- beschreibe deinen Lösungsansatz ("ich geh nach BurgerKing, sage, "ich will essen")
- beschreibe den Istzustand ("ich bekomme Fritten").

Deine Problembeschreibung läuft zZ nur auf "ich geh nach BurgerKing" hinaus. Du zeigst uns deinen (?) Lösungsansatz, und behauptest, er sei fehlerhaft.
BlackJack

@windner: Das fände ich da ehrlich gesagt nicht schöner. So eine Zeile sieht nach "iteriere über die Standardeingabe" aus, aber in der Schleife würden dann "ausser der Reihe" Daten aus dem Iterator durch die anderen Lesebefehle entnommen. Der Zusammenhang ist nicht so offensichtlich.

Wenn, dann hätte ich das eher so geschrieben:

Code: Alles auswählen

input_iterator = iter(raw_input, '')
for artist in input_iterator:
    title = input_iterator.next()
    votes = int(input_iterator.next())
Aber hier sieht man schon das Problem, dass keine Prompts ausgegeben werden. Der übliche Quelltext sieht eher so aus:

Code: Alles auswählen

while True:
    artist = raw_input('Artist: ')
    if not artist.strip():
        break
    title = raw_input('Title: ')
    votes = int(raw_input('Votes: '))
Wobei ich die Eingabe der Stimmen noch in eine Funktion verfrachten würde, die auf falsche Eingaben eingeht.
windner
User
Beiträge: 76
Registriert: Freitag 19. Oktober 2007, 11:25

Die letzte Variante ist wirklich gut. Mir ist noch nichts klareres eingefallen.
Aber die Endlosschleifen finde ich (aufgrund seltsamer psychischer Defekte?) nicht schön.
BlackJack

Das wird von vielen, sogar Fanboys :-), als etwas unschön angesehen, aber sämtliche Vorschläge so etwas wie eine ``do…while``-Schleife in die Python-Syntax einzubauen sehen noch viel ("komischer"|(eigen|fremd)artiger) aus.
Antworten