我试图在python中创建一个测验,我需要从外部文本文件中检索多个问题。 我成功地检索了第一个问题,但是我得到的#34;列表索引超出范围"尝试检索第二个时出错。
这是我当前代码的片段。
if choice1 == "CH":
choice2 = input ("Would you like to do the easy, medium or hard questions ?").lower()
if choice2 == "easy":
load_profile = open("chemistryquiz.txt","r")
question1 = load_profile.read().splitlines()[4]
print (question1)
question2 = load_profile.read().splitlines()[5]
print (question2)
如果我对问题2发表任何评论,该程序的效果非常好。我哪里出错了? P.S,我检查了文本文件,并确保该行的编号为5,我知道你在python编程时从0开始计数。
此外,这些是chemistryquiz.txt
的内容Chemistry Quiz :
Easy :
1) What is the chemical symbol of Carbon ? A: C B: Ca
2) What is the weight of an electron ? A: 0 B: 0.1
答案 0 :(得分:2)
让我们一步一步:
load_profile = open("chemistryquiz.txt","r")
文件已打开;你有一个文件句柄 load_profile 。 文件书签位于文件的开头。
question1 = load_profile.read().splitlines()[4]
您已阅读整个文件,将其拆分为行,并将第5行分配给 question1 。
print (question1)
question2 = load_profile.read().splitlines()[5]
由于书签仍在文件的末尾, read()仅返回EOF。 分界线没有任何用处。没有元素5。 KABOOM!的。
返回文件中读取行的文本。例如......
with open("chemistryquiz.txt","r") as load_profile:
for input_line in load_profile:
# This loop will give you the file, one line at a time.
答案 1 :(得分:1)
你的问题是,你多次拨打load_profile.read()
。每次调用它时,它都会从任何先前文件读取功能停止的位置开始读取。但是第一个调用会读取整个文件,因此第二个调用没有任何内容可供阅读。它返回一个空字符串,splitlines()
返回一个空列表。
只需阅读一次文件。
lines = load_profile.read().splitlines()
question1 = lines[4]
question2 = lines[5]