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

if - Anweisung

Beitragvon badewanne » Samstag 14. Mai 2005, 21:17

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

Beitragvon knekke » Sonntag 15. Mai 2005, 10:23

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
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Sonntag 15. Mai 2005, 18:19

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
badewanne
User
Beiträge: 7
Registriert: Dienstag 3. Mai 2005, 20:36
Wohnort: Berlin
Kontaktdaten:

Beitragvon badewanne » Dienstag 17. Mai 2005, 21:54

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
joe

Beitragvon joe » Dienstag 17. Mai 2005, 22:35

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
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Mittwoch 18. Mai 2005, 06:25

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

Beitragvon BlackJack » Mittwoch 18. Mai 2005, 22:04

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
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Donnerstag 19. Mai 2005, 06:45

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
badewanne
User
Beiträge: 7
Registriert: Dienstag 3. Mai 2005, 20:36
Wohnort: Berlin
Kontaktdaten:

geht!

Beitragvon badewanne » Donnerstag 19. Mai 2005, 19:15

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder