Seite 1 von 1

Programm laden-->Werte benutzen

Verfasst: Montag 6. Februar 2006, 11:23
von Alpha-Phonix
folgender Programmcode:

Code: Alles auswählen

import msvcrt
from math import*
import math


class Zeichnung:
    def __init__(self):
        self.m_figurListe = list()
        self.m_flaechenListe = []
        self.m_SchnittListe = []
        
        
    def hinzufuegen_figur(self,figur):
        self.m_figurListe.append( figur )
        
        self.m_SchnittListe.append(figur.rechneSchnittlaenge())
        self.m_flaechenListe.append(figur.rechneFlaeche())
          
    def rechneFlaeche(self):
        self.flaeche = sum(self.m_flaechenListe) 
        
    def rechneSchnittlaenge(self):
        self.schnitt = sum(self.m_SchnittListe) 
       
    def laden(self):
        f = file("Daten.txt", "r")
        self.m_figurListe = f.read()
        print self.m_figurListe
        f.close()

    def speichern(self):
        f=file("Daten.txt","w")
        f.write("%s\n" % self.m_figurListe)
        f.write("%s\n" % self.m_flaechenListe)
        f.write("%s\n" % self.m_SchnittListe)
        f.write("Gesamtflaeche (cm): ")
        f.write("%.2f\n" % self.flaeche)
        f.write("Gesamtschnittlaenge (cm):")
        f.write("%.2f\n" % self.schnitt) 
        f.close()
    
    def loeschen(self):
        self.m_figurListe=[]
           
    
class Kreis:

    def __init__( self, t_xCenter, t_yCenter, t_radius ):
        self.m_xCenter = t_xCenter
        self.m_yCenter = t_yCenter
        self.m_radius = t_radius

    def __repr__(self):
        return "%s, %s, %s" % (self.m_xCenter, self.m_yCenter, self.m_radius)           
        
    def rechneSchnittlaenge(self):
        schnittlaenge = (float(math.pi)) * float(self.m_radius) * 2
        return schnittlaenge
    
    def rechneFlaeche(self):
        flaeche = (float(math.pi)) * float(self.m_radius) * float(self.m_radius)
        return flaeche
        

class Rechteck:
    
    def __init__(self,seitenlaenge_alpha,seitenlaenge_beta):
        self.seitenlaenge_a = seitenlaenge_alpha
        self.seitenlaenge_b = seitenlaenge_beta
        
    def __repr__(self):
        return "%s, %s" % (self.seitenlaenge_a, self.seitenlaenge_b)
    
    def rechneSchnittlaenge(self):
        schnittlaenge=float(self.seitenlaenge_a)*2+float(self.seitenlaenge_b)*2
        return schnittlaenge
    
    def rechneFlaeche(self):
        flaeche=float(self.seitenlaenge_a)*float(self.seitenlaenge_b)
        return flaeche

class Eck:
    
    def __init__(self,seitenlaenge_eck):
        self.eckle = seitenlaenge_eck

    def __repr__(self):
        return "%s" % (self.eckle)
    
    def rechneSchnittlaenge(self):
        schnittlaenge=float(self.eckle)*5
        return schnittlaenge
    
    def rechneFlaeche(self):
        tan=1.37638
        flaeche=((1.25*float(self.eckle))*float(self.eckle))*float(tan)
        return flaeche


def menue():
    print "_________________________________\n"
    print "         Zeichnungstool          "
    print "_________________________________\n"

    print "0   --> Neue Zeichnung"
    print "1   --> Neue Figur anlegen"
    print "2   --> Schnittlaenge berechnen"
    print "3   --> Flaeche berechnen"
    print "4   --> Zeichnung laden"
    print "5   --> Zeichnung speichern"
    print "ESC --> Programm beenden"

   

esc = '\x1b'
menue()
z1=Zeichnung()

