Hallo erstmal. Ich soll über die Ferien ein Programm in Python (mit GUI) schreiben, dass Euro in DM sowie DM in Euro umrechnet. (Habe kaum Vorkenntnisse und mich die letzte Woche in das Thema eingearbeitet.) Ich habe das Programm soweit geschrieben dass ich es in der Konsole benutzen kann, jedoch habe ich beim GUI Probleme, da ich nicht weiß wie ich es integrieren soll.
Hier ist mein Code (Ich hoffe er ist nicht allzu schrecklich):
print("Geben Sie an, ob Sie Euro in DM oder DM in Euro umtauschen möchten.")
print("Enter 'q' to quit.")
while True:
currency = input("\nDM in Euro oder Euro in DM: ")
if currency == 'q':
break
if currency == 'DM in Euro':
amount = float(input("\nBitte geben Sie an, wie viel Geld Sie umtauschen möchten: "))
dmtoeuro = amount / 2 # Hier sieht man wie die Rechnung funktioniert
print(str(amount) + " DM sind ungefähr " + str(dmtoeuro) + " €!")
break
if currency == 'Euro in DM':
money = float(input("\nBitte geben Sie an, wie viel Geld Sie umtauschen möchten: "))
eurotodm = money * 2
print(str(money) + " € sind ungefähr " + str(eurotodm) + " DM!")
break
Währungs Rechner mit GUI
Bitte code-tags benutzen. Im vollstaendigen Editor der </>-Knopf.
Dein bestehendens Programm ist fuer die Aufgabe ziemlich wertlos, denn ausser einer einfachen Multiplikation oder Divison passiert da ja nur Ein- und Ausgabe. Und genau die ersetzt du durch deine GUI. Hast du dir schon ueberlegt, wie die GUI aussehen soll? Oder gibt es da vorgaben?
Dein bestehendens Programm ist fuer die Aufgabe ziemlich wertlos, denn ausser einer einfachen Multiplikation oder Divison passiert da ja nur Ein- und Ausgabe. Und genau die ersetzt du durch deine GUI. Hast du dir schon ueberlegt, wie die GUI aussehen soll? Oder gibt es da vorgaben?
Heutige Schüler kennen doch die Deutsche Mark nur noch aus Erzählungen ihrer Großeltern, sollte man sich da als Lehrer nicht solangsam neue Aufgaben überlegen?
Der Umrechnungskurs ist 1,95583 und sollte als Konstante am Anfang des Programms stehen.
Strings stückelt man nicht mit + zusammen, sondern benutzt Stringformatierung, da kann man dann gleich auf 2 Nachkommastellen runden.
Wenn sowieso alle drei if-Blöcke mit `break` enden, solltest Du eine Funktion schreiben, die so lange nachfragt, bis eine gültige Eingabe gemacht wurde.
Die Blöcke zum Umrechnen von € in DM und von DM in € sind fast gleich. Schreibe eine Funktion, die allgemein eine Umrechnung macht und rufe diese mit den passenden Parametern auf.
Auch wenn es nicht gefordert ist, erweitere das Programm um die Umrechnung von einer Liste an Währungen in eine andere. Wie sähe dafür eine passende Datenstruktur aus?
Das Schreiben von Funktionen solltest Du sowieso üben, bevor Du Dich an GUI-Programmierung machst. Daneben solltest Du das Schreiben von Klassen lernen.
Der Umrechnungskurs ist 1,95583 und sollte als Konstante am Anfang des Programms stehen.
Strings stückelt man nicht mit + zusammen, sondern benutzt Stringformatierung, da kann man dann gleich auf 2 Nachkommastellen runden.
Wenn sowieso alle drei if-Blöcke mit `break` enden, solltest Du eine Funktion schreiben, die so lange nachfragt, bis eine gültige Eingabe gemacht wurde.
Die Blöcke zum Umrechnen von € in DM und von DM in € sind fast gleich. Schreibe eine Funktion, die allgemein eine Umrechnung macht und rufe diese mit den passenden Parametern auf.
Auch wenn es nicht gefordert ist, erweitere das Programm um die Umrechnung von einer Liste an Währungen in eine andere. Wie sähe dafür eine passende Datenstruktur aus?
Das Schreiben von Funktionen solltest Du sowieso üben, bevor Du Dich an GUI-Programmierung machst. Daneben solltest Du das Schreiben von Klassen lernen.
-
- User
- Beiträge: 3
- Registriert: Dienstag 9. Juli 2019, 10:32
@__deets__ , es gibt Anforderungen, und zwar soll:
-es eine Auswahl geben in welche Richtung die Umrechnung erfolgt
- es ein Feld für die Eingabe mit Währungssymbol geben
- es ein Feld für die Ausgabe geben
Wie gesagt ich bin seit einer Woche am Thema Python dran und hab noch keine Vorstellung der Möglichkeiten. Etwas relativ einfaches und für Dummies wie mich verständliches wäre super.
-es eine Auswahl geben in welche Richtung die Umrechnung erfolgt
- es ein Feld für die Eingabe mit Währungssymbol geben
- es ein Feld für die Ausgabe geben
Wie gesagt ich bin seit einer Woche am Thema Python dran und hab noch keine Vorstellung der Möglichkeiten. Etwas relativ einfaches und für Dummies wie mich verständliches wäre super.

