Rätsel mit Dictionaries und for schleife

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.
eimco
User
Beiträge: 9
Registriert: Mittwoch 13. März 2013, 20:13

hallo,

Ich versuche ein "Rätsel" mit Python und den Dictionaries zu schreiben, allerdings bin ich neu dabei und komme mit der aufgabe überhaupt nicht klar.
ich weiß bisher,ansatzweise, wie listen,dictionaries,for-schleifen,if elif else geht..

ich hab mal "angefangen", aber ich weiß gar nicht wie ich an das problmen rantretten soll..:
-----------------------------

Code: Alles auswählen

!/usr/bin/python

dE = {"blau":"blue","gelb":"yellow","rot":"red"}

frage1 = input("Blau auf englisch?")
---------------------------------
Es soll also gefragt werden "was heißt blau auf englisch" gibt man die richtige antwort soll "richtig" printed werden und ein punkt dazu addiert werden. ist die antwort falsch, soll "falsch" printed werden und kein punkt addiert werden.
am ende soll der punktestand aufgeführt werden.

danke!
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Wenn du Python2 benutzt, solltest du raw_input statt input verwenden. input erlaubt bei Python2 die Ausführung beliebigen Codes (z.b. das Löschen von Dateien) und stellt damit ein Sicherheitsrisiko dar. Der name `frage1` ist unpassend, weil ja keine Frage, sondern die Antwort auf die Frage zurückgegeben wird. Du sagst, dass du ansatzweise mit Dictionaries vertraut bist. Weißt du denn auch, wie man über Dictionaries iterieren kann?
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

Ist vielleicht nicht, was du suchst. Schau einmal, ob du mit dem Programm - Python 3.2 - etwas anfangen kannst:

Code: Alles auswählen

vokabeln = {"blau":"blue",
            "gelb":"yellow",
            "rot":"red"}

for key in vokabeln.keys():

    frage = "{} auf Englisch? ".format(key.capitalize())

    antwort = input(frage)

    if antwort != vokabeln[key]:

        print("Das war falsch!")

    else:

        print("Das war richtig!")

    print("{} heißt auf Englisch {}.".format(key.capitalize(), vokabeln[key]))
Die Ausgabe in meiner Konsole sieht so aus:

Code: Alles auswählen

>>> 
Rot auf Englisch? red
Das war richtig!
Rot heißt auf Englisch red.
Gelb auf Englisch? yellow
Das war richtig!
Gelb heißt auf Englisch yellow.
Blau auf Englisch? bluh
Das war falsch!
Blau heißt auf Englisch blue.
>>> 
BlackJack

@eimco: Arbeite am besten mal ein Grundlagentutorial durch. Für Anfänger geeignet wäre zum Beispiel Learn Python The Hard Way. Das Tutorial in der Python-Dokumentation sollte man IMHO auch mal durchgearbeitet haben.
eimco
User
Beiträge: 9
Registriert: Mittwoch 13. März 2013, 20:13

@pixewakb danke sehr! das hilft mir sehr weiter :')

@BalckJack ja, ich muss das nur das machen und komm nicht vorran..
eimco
User
Beiträge: 9
Registriert: Mittwoch 13. März 2013, 20:13

ok soweit sogut,

ich hab das problem dass ich die frage (als eingabe) nicht gescheit mit dem dict verbunden bekomme... jemand ne idee?
eimco
User
Beiträge: 9
Registriert: Mittwoch 13. März 2013, 20:13

@derdon ja, das mit dem itieren hab ich jetzt raus bekommen. Aber wie bekomm das in die Frage eingebaut?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

@eimco das macht der Code doch schon.

@pixewakb: 100 Hausaufgaben Punkte fuer dich :roll:

Code: Alles auswählen

for key in vokabeln:
tut es uebrigens schon.
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

@cofi: Danke dir! Werde es morgen in der Schule dann einzutauschen versuchen :P

Den Hinweis mit "tut es übrigens schon" versuche ich mal zu beachten, aber ganz gespeichert habe ich es leider noch nicht. :? Ich arbeite daran.
eimco
User
Beiträge: 9
Registriert: Mittwoch 13. März 2013, 20:13

@cofi ich hab aber nur 2.4, jedenfalls funktioniert die frage so bei mir nicht.

wie schreib ich ne frage die auf die liste zugreift?

Code: Alles auswählen

