制作一个二次因子,While 循环把它搞砸了

时间:2021-02-24 02:41:43

标签: python-3.x list for-loop math while-loop

<块引用>

该程序运行良好,只是如果我决定使用 while 循环,它不会在没有错误的情况下给我任何东西,但是如果我将其标记为标签,则一切正常。我希望它不被标记出来的原因是它会回报列表中的数字,使其成为未来的一个问题,出于某种原因,一切都打破了因素列表。我需要帮助来弄清楚如何修复它。

    Factor_list = []
    Solved_Diamond_List =[]
    z = x2 * num
    No_Answer = True
    if z > 0:
        for i in range(-z, 0):
            if z % i == 0:
                    Factor_list.append(i)
        for i in range(1, z + 1):
            if z % i == 0:
                Factor_list.append(i)
    if z < 0:
        for i in range(z, 0):
            if z % i == 0:
                Factor_list.append(i)
        for i in range(1, -z + 1):
            if z % i == 0:
                Factor_list.append(i)
    for i in Factor_list:
        for j in Factor_list:
            while No_Answer == True:
                if (i + j) == x:
                    if (i * j) == z:
                        Solved_Diamond_List.append(i)
                        Solved_Diamond_List.append(j)
                        No_Answer = False```

1 个答案:

答案 0 :(得分:0)

您的 while 循环不会终止,除非答案是以您开始的 ij 的特定组合生成的。也许重写为:

for i in Factor_list:
    for j in Factor_list:
        if No_Answer:
            if (i + j) == x and (i * j) == z:
                Solved_Diamond_List.append(i)
                Solved_Diamond_List.append(j)
                No_Answer = False

这不是最优的(即使在找到答案后,它也会遍历 ij 的所有组合)。或者,您可能想要所有答案的列表?

for i in Factor_list:
    for j in Factor_list:
         if (i + j) == x and (i * j) == z:
             Solved_Diamond_List.append((i, j))