Vokabeltrainer

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Devec
User
Beiträge: 8
Registriert: Dienstag 1. August 2006, 12:19

Montag 28. August 2006, 21:35

ver 0.4.1


Code: Alles auswählen

try:
   howManyVok = input( 'wie viele vokabeln :' )
except NameError:
   print "Keine zahl eingegeben\n"
   off = raw_input('um zu beenden OK Druecken') 
   print off

dictonary = {'again': 'wieder', 'almost': ['fast', 'beinahe'], 'always':'immer', 'cake': 'Kuchen', 'free': ['Frei', 'umsonst', 'befreien'], 'hair': 'Haare', 'morning': 'Morgen', 'now': 'Jetzt', 'rush': ['Eile','Hetze','eilen'], 'map': 'Karte'}



while howManyVok != 0:
    rightanswer = dictonary.popitem()  
    answer = raw_input("'" + rightanswer[0] + "'Auf Deutsch:\n")
    if answer == rightanswer[1]:
        print "Richtig"
    else:
        print "falsch"
        print "richtig waere", rightanswer[1]
    howManyVok-=1

off = raw_input('um zu beenden OK Druecken') 
print off  

@sigma in war eine ganz schlchet idee ich hab das programm nach langen rumtüffteln mit in nicht mit in anstatt == hinbekomemn :\
Benutzeravatar
Craven
User
Beiträge: 223
Registriert: Dienstag 24. Januar 2006, 13:37

Montag 28. August 2006, 22:30

Hi Devec

Wenn das Dictionary leer wird, kommt ein KeyError

Code: Alles auswählen

import os, sys

try:
	howManyVok = input( 'wie viele vokabeln :' )
except NameError:
	print "Keine zahl eingegeben\n"
	off = raw_input('um zu beenden OK Druecken')
	print off

dictonary = {'again': ['wieder', 'nochmal'], 'almost': ['fast', 'beinahe'], 'always':'immer', 'cake': 'Kuchen', 'free': ['Frei', 'umsonst', 'befreien'], 'hair': 'Haare', 'morning': 'Morgen', 'now': 'Jetzt', 'rush': ['Eile','Hetze','eilen'], 'map': 'Karte'}



while howManyVok != 0:
	try:
		rightanswer = dictonary.popitem()
	except KeyError:
		print "\n", "empty!", "\n"
		break
	answer = raw_input("'" + rightanswer[0] + "'Auf Deutsch:\n")
	if answer == rightanswer[1]:
		print "Richtig"
	else:
		print "falsch"
		print "richtig waere", rightanswer[1]
	howManyVok-=1

off = raw_input('um zu beenden OK Druecken:   ')

if off == 'ok':
	print off
	os.sys.exit()
else:
	print "sry, so far u can ONLY exit ^^"
	os.sys.exit()
Jetzt nicht mehr :wink:
Ist nicht die eleganteste Lösung, aber was solls ^^

MfG,
Craven

edit: ausversehen ein tab zuviel ^^
[code]q = 'q = %s; print q %% repr(q)'; print q % repr(q) [/code]
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

Montag 28. August 2006, 22:52

oder...

Code: Alles auswählen

import os, sys

try:
    howManyVok = input( 'wie viele vokabeln :' )
except NameError:
    print "Keine zahl eingegeben\n"
    off = raw_input('um zu beenden OK Druecken')
    print off

dictonary = {'again': ['wieder', 'nochmal'], 'almost': ['fast', 'beinahe'], 'always':'immer', 'cake': 'Kuchen', 'free': ['Frei', 'umsonst', 'befreien'], 'hair': 'Haare', 'morning': 'Morgen', 'now': 'Jetzt', 'rush': ['Eile','Hetze','eilen'], 'map': 'Karte'}



while howManyVok != 0:
    if not len(dictonary) > 0:
        print "\nempty!\n"
        break
    rightanswer = dictonary.popitem()
    answer = raw_input("'" + rightanswer[0] + "'Auf Deutsch:\n")
    if answer == rightanswer[1]:
        print "Richtig"
    else:
        print "falsch"
        print "richtig waere", rightanswer[1]
    howManyVok-=1

off = raw_input('um zu beenden OK Druecken:   ')

if off == 'ok':
    print off
    os.sys.exit()
else:
    print "sry, so far u can ONLY exit ^^"
    os.sys.exit() 
Devec
User
Beiträge: 8
Registriert: Dienstag 1. August 2006, 12:19

Montag 28. August 2006, 23:08