frage=input(vokabeln.iterkey())
bekomm ich ne fehlermeldung 'dict' object has no attribute 'iterkey'
aber ist der key nicht immer der vordere eintrag beim dict als im fall {"rot":"red"} eben rot und value das red.?
BlackJack

@eimco: Geh doch mal von Deinem konkreten Problem weg und arbeite das Tutorial durch, dass ich verlinkt habe. Ein Blick in die Python-Dokumentation schadet auch nicht.
eimco
User
Beiträge: 9
Registriert: Mittwoch 13. März 2013, 20:13

@blackjack ja hab mir das schon angeschaut aber komm damit nicht so ganz weiter. doch doch ich "muss" mich eigentlich mit dem problem beschäftigen :'D
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

eimco hat geschrieben:@blackjack ja hab mir das schon angeschaut aber komm damit nicht so ganz weiter. doch doch ich "muss" mich eigentlich mit dem problem beschäftigen :'D
Nein, du musst dich erstmal mit den Grundlagen beschäftigen um das Problem überhaupt lösen zu können. Wir könnten dir jetzt die vollständige Lösung zeigen, aber dann hast du nichts gelernt und versuchst in einer Woche erneut dir die Lösung zu erbetteln.
Das Leben ist wie ein Tennisball.
Sirius3
User
Beiträge: 17753
Registriert: Sonntag 21. Oktober 2012, 17:20

@eimco: Hausaufgaben fallen ja nicht einfach so vom Himmel. Du hast im Unterricht bestimmt schon alles über Dictionaries gelernt, was zum Lösen der Aufgabe nötig ist.
Falls Du konkret was nicht verstehst, dann Frag hier oder Deinen Lehrer.
Aber nicht in der Art, wie löse ich die Aufgabe, sondern ich mache dies, erwarte das, bekomme aber etwas anderes und ich versteh nicht warum.
eimco
User
Beiträge: 9
Registriert: Mittwoch 13. März 2013, 20:13

ok alles klar,

bin so weit gekommen :

Code: Alles auswählen

#!/usr/bin/python
vokabeln= {"rot":"red","blau":"blue","gelb":"yellow"}

for frage in vokabeln:
 print "Wie heisst ", frage, " auf deutsch?"
antwort = raw_input()
if vokabeln[frage] == antwort:

 print "richtig"
else:
 print "falsch"
aber irgendwie funktioniert es nicht richtig, beim input kommt keine frage usw. kann mir jemand weiter helfen?
BlackJack

@eimco: Zum Fragen kommt das ja gar nicht weil der Compiler sich vorher schon wegen der fehlenden Einrückung beschwert.
eimco
User
Beiträge: 9
Registriert: Mittwoch 13. März 2013, 20:13

ich hab das schon eingerückt, das format hat sich irgendwie geändert beim kopieren:

Code: Alles auswählen

#!/usr/bin/python
vokabeln= {"rot":"red","blau":"blue","gelb":"yellow"}
for frage in vokabeln:
    print "Wie heisst ", frage, " auf deutsch?"
    antwort = raw_input()
if vokabeln[frage] == antwort:

      print "richtig"
else:
         print "falsch"
BlackJack

@eimco: Dann erkläre jetzt mal was dieser Code bei der Abarbeitung Zeile für Zeile tut, also Deiner Meinung nach. Wirklich den kompletten Programmablauf. Wann ist welcher Name an welchen Wert gebunden, wann wird was genau ausgegeben und wann wird was genau eingegeben und was passiert damit.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Da ist wohl wieder ein Einrückungs-Fehler beim Kopieren entstanden. Warum haben eigentlich so viele hier kaputte Zwischenablagen, die beim Kopieren die Einrückung zerstören und manchmal auch noch zusätzliche Bugs einbauen? Gut dass ich mit meinem stabilen Debian auf eine alte, bewährte Version von xclip setze und daher nichts zu befürchten habe.
eimco
User
Beiträge: 9
Registriert: Mittwoch 13. März 2013, 20:13

ja ich hab eben diese liste in zeile 1. mit for in wird auf die einträge in der liste zugegrifen. bei dem print sollte eigentlich eingezeigt werden "was heißt", dann soll der key(vor dem :) angezeigt werden, und dann eben wieder ein text.
die antwort soll der imput sein den man dann eben gibt.
die if schleife soll angeben, dass wenn die antwort gleich (==) dem input ist-> richtig , ansonsten falsch.

wenn ich aber zb 2 von 3 nur richtig hab, kommt trotzdem richtig.

es soll aber für jede frage richtig angezeigt werden
Antworten