Random mit dict ? wie funktioniert das ?

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
tk941
User
Beiträge: 5
Registriert: Montag 13. Dezember 2010, 00:16

Guten Abend Python-Community ;),

ich bin neu hier im Forum! und daher noch nicht so vertraut mit eueren Regeln, hoffe daher
das ich hier richtig bin, falls nicht nehmt es mir bitte nicht übel :oops:

zu meiner Frage/Problem, ich schreibe gerade ein kleines Programm zum Vokabeltraining +Woerterbuch,
das hinzufuuegen neuer Vokabeln und die Woerterbuchabfrage gehen schon, nun haenge ich aber bei der
Randomabfrage fest.

Hier mal mein Code:

Code: Alles auswählen

#!/usr/bin/env python3.1
# -*- coding: utf-8 -*-

import random

while True:
	print("\n\t\t********************************")
	print("\t\t*Willkommen zum Vokabelprogramm*")
	print("\t\t********************************")

	print("\t\t-1- Neue Vokabel")
	print("\t\t-2- Vokabelabfrage")
	print("\t\t-3- Woerterbuch")
	print("\t\t-0- Programm beenden")

	while True:
		eingabe=int(input("\n\t\tGeben sie ihre Auswahlan: "))
		if eingabe == 1:
			f=open("vokabeln.txt", "a+")
			while True:
				woerter=str(input("\t\tGeben sie die Vokabeln ein: "))
				if woerter =="0":
					break
				else:
				f.write(woerter+"\n")    

		elif eingabe == 2:
			pass

		elif eingabe == 3:
			woerter={}
			f=open("vokabeln.txt", "r")
			for line in f:
				zuordnung=line.strip()
				zuordnung=line.split(" ")
			woerter[zuordnung[0]]=zuordnung[1]
			f.close()
			while True:
				wort=str(input("\t\tGeben sie  das zu suchende Wort ein: "))
				if wort == "0":
					break
				else:
					print("\t\tDas englische Wort lautet:", woerter[wort])
		elif eingabe == 0:
			break
	
	break
Ich habe keine Ahnung wie ich das bewegstelligen soll =(, ich weis zwar es gibt

Code: Alles auswählen

import random

doch irgendwie komme ich damit nicht weiter...
Es waehre super wenn mir einer vllt helfen koennte die Randomfunktion einzubauen, da ich lange mit dem
ZUg fahre um zur Schule zu kommen, waehre das Ideal um Vokabeln zu lernen =).

Hoffe mir kann jemand helfen ;)
MfG
tk941
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

random.choice sucht ein zufälliges Element aus einem Iterable raus, mittels ``random.choice(list(woerter.keys()))`` bekommst du einen Zufälligen Schlüssel aus deinem Dict.

Übrigens, wir haben hier im Forum Python-Tags, die Highlighten Code dann auch ordentlich.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
tk941
User
Beiträge: 5
Registriert: Montag 13. Dezember 2010, 00:16

Hallo Leonidas ;),

sorry, habe mich falsch ausgedrückt =(, die

Code: Alles auswählen

random.choice(list(woerter.keys())) 
oder so müsste das ja bei mir aussehen, oder?

Code: Alles auswählen

print(random.choice(list(woerter.keys())) 
Methode kenne ich schon =), mein Problem ist, das ich es so machen möchte, das
wenn ich einen Random Eintrag bekomme, ich das Englische Wort eingeben kann und er dann
prüft ob es das richtige ist.

Gibt es da eine möglichkeit für ? Hoffe nimmst es mir nicht übel ;), wahr gestern Abend recht kaputt xD, da
passieren Fehler leider mal :oops:

MfG
tk941
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

Code: Alles auswählen

for v in random.sample(woerter.keys(), len(woerter)):
    antwort = raw_input()
    if antwort == woerter[v]:
        print "Richtig"
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Und um es etwas einfacher zu machen, kann man statt "keys" noch "items" benutzen.
Das Leben ist wie ein Tennisball.
tk941
User
Beiträge: 5
Registriert: Montag 13. Dezember 2010, 00:16

Abend ;),

@EyDu, nomnom

