尝试建立多项选择测验,但分数不断重置

时间:2019-07-11 07:10:54

标签: python

我正在尝试构建一个多项选择测验,该测验从池中随机选择问题,然后删除已问到的问题,然后再随机选择另一个问题,同时保持得分(在这种情况下,“ i”代表得分)。我当前的问题是分数不断重置,因为(我相信)在else / if语句末尾的“ frage()”调用将i设置为0

我尝试在frage()方法之外定义得分,并且通常将其移动。我还尝试制作一连串的elif语句,这样就不必在每个输入提示的末尾使用frage(),但是我觉得这会使代码不必要地笨拙。

我是不是从完全错误的方向开始进行测验,还是只是在某个地方犯了菜鸟错误?

#chooses a question randomly from the pool and prints it

def frage():

    random_idx = randint(0, len(question_pool) - 1)
    print(question_pool[random_idx] ['frage'])
    print(" ")
    print("A:", question_pool[random_idx] ['a'],)
    print("B:", question_pool[random_idx] ['b'],)
    print("C:", question_pool[random_idx] ['c'],)
    print("D:", question_pool[random_idx] ['d'])

#input prompt
    score = 0
    for i in range(0, len(question_pool) - 1):
        guess = input("Was glaubst?: ")
        guess = guess.lower()

#Result of input
        if guess == question_pool[random_idx]['antwort']:
            print(" ")
            print("Ja freilich")
            score = (score + 1)
            print((str(score)) + (" Punkte"))
            del question_pool[random_idx]
            frage()

        else:
            print(" ")
            print("Auweia")
            print((str(i)) + (" Punkte"))
            del question_pool[random_idx]
            frage()

3 个答案:

答案 0 :(得分:1)

您使用i,它是用于打印乐谱的循环计数器。将另一个计数器用于积分
编辑:
删除递归调用也将其删除,它应该可以正常工作

答案 1 :(得分:0)

众所周知,

score是一个变量,每次调用frage()时都会重新初始化。为了解决这个问题,您可以将score的值返回到函数外部的变量。

因此,不要从函数本身内部调用frage(),而是将分数(return score)返回到变量,然后再次调用frage()

所以不是:

if guess == question_pool[random_idx]['antwort']:
            print(" ")
            print("Ja freilich")
            score = (score + 1)
            print((str(score)) + (" Punkte"))
            del question_pool[random_idx]
            frage()

这样做:

if guess == question_pool[random_idx]['antwort']:
            print(" ")
            print("Ja freilich")
            score = (score + 1)
            print((str(score)) + (" Punkte"))
            del question_pool[random_idx]
            return score

调用函数时,请执行以下操作:

quiz_score += frage()

可以在while循环中重复执行此语句,直到满足特定条件为止(游戏结束时)

答案 2 :(得分:0)

如果您有更正确的数据提取方法,则不应该使用del,这是一个示例:

import random

def frage(pool):
    pool = pool.copy()
    poolLength = len(pool)
    score = 0
    while poolLength > 0:
        randomQuestion = pool.pop(random.randint(0, poolLength - 1))
        poolLength -= 1 #avoids recalculating length on each iteration. It can be impactful on big lists.
        for answerChoice in ['a', 'b', 'c', 'd']:
            print(answerChoice.upper() + ':', randomQuestion[answerChoice])
        if input("Was glaubst?: ").lower() == randomQuestion['antwort']:
            score += 1
            print("\nJa freilich\n" + str(score) + " Punkte")
        else:
            print("\nAuweia")
    return score