Генерация вопросов викторины случайным образом из файла в Python - PullRequest
1 голос
/ 03 августа 2020

Я просто практикуюсь в 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 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 голосов
/ 03 августа 2020

Я думаю, это строка, которая сбивает вас с толку:

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 l oop. Поскольку 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])
0 голосов
/ 03 августа 2020

После тестирования на моей стороне кажется, что "input ()" сам по себе может не работать. Вы используете "input" для хранения в качестве переменной того, что пишет пользователь, поэтому вы должны поместить его в переменную, что не выполняется автоматически.

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

Я не уверен, что проблема на самом деле здесь, это просто некоторые попытки помочь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...