ch = msvcrt.getch()
while ch != esc:

        if (ch=='0'):
            print "------------------------------"
            print "--  Neue Zeichnung anlegen  --"
            print "------------------------------"
            print "Wollen Sie alle Zeichnungen loeschen?"
            frage=raw_input("y/n: ")
            if (frage=='n'):
                print "Zeichnung(en) wird(werden) nicht geloescht"
                print "Zurueck zum Hauptmenu"
                menue()
            else:
                print "Zeichnung(en) wird(werden)geloescht"
                z1.loeschen()
           
                menue()
                
        elif (ch=='1'):
            print "------------------------------"
            print "--  Neue Figur(en) anlegen  --"
            print "------------------------------"
            
            print "1  -->  Kreis"
            print "2  -->  Rechteck"
            print "3  -->  5eck"
            eingabe=raw_input()
            if(eingabe=='1'):
                x_center=raw_input("X-Position: ")
                y_center=raw_input("Y-Position: ")
                radius=raw_input("Radius (cm): ")
                kreis=Kreis(x_center,y_center,radius)
                
                z1.hinzufuegen_figur(kreis)
                
            elif(eingabe=='2'): 
                seitenlaenge_alpha=raw_input("Seitenlaenge a (cm): ")
                seitenlaenge_beta=raw_input("Seitenlaenge b (cm): ")
                recht=Rechteck(seitenlaenge_alpha,seitenlaenge_beta)
                
                z1.hinzufuegen_figur(recht)
                                 
            elif(eingabe=='3'):
                seitenlaenge_eck=raw_input("Seitenlaenge(cm): ")
                eck=Eck(seitenlaenge_eck)
                
                z1.hinzufuegen_figur(eck)
        
            menue()
        elif (ch=='2'):
            print "--------------------------------"
            print "---Schnittlaenge aller Figuren--"
            print "--------------------------------"
            z1.rechneSchnittlaenge()
            menue()
        elif (ch=='3'):
            print "--------------------------------"
            print "-------Flaechenberechnung-------"
            print "--------------------------------"
            z1.rechneFlaeche()
            menue()
        elif (ch=='4'):
             print "Programm wurde geladen"
             z1.laden()
             menue()
        elif (ch=='5'):
            z1.speichern()
            print "Programm gespeichert"
            menue()

        ch = msvcrt.getch()
wenn ich das Programm lade, will ich die eingegeben Werte wieder benutzen, d.h. die Funktionen sollen die Werte kennen!
wie kann ich das realisieren?
vielen dank im vorraus!

Verfasst: Montag 6. Februar 2006, 11:36
von jens
Das kannst du mit object serialization machen: http://www.python.org/doc/current/lib/m ... ickle.html

Oder mach eine INI Datei mit: http://www.python.org/doc/current/lib/m ... arser.html

Verfasst: Montag 13. Februar 2006, 15:31
von Alpha-Phonix
hab mein code oben aktualisiert...
ich kriegs einfach net hin, könnt ihr mir auf mein beispiel genau anweisungen geben, wie ich des mim laden machen kann??
das prog muss jetzt dann funzen und ich kriegs halt net gebacken!
vielen dank!

Verfasst: Montag 13. Februar 2006, 16:22
von pr0stAta
Hier ein kleins Beispiel für ConfigObj
Hier der Link:
http://www.voidspace.org.uk/cgi-bin/voi ... nfigobj.py

Code: Alles auswählen

self.config = ConfigObj("DEINE_INI_FILE")
#Setzen der Werte
if not self.config.has_key ('Window'):
  self.config['Window'] = {}
  self.config['Window']['posx']  = 100
  self.config['Window']['posy']  = 100
  self.config['Window']['sizex'] = 350
  self.config['Window']['sizey'] = 550
  self.config['Extensions'] = {}
  self.config['Extensions']['excel']    = 'xls'
  self.config['Extensions']['cvs']      = 'cvs'
Nur ein kleines Beispiel. Du kannst soviele Dictionaries erzeugen wie du magst. Diese werden dann in der INI so aussehen:

Code: Alles auswählen

[Window]
  posx = 100
  posy = 100
  sizex = 427
  sizey = 604
[Extensions]
  excel = xls
  cvs = cvs
Die Methode die den oben gezeigten Code ausführt sollte beim Start des Programms und beim Beenden aufgerufen werden. Dann hast du immer aktuelle Daten. Einsetzen kannst du einfach mit:

Code: Alles auswählen

self.config['Window']['posx']
Hoffe ich hab jetzt nichts wichtiges vergessen. Habs mir aus dem Code zusammengesucht.
gruss