Text Datei einlesen, liste erstellen, in if verwenden

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
slimcode
User
Beiträge: 8
Registriert: Mittwoch 11. Februar 2015, 09:02

Hallo

bin ja immer noch bei meinem Spiel und habe nun folgendes Problem

ich schreibe die Fragen händisch in eine Textdatei, die sehen dann so aus

Frage1: Wer gehört neben Dieter Bohlen zu „Modern Talking“?
(A) : Thomas Anders
(B) : Robbie Williams
(C) : Mark Medlock
(D) : Daniel Küblböck
A

Wenn ich nun in der letzten Zeile KEIN Enter drücke, liest die folgende if abfrage den Buchstaben A richtig aus

Code: Alles auswählen


    def antwort_pruefen(fragennummer):
        dateiname = fragennummer
        with open(dateiname, 'r') as f:
            inhalt = [(line) for line in f]
        antwort_user = input("Ihre Antwort: ")
        if antwort_user == inhalt[5]:
            print ("\n")
            print ("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++") 
            print ("Super, die richtige Antwort war ", inhalt[5])
            print ("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n") 

    
        else:
            print ("\n")
            print ("-----------------------------------------------------------------") 
            print ("Schade, die richtige Antwort war ", inhalt[5])
            print ("-----------------------------------------------------------------\n") 
mit print (inhalt) kommt diese Ausgabe
['Frage2: Wer gehört neben Dieter Bohlen zu „Modern Talking“?\n', '(A) : Thomas Anders\n', '(B) : Robbie Williams\n', '(C) : Mark Medlock\n', '(D) : Daniel Küblböck\n', 'A']

mache ich aber ein Enter nach dem A, sagt er mit das A != A ist
wenn ich mir dann die Liste ausgeben lasse, sieht die so aus
['Frage1: Wer gehört neben Dieter Bohlen zu „Modern Talking“?\n', '(A) : Thomas Anders\n', '(B) : Robbie Williams\n', '(C) : Mark Medlock\n', '(D) : Daniel Küblböck\n', 'A\n']

heißt die A hat noch ein \n hinten dran hängen

hab bei with open(dateiname, 'r') as f: schon rU und sämtliche codecs ausprobiert, geht leider nichts

hier die Fragen:
1: kann ich das verhindern, dass ein \n ausgelesen wird
2: kann ich bei if antwort_user == inhalt[5]: angeben, dass nur das ERSTE Zeichen von Zeile[5] gemeint ist

Danke für die Hilfe
BlackJack

@slimcode: Das lesen von Zeilenendezeichen kannst Du nicht verhindern und wie man an einen einzelnen Buchstaben an einem bestimmten Index in einer Zeichenkette heran kommt, sollte in einem Grundlagentutorial oder aus der Python-Dokumentation klar werden. Wie kommst Du Denn an ein bestimmtes Element in einer Liste heran?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich hatte Dich ja bereits auf JSON hingewiesen... evtl. wäre jetzt ja die Zeit, sich darauf zu besinnen ;-)

Damit hast Du dann weder Probleme mit Whitespaces, noch mit dem Parsen von Elementen (da dies das ``json`` Modul für Dich übernimmt).

Für das spezielle Problem mit den "\n" suchst Du übrigens ``str.strip()``! Das müsstest Du in Zeile 5 mit einbauen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
slimcode
User
Beiträge: 8
Registriert: Mittwoch 11. Februar 2015, 09:02

danke hyperion

Code: Alles auswählen

     inhalt = [(line.strip()) for line in f]
Zeile 5 editiert und es funktioniert

ja json hab ich schon noch im hinterkopf
aber fürs händische erstellen der Fragen ist TXT doch einfacher

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

slimcode hat geschrieben: ja json hab ich schon noch im hinterkopf
aber fürs händische erstellen der Fragen ist TXT doch einfacher
Findest Du das wirklich so umständlich?

Und wie ich schon anmerkte kannst Du Dir ja später einen grafischen Editor für das Verwalten der Fragen bauen, so dass Du gar kein JSON per Hand in eine Datei schreiben musst!

Ich persönlich würde immer ein wenig Overhead von JSON in Kauf nehmen, wenn mir dadurch eigenes Parsing erspart bleibt :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

Wem JSON zu umständlich ist, kann ja auch YAML verwenden. Ist halt nicht in der Standardbibliothek.
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

slimcode hat geschrieben:fürs händische erstellen der Fragen ist TXT doch einfacher
Ja, für das Erstellen der Textdatei, vielleicht. Aber nicht für das Auslesen und Weiterverwenden der Liste.

Genau daher entstand ja dieser Thread hier von dir. Natürlich kannst du auch alle Stolperfallen selbst finden.

Es gibt einfach Standards, auf die man leicht aufbauen kann, anstatt ein Rad neu erfinden zu müssen.
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Antworten