Python 而loop只是无缘无故地随机停止工作?

Python 而loop只是无缘无故地随机停止工作?,python,while-loop,Python,While Loop,我目前正在用Python编写我的第一个程序,这基本上是一个词汇学习游戏,但由于某种原因,我突然在一个函数中遇到了一些问题,该函数最初运行得很好,但开始运行得很糟糕(中断得太晚),现在根本不起作用。我一直在搜索所有的互联网和我的代码,但我真的找不到任何东西。只是没有任何意义 def Spiel_Spanisch_Deutsch(): puntos = 0 intentos = 0 while puntos < 20: for vokabel in v

我目前正在用Python编写我的第一个程序,这基本上是一个词汇学习游戏,但由于某种原因,我突然在一个函数中遇到了一些问题,该函数最初运行得很好,但开始运行得很糟糕(中断得太晚),现在根本不起作用。我一直在搜索所有的互联网和我的代码,但我真的找不到任何东西。只是没有任何意义

def Spiel_Spanisch_Deutsch():
    puntos = 0
    intentos = 0

    while puntos < 20:
        for vokabel in vokabeln:
            antwort = input(vokabel.spanisch + ": ")
            if antwort == vokabel.deutsch:
                print("Corecto! {} = {}\n".format(vokabel.spanisch, vokabel.deutsch))
                puntos += 1
                intentos += 1
                print("Tienes {} de 20 puntos!\n ".format(puntos))
            else:
                print("Falso! Estudia mejor! La corecta respuensa seria: {}\n".format(vokabel.deutsch))
                intentos += 1
                print("Tienes {} de 20 puntos!\n ".format(puntos))
    print("You needed {} tries to get 20 right!\n".format(intentos)
def Spiel_Spanisch_Deutsch():
puntos=0
intentos=0
当Punto<20时:
对于vokabeln中的vokabel:
antwort=输入(vokabel.spanisch+“:”)
如果antwort==vokabel.deutsch:
打印(“Corecto!{}={}\n”.format(vokabel.spanisch,vokabel.deutsch))
puntos+=1
intentos+=1
打印(“Tienes{}de 20 puntos!\n”。格式(puntos))
其他:
打印(“Falso!Estudia mejor!La corecta Respensa seria:{}\n.”格式(vokabel.deutsch))
intentos+=1
打印(“Tienes{}de 20 puntos!\n”。格式(puntos))
打印(“您需要{}尝试获得正确的20!\n”。格式(intentos)
当变量puntos>20时,while循环不会中断,但很明显,点计数器工作,并且值在增加,因为在我打印的文本中,分数在增加。谢谢!

while puntos<20:
对于vokabeln中的vokabel:
antwort=输入(vokabel.spanisch+“:”)
#删除不相关的代码。
如果问题是在达到所需的Punto(点)数时,它没有停止,那么您应该意识到,当内部循环仍在运行时,外部循环无法退出。外部循环检查仅在每个内部循环完成后进行(整个内部循环,而不仅仅是一次迭代)

例如,假设
vokabeln
(词汇?)中有15项内容,而你是一名完美的翻译人员,所以一切都会正确

因此,外部循环的第一次迭代将以
puntos==15
结束

然后,它将进入该外循环的第二次迭代,并在内循环中问你完整的十五个问题,即使你在回答前五个问题后已经得到了20分

另一方面,如果它没有明显的原因而停止工作,可能是因为您的原始
vokabeln
n
条目,其中
n
是20的一个因数(即1、2、4、5、10),或者你错得太多,以至于内环的末端恰好与给出你第二十分的答案一致

如果您想在获得足够正确答案后立即停止,可以使用以下方法:

def Spiel_Spanisch_Deutsch():
puntos=0
intentos=0
NECESTAR=20#我对西班牙语的可疑尝试:-)
而puntos=必须启动:中断
打印(f“您需要{intentos}尝试使{necestar}正确!”)
我还对代码进行了一些清理,以避免重复递增
intentos
(尝试?)之类的内容


我使用了f字符串(Python3.6+),因为它们比
str.format()
好得多,因为您要打印的东西正好位于您要打印它的输出字符串中。如果要更改它或找出它的来源,不必在
str.format()
参数列表中搜索它。

它不是随机停止的,而是意外停止的。我建议您在调试器中逐步检查代码并检查变量的值,以确定问题所在。请打印到计数器并验证是否达到20