从Python中的文件随机生成测验问题
我只是在练习Python,有一个问题,我试图从一个文本文件中生成一个测验,它将从该文件中随机询问一个问题 它应该先阅读问题,然后列出答案,用文件中的逗号分隔,在尝试随机分组之前,这些逗号确实起作用 此时,它正在读取行的第一个字符,然后在尝试打印“详细信息[1]”时显示错误“列表索引超出范围”。例如,如果它选择文本文件中的第3行,将读取“C”,则输入时将出现错误 文本文件如下:从Python中的文件随机生成测验问题,python,python-3.x,random,Python,Python 3.x,Random,我只是在练习Python,有一个问题,我试图从一个文本文件中生成一个测验,它将从该文件中随机询问一个问题 它应该先阅读问题,然后列出答案,用文件中的逗号分隔,在尝试随机分组之前,这些逗号确实起作用 此时,它正在读取行的第一个字符,然后在尝试打印“详细信息[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 i
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")
代码如下:
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")
在我这方面进行了测试之后,似乎单靠“input()”可能不起作用。您使用“输入”将用户写入的内容存储为变量,因此必须将其放在变量上,这不是自动完成的
x = input('Write your answer : a, b, c or d')
我一点也不确定问题是否真的存在,这只是一些尝试性的帮助,在我这方面进行了测试之后,似乎单靠“input()”可能不起作用。您使用“输入”将用户写入的内容存储为变量,因此必须将其放在变量上,这不是自动完成的
x = input('Write your answer : a, b, c or d')
我一点也不确定问题是否真的在这里,这只是一些试图帮助你的想法我想这是一句让你感到困惑的话:
file=rand\u行(“questions.txt”)
您称之为file,但实际上它只是文件中的一个随机行,如下所示:
C,什么是3+3?,2,4,6,8,C,
当你进行拆分(',')
时,你的细节只会
['C']
我认为您希望该行成为列表/数组。要做到这一点,请将您的rand\u行用方括号括起来[]
file=[rand\u line(“questions.txt”)]
将上述输出更改为:
['C,什么是3+3?,2,4,6,8,C']
现在,当您执行拆分(',')
时,您的详细信息是
['C'、'3+3是什么?'、'2'、'4'、'6'、'8'、'C'、'']
不确定input()
在print(细节[0])
和print(细节[1])
此外,为了避免字母选择的混合输入,将大小写更改为您知道答案在问题文件中的大小写可能是有益的:
print("Select A, B, C or D: ")
select = input().lower()
if select == detail[6]:
例如:
答案在文件中为c
,但提示您输入c
另一件事是删除for循环。因为文件
实际上只是一行:
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])
我认为这是一句让你感到困惑的话:
file=rand\u行(“questions.txt”)
您称之为file,但实际上它只是文件中的一个随机行,如下所示:
C,什么是3+3?,2,4,6,8,C,
当你进行拆分(',')
时,你的细节只会
['C']
我认为您希望该行成为列表/数组。要做到这一点,请将您的rand\u行用方括号括起来[]
file=[rand\u line(“questions.txt”)]
将上述输出更改为:
['C,什么是3+3?,2,4,6,8,C']
现在,当您执行拆分(',')
时,您的详细信息是
['C'、'3+3是什么?'、'2'、'4'、'6'、'8'、'C'、'']
不确定input()
在print(细节[0])
和print(细节[1])
此外,为了避免字母选择的混合输入,将大小写更改为您知道答案在问题文件中的大小写可能是有益的:
print("Select A, B, C or D: ")
select = input().lower()
if select == detail[6]:
例如:
答案在文件中为c
,但提示您输入c
另一件事是删除for循环。因为文件
实际上只是一行:
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])
在循环之前查看文件
。里面有什么?然后查看循环本身:用于文件中的行
。这还有意义吗?line
在循环中有什么值?将random.choice(…
更改为random.choices(…
在循环之前查看文件
。它包含什么?然后查看循环本身:文件中的行
。这仍然有意义吗?行
在循环中有什么值?将随机。选择(…
更改为随机。选择(…
这与在他们的问题中提到的“列表索引超出范围”错误OP?这可以帮助他,所以我认为值得一提。正如我所说的,我绝对不确定这是否与他的错误有关,这只是尝试帮助。如果你认为这不合适,我可以关闭。谢谢你的回答输入()只是我之前测试了一些东西,可能应该在发布之前删除它。:)这与“列表索引超出范围”有什么关系“他们的问题中提到了错误OP?这可以帮助他,所以我认为值得一提。正如我所说的,我绝对不确定这是否与他的错误有关,这只是尝试帮助。如果你认为这不合适,我可以关闭。谢谢你的回答输入()只是我之前测试了一些东西,可能应该在发布之前删除它。:)太好了,非常感谢您,这正是我所需要的。input()只是我测试了一些东西以及行中的第一个字符(可能应该在发布之前删除这些字符)。更改案例也是我将要添加的内容,因此也非常感谢。那太好了,非常感谢您正是我所需要的。input()只是我测试了一些内容以及行中的第一个字符(可能应该在发布之前删除这些).换箱子也是我要补充的,所以也谢谢你。