Seite 1 von 1
Newbie bittet um Hilfe
Verfasst: Montag 5. Mai 2014, 17:11
von Julian K
Hallo Forum,
ich fange gerade an mich mit Python zu beschäftigen. Find meinen Fehler gerade nicht. Könnt ihr mir bitte weiterhelfen?
Code: Alles auswählen
Menu = ["Bond", "Stock", "Future", "Option"]
Preis = [1, 2, 3, 4]
Auswahl = input("Welche Assetklasse wollen sie kaufen?")
if Auswahl == Menu[0]:
print Preis[0]
if Auswahl == Menu[1]:
print Preis[1]
if Auswahl == Menu[2]:
print Preis[2]
if Auswahl == Menu[3]:
print Preis[3] " ""Euro"
Re: Newbie bittet um Hilfe
Verfasst: Montag 5. Mai 2014, 17:42
von EyDu
Hallo und willkommen im Forum!
"Funktioniert nicht" ist eine äußerst ungenügende Fehlerbeschreibung. Was erwartest du als Ergebnis, was kommt heraus und was für eine Fehlermeldung, inklusive des gesamten Traceback, gibt es?
Das Forum hat übrigens Code-Tags (ein Button über dem Eingabefeld für Text), damit wird dein Code hier auch vernünftig Dargestellt.
Re: Newbie bittet um Hilfe
Verfasst: Montag 5. Mai 2014, 18:00
von mutetella
@Julian K
Ohne die Fehlermeldung kann man nur raten, was Dein Problem ist... Ich nehme mal an, Du verwendest Python 2, da Du das ``print`` statement und nicht die `print()` Funktion verwendest. Wenn dem so ist nehme ich weiter an, dass Du nach der Eingabe einen `NameError` bekommst. Innerhalb Python 2 gibt es neben `input()`, das alles, das Du eingibst wie eine Anweisung behandelt noch `raw_input()`, das alles, das Du eingibst als String zurückgibt. Verwende unter Python 2 in jedem Fall `raw_input()`, da ein böser Bube über `input()` Code auf Deinem Rechner ausführen kann.
Mit `raw_input()` wird Dein Programm funktionieren. Statt den vielen ``if``'s würde ich aber entweder
Code: Alles auswählen
if selection == asset[0]:
print price[0]
elif selection == asset[1]:
print price[1]
elif selection == asset[2]:
print price[2]
elif selection == asset[3]:
print price[3]
verwenden, da in diesem Fall nach einem Treffer die anderen Abfragen nicht mehr durchgeführt werden. Noch besser allerdings fände ich es, wenn Du den index nicht erst abfrägst um ihn dann wieder abzufragen, sondern gleich verwendest:
Code: Alles auswählen
assets = ['Bond', 'Stock', 'Future', 'Option']
prices = [1, 2, 3, 4]
def get_price():
selection = raw_input('Welche Assetklasse wollen Sie kaufen? ')
try:
return prices[assets.index(selection)]
except ValueError:
return '{!r} ist nicht enthalten!'.format(selection)
Code: Alles auswählen
>>> get_price()
Welche Assetklasse wollen Sie kaufen? Bond
1
>>> get_price()
Welche Assetklasse wollen Sie kaufen? bla
'bla' ist nicht enthalten!
Aber noch besser fände ich es, wenn Du statt zweier Listen für zusammengehörende Daten eine andere Datenstruktur verwenden würdest. Wenn es nur um die Abfrage von Preisen geht, zwingt sich mir ein Dictionary auf.
mutetella
Re: Newbie bittet um Hilfe
Verfasst: Montag 5. Mai 2014, 18:18
von Hyperion
Ich habe die Frage mal ins "richtige" Forum verschoben
@Julian K: Das Showcase-Forum ist eher für fertige und gerne auch komplexere Programme gedacht; Du hast eher eine allgemeine Frage, auch wenn Du uns darin Source-Code postest. Von daher passt Dein Beitrag besser hier rein
Ergänzend zu mutetella: Wenn die Optionen in dieser Reihenfolge bleiben, kann man auf die ``prices`` Liste auch gleich verzichten. Der richtige Index lässt sich ja einfach errechnen - "Auswahl - 1".
Generell sollten zusammengehörige Daten auch in *einer* Struktur vorgehalten werden.
Für die Namensgebung verweise ich mal auf
PEP8; Bezeichner sollten eher klein geschrieben werden, also ``auswahl`` statt ``Auswahl`` usw.
Re: Newbie bittet um Hilfe
Verfasst: Montag 5. Mai 2014, 19:05
von Julian K
@ Eydu: Deine Kritik und Hinweise sind berechtigt. Beim nächsten Posting werde ich das alles berücksichtigen.
@ mutella: Danke für deine Lösung, konstruktiven Verbesserungsvorschläge und schnelle Antwort.
@ Hyperion: Alright. Sry, beim nächsten Mal schreibe ich in das richtige Forum. Auch dir vielen Dank für deine Hilfeleistung. Ich setzte die ganzen Vorschläge mal um. Das ist eine gute Übung für mich.
Ich habe mich jetzt nur prägnant auf eure Postings bezogen, da ich außer Hyperions keine mehr direkt vor mir sehen kann. Das liegt vermutlich daran, dass mein Thread verschoben wurde. Also bitte meine Antwort nicht als unhöflich verstehen.
Vielen Dank!
Julian