从Python中的文件随机生成测验问题

时间:2020-08-03 13:28:16

标签: python python-3.x random

我只是在用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")

2 个答案:

答案 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])
相关问题