if - Anweisung

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
badewanne
User
Beiträge: 7
Registriert: Dienstag 3. Mai 2005, 20:36
Wohnort: Berlin
Kontaktdaten:

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?
-> www.repke.de <-
Benutzeravatar
knekke
User
Beiträge: 100
Registriert: Freitag 29. Oktober 2004, 17:23
Wohnort: Schweden

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...
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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 ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
badewanne
User
Beiträge: 7
Registriert: Dienstag 3. Mai 2005, 20:36
Wohnort: Berlin
Kontaktdaten:

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
-> www.repke.de <-
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
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
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()
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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()

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
badewanne
User
Beiträge: 7
Registriert: Dienstag 3. Mai 2005, 20:36
Wohnort: Berlin
Kontaktdaten:

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
-> www.repke.de <-
Antworten