我正在进行python学习练习,需要从控制台创建一个文本游戏。我想创建一个琐事游戏。 (是的,这是哈利波特的琐事 - 请不要判断)要制作问题池,我已经制作了问题,答案选项和答案的文本文件。为了在随机选择问题时保留正确的选项和答案,我使用的是列表清单。但是当我从列表列表中拉出其中一个列表并将其分配给变量时,通过索引访问它会拉动索引处的字符,而不是列表项。
以下是文本文件中的示例数据,名为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]
每个列表中的第一项是问题,第二项,第三项和第四项是答案选项,最后一个整数是正确答案的编号。我将它导入我的python文件并使用分割线,以便文本文件中的每一行成为列表中的项目,从而列出一个列表。
with open('questions.txt', 'r') as infile:
questions = infile.read()
my_questions = questions.splitlines()
我在此时通过索引打印my_questions中的内容来测试它,并且它有效。
print my_questions[0]
导致
['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]
所以我做了下一步,从列表中随机选择一个列表并将其分配给一个新变量。我创建了一个函数(我确保我在文件的顶部有随机导入):
def question():
quest = random.choice(my_questions)
print quest[0]
只有一个[。即第一个字符,而不是第一个字符串。
所以我对问题和答案列表进行了硬编码并尝试了同样的测试,并且它有效。代码:
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]
结果是:
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?
我确信这里有一些我不想要的东西......
答案 0 :(得分:1)
Python正在将您的文件行读取为字符串。字符串看起来像Python列表,但它们不是。为了将问题存储在文本文件中,您应该使用像json这样的数据格式。请参阅此问题以供参考:Parsing values from a JSON file using Python?
答案 1 :(得分:0)
我还建议您阅读repr()
和eval()
内置函数,以防您认为json模块过大。在最简单的形式中,eval()
允许您将字符串计算为正确的数据结构,例如元组或列表(如您的情况)。