Problem mit ABC.data

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.
Malle
User
Beiträge: 29
Registriert: Freitag 11. August 2006, 19:04
Wohnort: Coswig
Kontaktdaten:

Ich benutze Idle.
Malle
User
Beiträge: 29
Registriert: Freitag 11. August 2006, 19:04
Wohnort: Coswig
Kontaktdaten:

Immer noch ein Problem:

Code: Alles auswählen

import cPickle as p

bladatei = 'bla.data'
dic = {}
dic["text"] = int(raw_input('Zahl eigeben'))

bla = 0
a = file(bladatei, 'w')
p.dump(bla, a)
a.close()

a = file(bladatei)
bla3 = p.load(a)
aaa = dic["text"] + bla3
bla = aaa
a = file(bladatei, 'w')
p.dump(bla, a)
print aaa
a.close()
So vorerst einmal das ist wieder nur ein Test teil eines größeren Programms. Es sollte eigendlich eine Zahl abspeichern und dann später durch eine Erneute eingabe die beiden Zahlen addieren (zuersteigegebene + zweiteingabe) und das Ergebniss Abspeichern. Das Ergebniss wird dabei zur ersteingabe.
Ich wäre echt dankbar für nen nützlichen code oder einen sehr hilfreichen Tipp. mfg.
BlackJack

Okay, die Teddybär Methode. Schnapp Dir ein Kuscheltier, setz' es neben dem Monitor und erkläre ihm den Quelltext Zeile für Zeile. Das da oben ist ganz einfacher, linear abgearbeiteter Quelltext. Wenn das nicht hilft, dann weiss ich auch nicht weiter.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Malle hat geschrieben:Ich benutze Idle.
Schau mal hier: [wiki]IDLE[/wiki] :)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Malle
User
Beiträge: 29
Registriert: Freitag 11. August 2006, 19:04
Wohnort: Coswig
Kontaktdaten:

@ jens danke für den link
@ BlackJack Nein hilft trotz euserst merkwürdiger Metapher nicht, is aber auch egal.
@ Gerold danke für deinen Code der hat letztendlich doch all meine Probleme gelöst. Auch wenn noch gewisse Teile des Programms fehlen (z.B. ein menu oder eine löschfunktion), und es für manche Pros noch ziemlich unprofessionell aussieht. Poste ich erstmal das Skript.

Code: Alles auswählen

# Ersparnissrechner 0.4, python
# made by Malle
# -*- coding: iso-8859-1 -*-

import types
print "*" * 70
print "Ersparnissrechner, zum Beenden Strg+C druecken oder exit Eingeben"
print "*" * 70
TAGE = "tage.txt"
ZIG = "zig.txt"


def read_number(filename):
    try:
        t = file(filename, "r")
    except IOError:
        return 0
    try:
        try:
            numtag = int(t.readline())
        except ValueError:
            numtag = 0
    finally:
        t.close()

    return numtag

def read_number2(zigaretten):
    try:
        z = file(zigaretten, "r")
    except IOError:
        return 0
    try:
        try:
            numzig = int(z.readline())
        except ValueError:
            numzig = 0
    finally:
        z.close()
    return numzig
    
def write_number(filename, numtag):
    assert(isinstance(numtag, (types.IntType, types.LongType)))
    t = file(filename, "w")
    try:
        t.write(str(numtag))
    finally:
        t.close()

def write_number2(zigaretten, numzig):
    assert(isinstance(numzig, (types.IntType, types.LongType)))
    z = file(zigaretten, "w")
    try:
        z.write(str(numzig))
    finally:
        z.close()

def show_number(numtag):
    print "Aktueller Tag: %i" % numtag

def show_number2(numzig):
    print "Anzahl Zigaretten: %i" % numzig
    
def ask_for_number():
    print
    print "Vor wieviel Tagen haben Sie zuletzt geraucht?"
    try:
        s = raw_input("Eingabe: ")
    except KeyboardInterrupt:
        print
        print "Es wurde STRG+C gedrückt!"
        print
        return None
    if s.lower() == "exit":
        return None
    else:
        try:
            numtag = int(s)
            return numtag
        except ValueError:
            print
            print "Bitte geben sie eine ganze Zahl ein."

def ask_for_number2():
    print
    print "Wieviele haben sie seither geraucht"
    try:
        s = raw_input("Eingabe: ")
    except KeyboardInterrupt:
        print
        print "Es wurde Strg+C gedrückt!"
        print
        return None
    if s.lower() == "exit":
        return None
    else:
        try:
            numzig = int(s)
            return numzig
        except ValueError:
            print
            print "Bitte geben sie eine Ganze Zahl ein."
    
def berechnung_frueher():
    old_number = read_number(TAGE)
    show_number(old_number)
    new_number = ask_for_number()
    
    new_number = old_number + new_number
    write_number(TAGE, new_number)
    global frueher
    frueher = new_number * 4 / 3
    

def berechnung_jetzt():
    old_number2 = read_number2(ZIG)
    show_number2(old_number2)
    new_number2 = ask_for_number2()
    
    new_number2 = old_number2 + new_number2
    write_number2(ZIG, new_number2)
    global jetzt
    jetzt = new_number2 * 0.2

def main():
    while True:
        berechnung_frueher()
        berechnung_jetzt()
        geldfrueher = frueher
        geldjetzt = jetzt
        Ersparniss = geldfrueher - geldjetzt
        print
        print "Sie haben bereits", Ersparniss, "Euro gespart."
        print
        

if __name__ == "__main__":
    main()
    
        
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Da gibt es allerdings noch reichlich optimierungsbedarf... Viele Codeteile sind fast identisch... Also kann man das zusammenfassen...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Malle
User
Beiträge: 29
Registriert: Freitag 11. August 2006, 19:04
Wohnort: Coswig
Kontaktdaten:

Ich weis das da noch einiges drann verbessert werden kann bzw. muss aber ich war erst einmal froh das alles mit der berechnung funktioniert hat.
An Die feinarbeit mach ich mich heute nacht mal rann.
Antworten