#!/usr/bin/python3 import pathlib import time import os import csv import random from rich.console import Console from rich.markdown import Markdown from ccpq.lib_ccpq import Question, Database, Game class Tui(object): def __init__(self): self._console = Console() self._stats = [] def ask_question(self, question): md = Markdown("# {}".format(question.get_question())) self._console.print(md) md = "" for possibility in question.get_possibilities(): md += "1. {}\n".format(possibility) md = Markdown(md) self._console.print(md) def prompt_for_answer(self): md = Markdown("What's your answer?") self._console.print(md) answer = self._parse_input() return answer def _parse_input(self): """ TODO make it adapt to questions with multiple choices and fill the blank """ while True: result = input() if result.isdigit(): return result md = Markdown("**only digits please**") self._console.print(md) def show_response(self, question): answers = question.get_right_answers() if len(answers) == 1: answer = answers[0] md = Markdown("### The right answer is: {}".format(answer)) else: md = "### The right answers are:\n" for answer in answers: md += "* {}\n".format(answer) md = Markdown(md) self._console.print(md) def show_stats(self, stats): md = "### you have {} out of {} right!".format(stats[0], stats[2]) md = Markdown(md) self._console.print(md) md = "### press **enter** to get a new question or **CTRL-C** to quit" md = Markdown(md) self._console.print(md) input() os.system("clear") def goodbye(self): md = Markdown("# Goodbye!") self._console.print(md) class Application(object): def __init__(self, filepath, interface): self._db = Database(filepath) self._session = Game() self._interface = interface def run(self): while True: question = self._db.get_question() self._interface.ask_question(question) answer = self._interface.prompt_for_answer() stat = question.verify(answer) self._session.update_stats(stat) self._interface.show_response(question) self._interface.show_stats(self._session.get_stats()) def quit(self): self._interface.goodbye() if __name__ == "__main__": filepath = pathlib.Path("./data/list_book1.csv") interface = Tui() app = Application(filepath, interface) try: app.run() except KeyboardInterrupt: app.quit()