thx ich werd mcih jetzt mal erst wider auf neue versoinen stürzen wenn ich noch bischen gebüffelt hab ^^
Benutzeravatar
Craven
User
Beiträge: 223
Registriert: Dienstag 24. Januar 2006, 13:37

Montag 28. August 2006, 23:11

Hi DatenMetzgerX

Was genau ist da der Vorteil gegenüber meinem, bzw macht das nen Unterschied :?:

MfG,
Craven
[code]q = 'q = %s; print q %% repr(q)'; print q % repr(q) [/code]
Benutzeravatar
Michael Schneider
User
Beiträge: 567
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Bremen
Kontaktdaten:

Dienstag 29. August 2006, 07:20

Craven hat geschrieben:Was genau ist da der Vorteil gegenüber meinem, bzw macht das nen Unterschied :?:
Hi Craven,

try-except ist die Narkosehammervariante und sollte als letztes verwendet werden. Mit der erschlägst Du vielleicht nicht unbedingt nur Deine Exception, sondern auch die von ihr abgeleiteten - und nachher fragt man sich: warum funktioniert das nicht und meldet nix mehr? In der Regel würde ich also eine Abfrage vorziehen.

Übrigens sollte eine einfache nonzero-Abfrage reichen:

Code: Alles auswählen

if dictionary:
    rightanswer = dictonary.popitem()
Grüße,
der Michel
Diese Nachricht zersört sich in 5 Sekunden selbst ...
BlackJack

Dienstag 29. August 2006, 20:17

Das ist aber Ansichtssache. In diesem Fall kann man davon ausgehen das es eine Ausnahme ist wenn das Dictionary leer ist, da kann man auch eine Ausnahme benutzen. Es wird ja auch nicht irgendeine Ausnahme behandelt, sondern die für diese Situation spezifische.
Nirven
User
Beiträge: 130
Registriert: Mittwoch 10. Mai 2006, 08:18
Wohnort: Bremerhaven

Dienstag 29. August 2006, 20:26

Mag in diesem speziellen Fall zutreffen. Aber in etwas komplexerem Code könnte ein keyError auch woanders herkommen. Allgemein ist also 'if dictionary' vorzuziehen, oder?

Hab mir auch schon Gedanken gemacht, ob ich an einer Stelle lieber eine Variable abfrage oder ein try benutze. Michael hat mich glaub ich davon überzeugt, try immer als letzte Methode zu benutzen, sonst gewöhn ich mir nur was "gefährliches" an.
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

Dienstag 29. August 2006, 20:32

so ähnlich verhält sich

Code: Alles auswählen

if my_var in my_dic:
    #tue was zu tun ist
else:
    #tue, was sonst in dert except stünde
http://www.cs.unm.edu/~dlchao/flake/doom/
Benutzeravatar
Michael Schneider
User
Beiträge: 567
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Bremen
Kontaktdaten:

Dienstag 29. August 2006, 22:08

murph hat geschrieben:so ähnlich verhält sich

Code: Alles auswählen

if my_var in my_dic:
    #tue was zu tun ist
else:
    #tue, was sonst in dert except stünde
Hi Murph,

geht es hier nicht darum, das Dictionary nach und nach zu leeren? Dann kann man doch nur prüfen, ob es leer ist bzw. ob es Elemente enthält. Denn man hat ja keinen Wert my_var, dessen Vorhandensein man prüfen könnte. :-)

Grüße,
Michael
Diese Nachricht zersört sich in 5 Sekunden selbst ...
BlackJack

Mittwoch 30. August 2006, 12:35

Nirven hat geschrieben:Mag in diesem speziellen Fall zutreffen. Aber in etwas komplexerem Code könnte ein keyError auch woanders herkommen. Allgemein ist also 'if dictionary' vorzuziehen, oder?
Allgemein ist keines von beiden vorzuziehen sondern man sollte im Einzelfall entscheiden was der Semantik besser entspricht. IMHO.

Wenn `dictionary` ein komplexeres Objekt ist, dann kann auch ``if dictionary`` aufgrund von Programmierfehlern `False` ergeben obwohl das nicht stimmt.

Letztendlich finde ich das Konstrukt mit dem `poptitem()` sowieso ein bischen fragwürdig. Viel klarer fände ich so etwas:

Code: Alles auswählen

tmp = vocabulary.items()
tmp.shuffle()

for language_a, language_b in tmp[:count]:
    answer = raw_input('please translate "%s": ' % language_a)
    if answer != language_b:
        print 'Uh no, it is "%s".' % language_b
    else:
        print 'Correct.'
Antworten