Leider funktioniert das nicht =(, er sagt mir mit

Code: Alles auswählen

raw_input()
das es nicht definiert sei.....habe es dann einfach mal auf gut Glück mit

Code: Alles auswählen

antwort= str(input("Geben sie ein: "))
versucht, doch da sagt mir der Interpreter:

Code: Alles auswählen

if antwort == woerter[v]:
KeyError: ('Hallo', 'hello\n') 
# Hallo & hello sind die Wörterbucheinträge ;)

Weis jemand wo das Problem ist? Wie funktionerte das denn damals mit Python2.5(7)? Wäre der Code vllt unter
Python3.1 funktionstüchtig?

Und schonmal ein großes Danke für die bisherige Hilfe :)

MfG
tk941
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Wenn Du Python 3.x verwendest, dann nimm "input()". Welche Version nutzt Du denn genau? Falls noch 3.0.x, wechsel mal lieber auf 3.1.x.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
tk941
User
Beiträge: 5
Registriert: Montag 13. Dezember 2010, 00:16

Abend =),

man ihr seit ja echt flott beim benatworten der Fragen;) finde ich klasse!

Ich benutze Python 3.1.3 :)

Werde mal mit input probieren.

MfG
tk941

EDIT: Leider kommt mit Input der selbe Fehler wie mit str(input...
also auch dieses Meldung von wegen
if antwort == woerter[v]:
KeyError: ('Hallo','hello\n')

MfG
tk941
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Geh nen Schritt zurueck und stell dir diese Fragen:
Wie ist dein Dictionary aufgebaut? Was sind die Schluessel? Welchen Typ hat `v`?
tk941
User
Beiträge: 5
Registriert: Montag 13. Dezember 2010, 00:16

Moin,

ich hoffe ich bin jetzt auf dem richtigen Dampfer, aber Dict sind doch nach Key : Value aufgebaut, oder ?
heist du kannst über Key auf value zugreifen, wobei ein Key nur einmal existieren darf, wärend Value
beliebig oft erstellt werden kann Beispiel :

Code: Alles auswählen

d = { '1':"Star Wars", '2':"Star Wars"}   geht, aber
e= {'1':"Star Wars", '1':"Star Trek"} geht nicht
damit liege ich doch richtig oder ?

Was du mit Schlüssel jetzt genau meinst weis ich nicht, hätteda auch wieder Key und Value gesagt, oer auf das
Programm bezogen ist antwort = value und ich möchte überprüfen ob z.B. Value "hello" mit Key"Hallo" ein Paar
bildet, und wenn ja das er richtig ausgibt und wenn nein falsch.

WIe meinst du welchen typ hat v ? lese ja strings ein, daher würde ich sagen müsste v doch auch ein string sein, , da Python das ja eigenständig zuordnet, oder? falls ich in richtig liege und v = value bedeuten soll.

Aber es klappt jetzt leider immer noch nicht =( ich bin jetzt schon soweit, das ich abfrage machen kann, nur leider sagt er mir jetzt immer falsch, egal was ich eingebe =(

Code: Alles auswählen

elif eingabe == 2:
			woerter = {}
			f=open("vokabeln.txt", "r")			
			for line in f:
				zuordnung=line.strip()
				zuordnung=line.split(":")
				woerter[zuordnung[0]]=zuordnung[1]
			f.close()
			while True:			
				print("\t\t"+random.choice(list(woerter.keys())))	
				for value in random.sample(woerter.keys(), len(woerter)):
					antwort= str(input("\t\tGeben sie ein: "))
					if antwort == "0":
						break
					elif antwort == woerter[value]:
						print("\t\tRichtig")
					else:
						print("\t\tFalsch")
So sieht das jetzt bei mir aus....
Wäre super, wenn jemand das Problem in den Begriff bekommt...ich bin leider anscheinden noch nicht so weit, wäre das kleine Programm führ meine Zugfahrten nicht so sinnvoll, würde ich es auch erstmal lassen xD

MfG
tk941
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

tk941 hat geschrieben:damit liege ich doch richtig oder ?
Nein. Der Interpreter ist dein Freund:

Code: Alles auswählen

In [2]: e= {'1':"Star Wars", '1':"Star Trek"}

In [3]: e
Out[3]: {'1': 'Star Trek'}
tk941 hat geschrieben:WIe meinst du welchen typ hat v ? lese ja strings ein, daher würde ich sagen müsste v doch auch ein string sein
Dann schau dir mal den Traceback an. Der erzaehlt mir naemlich, dass `v` ein Tupel ist.

Wenn du nicht lauffaehigen Code ablaedst machst du es evtl helfenden Personen jedenfalls reichlich schwer.
BlackJack

@tk941: Ein Blick in ein Wörterbuch verrät: Key → Schlüssel und Value → Wert.
Antworten