This repository has been archived by the owner on Mar 14, 2024. It is now read-only.
generated from edu-python-course/replit-assignment-template
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
168 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,166 @@ | ||
# Інструкції | ||
|
||
Цей проєкт надає простий скрипт командного рядка, який задає користувачеві питання з файлу. Файл запитань використовує заздалегідь визначену структуру. Після того, як всі відповіді будуть зібрані, користувачеві буде показано загальну кількість балів і виконання скрипту буде завершено. | ||
|
||
![](../../.lesson/assets/run_script.gif) | ||
|
||
## Завдання | ||
|
||
Ваша задача - реалізувати скрипт для запуску вікторини на основі командного рядка. | ||
Користувачі будуть вводити свої імена та відповідати на питання з файлу. В кінці тесту користувачеві повинен бути показаний результат, а всередині файлу _scores.txt_ повинен бути створений запис. | ||
|
||
## Вимоги | ||
|
||
### Отримайте ім'я користувача | ||
|
||
Ця функція пропонує користувачеві ввести своє ім'я. Ім'я має відповідати вимогам: | ||
|
||
- непорожній рядок | ||
- не довше 10 символів | ||
|
||
Якщо вимоги не виконані - запитуйте ще раз, поки введені дані не пройдуть перевірку. | ||
|
||
Функція поверне ім'я, введене користувачем. | ||
|
||
### Завантажте питання з файлу CSV | ||
|
||
Питання зберігаються у файлі CSV, який відповідає шаблону: | ||
|
||
```text | ||
Question text?,"option 1,option 2,...,option n",correct answer | ||
``` | ||
|
||
Це означає, що в першому стовпчику міститься запитання, у другому - всі можливі варіанти відповідей, а в останньому - правильна відповідь. | ||
|
||
Правильна відповідь подається у тому вигляді, в якому вона була написана у колонці з варіантами відповідей. | ||
|
||
Подвійні лапки використовуються для зберігання тексту з комами як значення одного стовпця. | ||
|
||
Псевдоніми типів структур даних визначаються як: | ||
|
||
```python | ||
from typing import List, TypedDict | ||
|
||
Question = TypedDict("Question", { | ||
"question": str, | ||
"options": List[str], | ||
"answer": str, | ||
}) | ||
Questions = List[Question] | ||
``` | ||
|
||
Вихідною структурою для питання є словник з ключами: | ||
|
||
- question | ||
- options | ||
- answer | ||
|
||
Функція повинна повертати список словників запитань. | ||
|
||
### Показати питання | ||
|
||
Ця функція просто виводить дані питання користувачеві. | ||
Текст питання завжди має порожній рядок до і після нього. | ||
|
||
```text | ||
Is this a question? | ||
``` | ||
|
||
Кожен варіант повинен бути видрукований на окремому рядку з номером варіанту, що стоїть перед ним. Нумерація варіантів починається з 1. | ||
|
||
```text | ||
1 option 1 | ||
2 option 2 | ||
3 option 3 | ||
``` | ||
|
||
Номер варіанта відповіді та текст слід відокремлювати за допомогою будь-яких пробільних символів; принаймні один символ-розділювач обов'язковий. | ||
|
||
Все разом - питання: | ||
|
||
```python | ||
question = { | ||
"question": "Is this a question?", | ||
"options": ["Yes", "No"], | ||
"answer": "Yes", | ||
} | ||
``` | ||
|
||
буде видрукувано так: | ||
|
||
```text | ||
Is this a question? | ||
1 Yes | ||
2 No | ||
``` | ||
|
||
### Збір відповідей від користувача | ||
|
||
Користувачам буде запропоновано ввести відповідь після того, як питання буде видрукувано. Підказка повинна містити текст `"Submit answer: "`. | ||
|
||
Функція повинна повертати **фактичний індекс** вибраного варіанта. | ||
Наприклад, для варіантів `["A", "B", "C", "D"]` виведених як: | ||
|
||
```text | ||
1 D | ||
2 B | ||
3 C | ||
4 A | ||
``` | ||
|
||
Якщо користувач вибрав `4` (опція `"A"`), функція повинна повернути `0`, як | ||
фактичний індекс `"A"` у списку опцій. | ||
|
||
### Перевірте правильність відповіді | ||
|
||
Функція отримує як аргументи словник запитання та відповідь користувача. | ||
Вона повертає `True`, якщо відповідь правильна, інакше `False`. | ||
|
||
### Виконуємо тест | ||
|
||
Ця функція отримує список запитань як аргумент. | ||
Вона показує питання одне за одним і перевіряє правильність відповідей користувача. | ||
|
||
Значенням, що повертається, є оцінка тесту - кількість правильних відповідей. | ||
|
||
### Запис рахунку до файлу | ||
|
||
Функція отримує як аргументи ім'я користувача та результат тесту і записує їх у файл з назвою **scores.txt**. | ||
|
||
Структура файлу визначається наступним чином: | ||
|
||
```text | ||
username score points | ||
``` | ||
|
||
Є два стовпчики, розділені двома пробілами. | ||
Ширина першого стовпчика фіксована і дорівнює 10 символам. | ||
|
||
Отже, вміст файлу може мати такий вигляд: | ||
|
||
```text | ||
username_1 10 | ||
user 5 | ||
quiz a 3 | ||
foo 20 | ||
bar 4 | ||
foobar 15 | ||
``` | ||
|
||
### Об'єднайте всі функції разом | ||
|
||
Функція `main` (а не модуль **main.py**) є ядром тесту. | ||
Вона об'єднує всю функціональність разом і виконує вікторину. | ||
|
||
Наприкінці результати тесту будуть записані у файл **scores**, а користувач | ||
отримає відповідне повідомлення: | ||
|
||
```text | ||
Quiz score: {score} | ||
``` |