Пишем генератор тестов на Python
Здравствуйте!В данной статье я хотел бы показать пример программы на Python,которая генерирует билеты на основе вопросов из текстового файла.
Текстовый файл с вопросами:
// Файл questions.txt
Что такое Python и где он используется?
Что такое PHP и когда он был создан?
Как прижать футер к низу старницы?
Как создать блок посередине страницы?
Как выравнять текст внутри блока?
Внизу на рисунке представлена Excel-форма (файл TicketTemplate.xlsx):
Скрипт ticketgenerator.py:
import random
import openpyxl
# читает файл в список
def read2list(file):
# открываем файл в режиме чтения utf-8
file = open(file, 'r', encoding='utf-8')
# читаем все строки и удаляем переводы строк
lines = file.readlines()
lines = [line.rstrip('\n') for line in lines]
file.close()
return lines
# возвращает 5 случайных вопросов
def get_questions():
answers = read2list('answers_data.txt')
items = random.choices(population=answers, k=5)
return items
# класс шаблон билета
class TicketTemplate:
def __init__(self, my_book='./TicketTemplate.xlsx'):
self.book_name = my_book
self.book = None
self.sheet = None
def open(self):
self.book = openpyxl.load_workbook(self.book_name)
self.sheet = self.book.active
def get_cell_value(self, row, column):
return self.sheet.cell(row=row, column=column).value
def set_cell_value(self, row, column, value):
self.sheet.cell(row=row, column=column).value = value
def get_rows(self):
rows = [self.get_cell_value(1, 1), self.get_cell_value(3, 1),
self.get_cell_value(4, 1), self.get_cell_value(5, 1),
self.get_cell_value(6, 1), self.get_cell_value(7, 1)
]
return rows
def set_ticket_number(self, number):
self.sheet.cell(row=1, column=1).value = 'Билет №' str(number)
def set_questions(self, questions):
for row, question in enumerate(questions):
question_number = row 1
self.set_cell_value(row 3, 1, '{0}. {1}'.format(question_number, question.strip()))
def flush(self):
self.book.save(self.book_name)
def save(self, file_name):
self.book.save(file_name)
Используется следующим образом:
from tiсketgenerator import *
tt = TicketTemplate()
tt.open()
for ticket in range(1, 31):
tt.set_ticket_number(ticket)
tt.set_questions(get_questions())
tt.save('./Билеты/Билет №{0}.xlsx'.format(ticket))
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.