【问题标题】:Generating quiz questions randomly from a file in Python从 Python 中的文件随机生成测验问题
【发布时间】:2020-08-03 13:28:16
【问题描述】:

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

【问题讨论】:

  • 在循环之前查看file。它包含什么?然后看看循环本身:for line in file。这还有意义吗? line 在循环中有什么值?
  • random.choice(... 更改为random.choices(...

标签: python python-3.x random


【解决方案1】:

我认为这是让你失望的一句话:

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])

【讨论】:

  • 太好了,非常感谢我所需要的。 input() 只是我测试的东西以及行中的第一个字符(可能应该在发布之前删除这些)。更改案例也是我要添加的内容,因此也非常感谢。
【解决方案2】:

在我这边测试之后,似乎单独使用“input()”可能不起作用。您正在使用“输入”将用户写入的内容存储为变量,因此您必须将其放在变量上,这不是自动完成的。

x = input('Write your answer : a, b, c or d')

我不确定问题是否真的在这里,这只是一些尝试帮助

【讨论】:

  • 这与他们问题中提到的“列表索引超出范围”错误 OP 有什么关系?
  • 嗯,这可以帮助他,所以我认为值得一提。正如我所说,我绝对不确定这与他的错误有关,这只是试图提供帮助。如果您认为不合适,我可以关闭。
  • 感谢您的回答 input() 只是我之前测试的东西,可能应该在发布之前删除它。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-27
  • 2023-04-02
  • 1970-01-01
相关资源
最近更新 更多