Seite 1 von 1

if - Anweisung

Verfasst: Samstag 14. Mai 2005, 21:17
von badewanne
Hallo
ICh habe ein problem mit if!!!

Hier einfach erstmal mein Programm (soll ein Vokabeltrainer sein!)

Code: Alles auswählen

# -*- coding: cp1252 -*-
from string import * 
from random import *
from time import *
"""
def datei_lesen (dat):
    in_file = open(dat,"r")
    # Datei zum Lesen (r: read) öffnen
    text = in_file.read() # Datei lesen
    in_file.close() # Datei schliessen
    return text      # und Inhalt zurückgeben

txt = datei_lesen("F:/python/voc.txt")

list=split(txt)

print txt
print list
dici={}

no = 0
lang = len(list)
while no<lang:
    zf = list[no]
    no = no + 1
    zfn = list[no]
    dici[zf] = zfn
    no=no+1  

for line in file.readlines():
    [name, password] = splitfields(line, ':')[:2]
    users.append(name)
    dici[name] = password
file = open(filename, 'r')
"""

dici = {}
deutsch = []
filename = "F:/python/voc.txt"
file = open(filename,"r")
for line in file.readlines():
    [deu, engl] = splitfields(line, ':')[:2]
    deutsch.append(deu)
    dici[deu] = engl

def ausg(deu, eng):
    print deu,":",eng

def abfrage():
    deu = choice(dici.keys())
    eng = dici[deu]
    "print ausg(deu, eng)"
    print eng
    print dici.values()
    print "Was heißt:",deu,"auf Englisch?"
    eing = raw_input("Englisch: ")
    "eing = eing.get()"
    "eing = float(eing)"
    print eng
    print deu
    if eing == eng:
        print "All right!"
        ausg(deu, eng)
    elif eing == deu:
        print "Du sollst das Englische Wort schreiben!!!"
        ausg(deu, eng)
        print eing
    else:
        print "wrong!!"
        ausg(deu, eng)
        print eing

abfrage()

das programm gibt immer wron!! aus! woran kann das liegen?

Verfasst: Sonntag 15. Mai 2005, 10:23
von knekke
Hi,
ich weiss nicht wie Deine voc.txt aussieht, aber könnte es sein, daß Leerzeichen und/oder Zeilenumbrüche mit eingelesen werden?
Nur so ne Idee...

Verfasst: Sonntag 15. Mai 2005, 18:19
von jens
Du hast doch schon zumindest ein print eng und print deu gemacht, dann pack da doch auchnoch ein print eing dahin und schau, ob die Sachen wirklich übereinstimmten ;)

Verfasst: Dienstag 17. Mai 2005, 21:54
von badewanne
jens hat geschrieben:Du hast doch schon zumindest ein print eng und print deu gemacht, dann pack da doch auchnoch ein print eing dahin und schau, ob die Sachen wirklich übereinstimmten ;)
hab ich ja schon... stimmt komplett überein... deswegen frag ich ja.

übrigens:
die textdatei sieht so aus:

Code: Alles auswählen

Buchstabe:the letter
Jahr:year
Maus:mouse
Tastatur:keyboard
praktisch:handy
Ausrutscher:slip
Knoten:knot
Made:maggot
Streichholz:match
laufen:walk

Verfasst: Dienstag 17. Mai 2005, 22:35
von joe
Hi!
badewanne hat geschrieben: hab ich ja schon... stimmt komplett überein... deswegen frag ich ja.
Nee, tuts nicht. Nach der ausgabe von eng hätte dich eigentlich die unerwartete leerzeile stutzig machen müssen. Besser sind so debug-ausgaben wie print "#%s#%s#%s#" % (eing,eng,deu) Da sieht man sofort wo's brennt.
joe

Verfasst: Mittwoch 18. Mai 2005, 06:25
von jens
Mach das Auslesen doch so:

Code: Alles auswählen

filename = "F:/python/voc.txt"
f = file(filename,"r")
for line in f.read().split():
    deu, engl = line.split(":")
    dici[deu] = engl
f.close()
Da fällt mir auf, die liste "deutsch" brauchst du doch garnicht...

Verfasst: Mittwoch 18. Mai 2005, 22:04
von BlackJack
jens hat geschrieben:Mach das Auslesen doch so:

Code: Alles auswählen

filename = "F:/python/voc.txt"
f = file(filename,"r")
for line in f.read().split():
    deu, engl = line.split(":")
    dici[deu] = engl
f.close()
Besser nicht. In den Zeilen können auch Leerzeichen vorkommen, das ``f.read().split()`` liefert dann falsche Ergebnisse. Anderer Vorschlag (ungetestet):

Code: Alles auswählen

from itertools import imap
filename = "F:/python/voc.txt"
voc_file = file(filename,"r")
dictionary = dict(imap(lambda line: line.split(':'), voc_file))
voc_file.close()

Verfasst: Donnerstag 19. Mai 2005, 06:45
von jens
BlackJack hat geschrieben:Besser nicht. In den Zeilen können auch Leerzeichen
vorkommen, das ``f.read().split()`` liefert dann falsche Ergebnisse.
Da hast du natürlich recht, hab ich nicht bedacht... Dann geht's aber so:

Code: Alles auswählen

filename = "F:/python/voc.txt"
f = file(filename,"rU")
for line in f.read().split("\n"):
    deu, engl = line.split(":")
    dici[deu] = engl
f.close()

geht!

Verfasst: Donnerstag 19. Mai 2005, 19:15
von badewanne
danke!!!
jetzt gehts (aber nur mit der letzten variante von jens...)
auf mienr seite wird es immer eine aktuellere version geben!
zum schluss soll eine benutzeroberfläche, vokabeltextdateiwähler, etc. vorhanden sein vorbeischauen lohnt sich! ich will auch noch eine eingabe machen(zum hinzufügen zur txt-datei)
danke erstmal.
meine seite: www.repke.de