我正在尝试构建一个多项选择测验,该测验从池中随机选择问题,然后删除已问到的问题,然后再随机选择另一个问题,同时保持得分(在这种情况下,“ 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()
答案 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