class Main: def main(self): clearCli() self.vocabulary = Vocabulary() vocabulary = self.vocabulary vocabulary.buildVocabulary() isValidCommand = True while True: quiz = Quiz(vocabulary) clearCli() print(CLI.main_menu) if not isValidCommand: print(CLI.invalid_command) command = input() isValidCommand = command in ['sa', 's', 'sl', 'q', 'j1', 'j2', 'j3', 'la', 't', 'o'] if isValidCommand: if command == 'sa': print('Starting quiz!\n\n') language = self.selectLanguage() quiz.startall(language) elif command == 's': numQuestions = self.selectNumQuestions() language = self.selectLanguage() print('Starting quiz!\n\n') quiz.start(language, numQuestions) elif command == 'sl': startLesson, endLesson = self.selectLessons() language = self.selectLanguage() print('Starting quiz!\n\n') quiz.start(language, startLesson=startLesson, endLesson=endLesson) elif command == 'j1': language = self.selectLanguage() print('Starting quiz for Japanese 1 vocabulary!\n\n') quiz.start(language, startLesson=1, endLesson=10) elif command == 'j2': language = self.selectLanguage() print('Starting quiz for Japanese 2 vocabulary!\n\n') quiz.start(language, startLesson=11, endLesson=20) elif command == 'j3': language = self.selectLanguage() print('Starting quiz for Japanese 3 vocabulary!\n\n') quiz.start(language, startLesson=21, endLesson=32) elif command == 'o': print('Starting open ended quiz') startLesson, endLesson = self.selectLessons() quiz.start_open_ended(startLesson=startLesson, endLesson=endLesson) elif command == 'q': print('Quiting program') break elif command == 'la': print('Listing all vocabulary') vocabulary.printWholeVocabulary() elif command == 't': print('Test') self.testFunction() def testFunction(self): kksi = kakasi() kksi.setMode("J", "H") conv = kksi.getConverter() all_hiragana = 'がくせい' partial_hiragana1 = '学せい' partial_hiragana2 = 'がく生' all_kanji = '学生' print(conv.do(all_hiragana)) print(conv.do(partial_hiragana1)) print(conv.do(partial_hiragana2)) print(conv.do(all_kanji)) print(conv.do(all_hiragana) == conv.do(partial_hiragana1) == conv.do(partial_hiragana2) == conv.do(all_kanji)) input() def selectNumQuestions(self): clearCli() print('How many questions?') while True: value = input() isANumber = value.isnumeric() isNumberWithinVocabSize = isANumber and 1 <= int(value) <= self.vocabulary.getVocabularySize() if isNumberWithinVocabSize: break clearCli() print('How many questions?') if not isANumber: print('Not a number') elif isANumber and not isNumberWithinVocabSize: print('Invalid value. Vocabulary size is', self.vocabulary.getVocabularySize()) numQuestions = int(value) return numQuestions def selectLanguage(self): clearCli() print('Language of questions? (jp/en)') while True: value = input() isValidInput = value == 'jp' or value == 'en' if isValidInput: break clearCli() print('Language of questions? (jp/en)') print(CLI.invalid_command) return value def selectLessons(self): clearCli() print('Do you want to do a (s)ingle or a (r)ange of lessons? (s/r)') while True: value = input() isValidInput = value == 's' or value == 'r' if isValidInput: break clearCli() print('Do you want to do a (s)ingle or a (r)ange of lessons? (s/r)') print(CLI.invalid_command) if value == 's': startLesson, endLesson = self.selectSingleLesson() elif value == 'r': startLesson, endLesson = self.selectRangeOfLessons() return startLesson, endLesson def selectSingleLesson(self): clearCli() print('Type lesson number?') while True: value = input() isValidInput = self.vocabulary.hasLesson(int(value)) if isValidInput: print('Valid lesson', value) break clearCli() print('Type lesson number?') print('Lesson does not exist') selectedLesson = value return selectedLesson , selectedLesson def selectRangeOfLessons(self): clearCli() print('Type start lesson number?') while True: value = input() isValidInput = self.vocabulary.hasLesson(int(value)) if isValidInput: print('Valid lesson', value) break clearCli() print('Type start lesson number?') print('Lesson does not exist') startLesson = value clearCli() print('Start lesson: ', startLesson) print('Type end lesson number?') while True: value = input() isLargerThanStart = int(value) > int(startLesson) doesLessonExist = self.vocabulary.hasLesson(int(value)) isValidInput = isLargerThanStart and doesLessonExist if isValidInput: print('Valid lesson', value) break clearCli() print('Start lesson: ', startLesson) print('Type end lesson number?') if not doesLessonExist: print('Lesson does not exist') elif not isLargerThanStart: print('End lesson should be greater than start lesson') endLesson = value assert int(endLesson) > int(startLesson) return startLesson, endLesson