我只是在用Python练习,但是有一个问题,我正在尝试从一个文本文件中生成一个测验,它将从文件中随机询问一个问题。
应该先阅读问题,然后列出答案,并在尝试将其随机化之前,用有效的文件中的逗号分隔它们。
此刻,它只是读取该行的第一个字符,然后在尝试打印“ detail [1]”时显示错误“列表索引超出范围”。例如,如果它在文本文件中选择第3行,则将显示为“ C”,那么在输入时会出现错误。
文本文件如下:
A,What is 1+1?,1,2,3,4,b,
B,What is 2+2?,1,2,3,4,d,
C,What is 3+3?,2,4,6,8,c,
D,What is 4+4?,4,8,12,18,b,
E,What is 6+6?,18,12,10,9,b,
F,What is 1+2?,1,2,3,4,c,
G,What is 5+5?,5,6,7,10,d,
H,What is 2*2?,2,4,6,8,b,
代码如下:
import random
class question:
def rand_line(fname):
lines = open(fname).read().splitlines()
return random.choice(lines)
file = rand_line("questions.txt")
for line in file:
detail = line.split(",")
print(detail[0])
input()
print(detail[1])
print("a: ", detail[2])
print("b: ", detail[3])
print("c: ", detail[4])
print("d: ", detail[5])
print("Select A, B, C or D: ")
select = input()
if select == detail[6]:
print("correct!")
else:
print("incorrect")
答案 0 :(得分:0)
在我这边对其进行测试之后,似乎单独使用“ input()”可能无法正常工作。您正在使用“输入”将用户编写的内容存储为变量,因此必须将其放在变量上,这不会自动完成。
x = input('Write your answer : a, b, c or d')
我完全不确定问题是否在这里,这只是一些尝试的帮助
答案 1 :(得分:0)
我认为这是一条让您失望的路线:
file = rand_line("questions.txt")
您称它为文件,但实际上它只是文件中的随机行,如下所示:
C,What is 3+3?,2,4,6,8,c,
而当您执行split(',')
时,您的detail
就只是
['C']
我认为您想将该行作为列表/数组。为此,请用方括号rand_line
[]
file = [rand_line("questions.txt")]
将以上输出更改为:
['C,What is 3+3?,2,4,6,8,c,']
现在,当您执行split(',')
时,您的detail
是
['C', 'What is 3+3?', '2', '4', '6', '8', 'c', '']
不确定input()
和print(detail[0])
之间的print(detail[1])
在做什么
此外,为避免字母选择时输入不正确,将大小写更改为问题文件中答案的可能是有益的:
print("Select A, B, C or D: ")
select = input().lower()
if select == detail[6]:
示例:
答案在文件c
中,但提示您输入C
另一件事是删除for循环。由于file
实际上只是一行:
line = rand_line("questions.txt")
detail = line.split(",")
print(detail[0])
print(detail[1])
print("a: ", detail[2])
print("b: ", detail[3])
print("c: ", detail[4])