def EightsQuizFunction(vocabWords): """Cut the quiz into eights, then quiz over each section until 100% accuracy""" session = dict() vocabWords = ShuffleList(vocabWords) def sortingFunction(x): if x['tried'] != 0: return x['failed'] / x['tried'] else: return 1 vocabWords.sort(key=sortingFunction,reverse=True) sections = [x for x in CutIntoLengths(vocabWords,8)] lengthOfSections = len(sections) for count,section in enumerate(sections): correctWords = dict([(x['question'],False) for x in section]) def getWrongAnswers(s): for x in s: if correctWords[x['question']] == False: yield x while(False in correctWords.values()): #wrongAnswers = [x for x in section if correctWords[x['question']] == False] wrongAnswers = [x for x in getWrongAnswers(section)] lastWrongAnswer = wrongAnswers[-1] section = ShuffleList(section) firstWrongAnswer = [x for x in getWrongAnswers(section)][0] if firstWrongAnswer == lastWrongAnswer: section = section[1:] + [lastWrongAnswer] Clear() print('{1} of {2} {0}%'.format(100.0 * count / lengthOfSections, count, lengthOfSections)) for question in section: q = question["question"] alternateAnswers = [] if 'alternates' not in question else question['alternates'] if(correctWords[q] == True): continue (result, newAlternates) = AskQuestion(q, question['answer'], alternateAnswers) if q not in session.keys(): session[q] = {'tried' : 0, 'failed' : 0} if result == None: return (session, vocabWords) elif result == False: question['failed'] += 1 session[q]['failed'] += 1 correctWords[q] = False while result == False: if result != "": Clear() (result, newAlternates) = AskQuestion(q,question['answer'], alternateAnswers) else: correctWords[q] = True question['tried'] += 1 session[q]['tried'] += 1 question['lastAsked'] = GetTime() question['alternates'] = newAlternates return (session, vocabWords)
def EightsQuizFunction(vocabWords): """Cut the quiz into eights, then quiz over each section until 100% accuracy""" session = dict() vocabWords = ShuffleList(vocabWords) def sortingFunction(x): if x['tried'] != 0: return x['failed'] / x['tried'] else: return 1 vocabWords.sort(key=sortingFunction,reverse=True) sections = [x for x in CutIntoLengths(vocabWords,8)] lengthOfSections = len(sections) for count,section in enumerate(sections): wrongWords = [x for x in section] while(wrongWords != []): lastWrongWord = wrongWords[-1] wrongWords = ShuffleList(wrongWords) if wrongWords[0] == lastWrongWord: wrongWords = wrongWords[1:] + [lastWrongWord] Clear() print('{1} of {2} {0}%'.format(100.0 * count / lengthOfSections, count, lengthOfSections)) futureWrongWords = [] for word in wrongWords: question, answer = word['question'], word['answer'] result = AskQuestion(question,answer) if question not in session.keys(): session[question] = {'tried' : 0, 'failed' : 0} if result == None: return (session, vocabWords) elif result == False: word['failed'] += 1 session[question]['failed'] += 1 futureWrongWords.append(word) while result == False: if result != "": Clear() result = AskQuestion(question,answer) word['tried'] += 1 session[question]['tried'] += 1 word['lastAsked'] = GetTime() wrongWords = futureWrongWords return (session, vocabWords)