2016-07-14 8 views
0

Ich arbeite an einer Python-Lernübung, die das Erstellen eines Textspiels erfordert, das von der Konsole ausgeführt wird. Ich möchte ein Quizspiel erstellen. (Ja, es ist Harry Potter Trivia - bitte verurteile nicht) Um den Fragenpool zu füllen, habe ich eine Textdatei der Fragen, Antwortmöglichkeiten und Antworten erstellt. Um die richtigen Optionen und Antworten mit der Frage zu behalten, wenn sie zufällig ausgewählt werden, verwende ich eine Liste von Listen. Aber wenn ich eine der Listen aus der Liste der Listen heraushole und sie einer Variablen zuweise, wird beim Zugreifen nach Index das Zeichen am Index und nicht am Listenelement gezogen.Zugriff auf eine Liste nach Index, der zufällig aus einer Liste von Listen ausgewählt wurde

Hier sind die Beispieldaten in der Textdatei namens Questions.txt:

['What was the famous Albus Dumbledore\'s full name?','Albus Merlin Baowulf Roderick Dumbledore','Albus Cato Eleret Scholasticus Dumbledore','Albus Percival Wulfric Brian Dumbledore',3] 
['What fruit must you tickle to get into the Hogwarts kitchen?','Pear','Apple','Quince',1] 
['What is the name of the French wizarding school?','Acadamie de Magique','Beauxbatons','Fontainebleu',2] 
['What is the name of Mr. Filch\'s cat?','Mr. Pinky Paws','Crookshanks','Mrs. Norris',3] 

das erste Element in jeder Liste ist die Frage, die zweite, dritte und vierte sind die Antwortmöglichkeiten und die letzte ganze Zahl ist die Nummer der richtigen Antwort. Ich importiere das in meine Python-Datei und verwende Splitlines, so dass jede Zeile in der Textdatei zu einem Element in der Liste wird, also eine Liste von Listen.

with open('questions.txt', 'r') as infile: 
    questions = infile.read() 

my_questions = questions.splitlines() 

Ich habe es an diesem Punkt getestet, indem ich etwas aus my_questions durch den Index gedruckt habe, und es hat funktioniert.

print my_questions[0] 

in

führte
['What was the famous Albus Dumbledore\'s full name?','Albus Merlin Baowulf Roderick Dumbledore','Albus Cato Eleret Scholasticus Dumbledore','Albus Percival Wulfric Brian Dumbledore',3] 

Also habe ich den nächsten Schritt aus der Liste zufällig einer der Listen auswählen und es mit einer neuen Variablen zugewiesen wird. Ich habe eine Funktion (ich sicher, dass ich Import zufällig am Anfang der Datei hatte):

def question(): 
     quest = random.choice(my_questions) 

     print quest[0] 

Und bekam nur einen [. I.e. das erste Zeichen, nicht die erste Zeichenfolge.

Also habe ich eine Frage und Antwort-Liste hart codiert und den gleichen Test versucht, und es hat funktioniert. Der Code:

def question(): 
     quest = random.choice(my_questions) 
     quest1 = ['What is the name of Mr. Filch\'s cat?','Mr. Pinky Paws','Crookshanks','Mrs. Norris',3] 
     print quest 
     print quest[0] 
     print quest1 
     print quest1[0] 

und das Ergebnis war:

PS C:\Users\Katrina\temp> python hogwarts.py 
['What fruit must you tickle to get into the Hogwarts kitchen?','Pear','Apple','Quince',1] 
[ 
["What is the name of Mr. Filch's cat?", 'Mr. Pinky Paws', 'Crookshanks', 'Mrs. Norris', 3] 
What is the name of Mr. Filch's cat? 

Ich bin sicher, es ist etwas, was ich hier fehlt ...

Antwort

1

Python ist Ihre Dateizeilen als Strings zu lesen. Die Strings sehen wie eine Python-Liste aus, sind es aber nicht. Um die Fragen in einer Textdatei zu speichern, sollten Sie ein Datenformat wie json verwenden. Sehen Sie diese Frage als Referenz: Parsing values from a JSON file using Python?

0

ich auch auf die repr() und eval() integrierten Funktionen lesen würde empfehlen, für den Fall, betrachten Sie das json-Modul zuviel des Guten sein. In seiner einfachsten Form ermöglicht eval() Ihnen, einen String in seine richtige Datenstruktur auszuwerten, wie ein Tupel oder eine Liste (wie in Ihrem Fall).