Umrechnungsfehler

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
pysbf26
User
Beiträge: 7
Registriert: Samstag 15. Oktober 2011, 14:47

Hallo,

ich habe ein Programm geschrieben, was EUR in USD und umgekehrt berechnen soll.

Nun stimmt m.E. aber die Umrechnung nicht. Was genau habe ich bei der Berechnung übersehen oder falsch gemacht?
Er rechnet ja auch USD und EUR zusammen und gibt dann auch ein Betrag aus. Aber ich mein halt das ich bei der Berechnung was falsch gemacht habe.
Bitte um Hilfe.

Code: Alles auswählen

class Geld(object): 
    __wechselkurs={'USD':0.85,                                      
                   'EUR':1.00}         

    def __init__(self, waehrung, betrag):                         
        self.waehrung=waehrung
        self.betrag= round(betrag,2)
    def getEuro(self):                                              
        if self.waehrung == self.__wechselkurs['EUR']:
            return self.betrag*self.__wechselkurs[self.waehrung]
        else:
            return self.betrag*self.wechselkurs['USD']

    def getUSD (self):
        if self.waehrung == self.__wechselkurs['USD']:
            return self.betrag*self.__wechselkurs['EUR']
        else:
            return self.betrag/self.__wechselkurs[self.waehrung]

    def __add__ (self, geld):                                                             
        summe = Geld (self.waehrung, betrag=0)
        if self.waehrung == self.__wechselkurs['EUR']:
            summe.betrag = self.getEuro() + geld.getEuro()
            return summe
        else:
            summe.betrag = self.getUSD() + geld.getUSD()
            return summe
        faktor= self.__wechselkurs[self.waehrung]
        summe = Geld (self.waehrung, (a+b)*faktor )
        return summe
anogayales
User
Beiträge: 456
Registriert: Mittwoch 15. April 2009, 14:11

Um die Suche nach dem Fehler zu beschleunigen, solltest du uns mal ein Beispiel zeigen, bei dem es schief geht. Ich seh hier ein paar potenzielle Fehlerquellen. Am besten zeigst du mal so ein Beispiel her.

Grüße,
anogayales
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

pysbf26 hat geschrieben:

Code: Alles auswählen

class Geld(object): 
    __wechselkurs={'USD':0.85,                                      
                   'EUR':1.00}         

    def __init__(self, waehrung, betrag):                         
        self.waehrung=waehrung
        self.betrag= round(betrag,2)
    def getEuro(self):                                              
        if self.waehrung == self.__wechselkurs['EUR']:
    [...]
Dort fragst du ab, ob self.waehrung gleich 1.0 ist und das ist sicher nicht das was du möchtest.

Noch eine Anmerkung: Die doppelten führenden Unterstriche sind typischerweise nicht erforderlich. Um etwas als privat zu kennzeichnen reicht ein Unterstrich.
BlackJack

Ergänzend zu /me: Diese ständigen ``if``-Unterscheidungen sind auch sehr schlechter Stil. So etwas lässt sich nur mühselig und fehlerträchtig erweitern.
axon
User
Beiträge: 15
Registriert: Donnerstag 23. Juni 2011, 19:21

pysbf26 hat geschrieben:

Code: Alles auswählen

class Geld(object):
    __wechselkurs={'USD':0.85,                                      
                   'EUR':1.00} 


    def getEuro(self):                                              
        if self.waehrung == self.__wechselkurs['EUR']:
            return self.betrag*self.__wechselkurs[self.waehrung]
        
An dieser Stelle verstehe ich folgendes nicht:
self.waehrung ist logischerweise in der if Abfrage eine Zahl.
Dann müsste es doch in der darauf folgenden Zeile einfach mit dem self.__wechselkurs['EUR'] mulipliziert werden und nicht mit einem Verweis den ich nicht interpretieren kann. Da müsste doch so etwas ausgegeben werden:

Code: Alles auswählen

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 1
analog für getUS.
Warum wird am Ende addiert?
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

axon hat geschrieben:self.waehrung ist logischerweise in der if Abfrage eine Zahl.
Warum? Gut, du hast bisher nirgendwo gezeigt, wie die Klasse überhaupt verwendet wird, aber ich hätte dort eher den String 'USD' oder 'EUR' erwartet.

Vielleicht zeigst du mal wie du die Klasse verwendest, was du als Ergebnis erwartest und was tatsächlich herauskommt.
axon
User
Beiträge: 15
Registriert: Donnerstag 23. Juni 2011, 19:21

@/me: also self.waehrung wird doch einmal in der if Abfrage mit einer Zahl verglichen ...
aber ich habe auch noch nicht verstanden worauf pysbf26 hinauswill.

Ein Beispiel wäre tatsächlich gut ...
pysbf26
User
Beiträge: 7
Registriert: Samstag 15. Oktober 2011, 14:47

Hallo,

ich hab den Code geändert und einfach die if Abfragen weggelassen. Jetzt funktioniert es auch. Denk mal da lag der Fehler auch drin.
Danke nochmal.
Antworten