Und hast du dir schonmal Tutorials zum Thema tkinter angeschaut? Und welche der Widgets die Tkinter anbietet kommen denn fuer deine Aufgaben in Frage?
Wir werden dir hier keine schluesselfertige Loesung liefern. Das Thema ist ja auch nicht so besonders originell, selbst hier im Forum finden sich da garantiert schon Diskussionen zu.
Wir werden dir hier keine schluesselfertige Loesung liefern. Das Thema ist ja auch nicht so besonders originell, selbst hier im Forum finden sich da garantiert schon Diskussionen zu.
Hat zwar keine GUI und löst somit nicht die Aufgabe, aber hier mal ein Beispiel, welches die Daten direkt von der Europäischen Zentralbank bezieht:
Es gibt leichte Abweichungen, da die EZB ihre Daten nur einmal täglich aktualisiert, sodass die Wechselkurse nicht immer auf dem neuesten Stand sind. Für mehr Genauigkeit gibt es kommerzielle APIs, die in vielen Fällen eine Testphase zum Ausprobieren anbieten, aber man muss sich dort anmelden. Mein Beispiel kommt komplett ohne Anmeldung oder API Key aus.
Ansonsten habe ich auf PyPI noch ein Projekt gefunden, das wohl einen ähnlichen Ansatz verfolgt: https://pypi.org/project/forex-python/
Laut dessen Quelltext kommen die Daten auch von der EZB, allerdings über eine andere Website als meine Quelle.
Code: Alles auswählen
#!/usr/bin/env python3
from urllib.request import urlopen
from xml.etree import ElementTree as etree
EUROFXREF_URL = 'https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml'
XPATH_PATTERN = './/*[@currency]'
class CurrencyConverter:
def __init__(self, url=EUROFXREF_URL, pattern=XPATH_PATTERN):
self.url = url
self.pattern = pattern
self.rates = {}
def update_rates(self):
with urlopen(self.url) as stream:
tree = etree.parse(stream)
self.rates.update(
(elem.get('currency'), elem.get('rate'))
for elem in tree.iterfind(self.pattern))
def get_rate(self, currency):
if not self.rates:
self.update_rates()
if currency not in self.rates:
raise ValueError(f'Unknown currency: {currency}')
return float(self.rates[currency])
def get_currencies(self):
if not self.rates:
self.update_rates()
currencies = ['EUR']
currencies.extend(self.rates.keys())
return sorted(currencies)
def convert(self, amount, from_currency, to_currency):
if from_currency != 'EUR':
# All rates refer to Euro
amount /= self.get_rate(from_currency)
return amount * self.get_rate(to_currency)
def euro_to_currency(self, amount, currency):
return self.convert(amount, 'EUR', currency)
def currency_to_euro(self, amount, currency):
return self.convert(amount, currency, 'EUR')
def main():
converter = CurrencyConverter()
currencies = converter.get_currencies()
print('Available currencies:', ', '.join(currencies), sep='\n', end='\n\n')
dollar = converter.get_rate('USD')
yen = converter.get_rate('JPY')
print(f'1 EUR equals {dollar:.2f} US Dollar or {yen:.2f} Yen')
dollar_to_yen = converter.convert(42, 'USD', 'JPY')
print(f'42 US Dollar = {dollar_to_yen:.2f} Yen')
euro_to_yuan = converter.euro_to_currency(10, 'CNY')
print(f'10 Euro = {euro_to_yuan:.2f} Chinese Yuan')
if __name__ == '__main__':
main()
Ansonsten habe ich auf PyPI noch ein Projekt gefunden, das wohl einen ähnlichen Ansatz verfolgt: https://pypi.org/project/forex-python/
Laut dessen Quelltext kommen die Daten auch von der EZB, allerdings über eine andere Website als meine Quelle.
Und hier noch mit der kleinen Änderung, dass die Kurse direkt als Float in die Datenstruktur gegeben werden: https://gist.github.com/seblin/54e6e061 ... 26ed1bb6c9
Das Ganze nochmal überarbeitet und nun mit einem kleinen Parser, falls man Strings für die Konvertierung übergeben möchte. Es geht z.B. "50 EUR -> USD", um das Ergebnis in US Dollar zu erhalten. Das bau ich vielleicht noch etwas aus. Dann aber mit Links in einem eigenen Thread dazu. 
https://gist.github.com/seblin/54e6e061 ... 26ed1bb6c9

https://gist.github.com/seblin/54e6e061 ... 26ed1bb6c9
-
- User
- Beiträge: 3
- Registriert: Dienstag 9. Juli 2019, 10:32
Liebe User,
vielen Dank für eure Hilfe. Ich habe jetzt die Aufgabe gelöst. Ich weiß eure Hilfe wirklich zu schätzen.
vielen Dank für eure Hilfe. Ich habe jetzt die Aufgabe gelöst. Ich weiß eure Hilfe wirklich zu schätzen.