Код на Python - основа для приложения APK для смартфонов.
С последующей компиляцией он-лайн в Google Colab:
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout
class HistoryTestApp(App):
def build(self):
self.questions = [
{"text": "1. Столица России?", "options": ["Москва", "Санкт-Петербург", "Екатеринбург"], "correct": 0},
{"text": "2. Правительство СССР в 1941 эвакуировали в:", "options": ["Самара", "Куйбышев", "Казань"], "correct": 1},
{"text": "3. Создатель двигателя для ракеты Союз:", "options": ["Королёв", "Хрущёв", "Фон Браун"], "correct": 0},
{"text": "4. Помощь США в 1941-1945:", "options": ["Морские конвои", "Через Сибирь", "Не помогали"], "correct": 0},
{"text": "5. Кто рассчитал космические траектории?", "options": ["Ломоносов", "Курчатов", "Циолковский"], "correct": 2},
]
self.current_q = 0
self.score = 0
self.selected_answer = None
return self.question_screen()
def question_screen(self):
q = self.questions[self.current_q]
layout = BoxLayout(orientation='vertical', padding=20, spacing=15)
layout.add_widget(Label(text=q["text"], font_size=20, size_hint=(1, 0.2)))
grid = GridLayout(cols=1, spacing=10, size_hint=(1, 0.6))
self.answer_buttons = []
for i, opt in enumerate(q["options"]):
btn = Button(text=opt, font_size=16, size_hint_y=None, height=50)
btn.bind(on_press=lambda x, idx=i: self.select_answer(idx))
grid.add_widget(btn)
self.answer_buttons.append(btn)
layout.add_widget(grid)
next_btn = Button(text="Далее", font_size=18, size_hint=(1, 0.1))
next_btn.bind(on_press=self.next_question)
layout.add_widget(next_btn)
return layout
def select_answer(self, idx):
self.selected_answer = idx
for i, btn in enumerate(self.answer_buttons):
btn.background_color = (0.2, 0.8, 0.2, 1) if i == idx else (0.5, 0.5, 0.5, 1)
def next_question(self, instance):
if self.selected_answer is None:
return
if self.selected_answer == self.questions[self.current_q]["correct"]:
self.score += 1
self.current_q += 1
self.selected_answer = None
if self.current_q < len(self.questions):
self.root.clear_widgets()
self.root.add_widget(self.question_screen())
else:
self.show_result()
def show_result(self):
self.root.clear_widgets()
layout = BoxLayout(orientation='vertical', padding=30, spacing=20)
layout.add_widget(Label(text=f"Тест завершён!\n\nПравильных ответов: {self.score} из {len(self.questions)}", font_size=20))
restart_btn = Button(text="Пройти заново", font_size=18)
restart_btn.bind(on_press=self.restart)
layout.add_widget(restart_btn)
self.root.add_widget(layout)
def restart(self, instance):
self.current_q = 0
self.score = 0
self.selected_answer = None
self.root.clear_widgets()
self.root.add_widget(self.question_screen())
if __name__ == "__main__":
HistoryTestApp().run()
2 минуты
11 мая