Создание квадратичного факторизатора, в то время как цикл его портит

#python-3.x #list #for-loop #math #while-loop

#python-3.x #Список #для цикла #математика #цикл while

Вопрос:

Программа работает отлично, просто, если я решу использовать цикл 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:

Ваш while цикл не завершается, если только ответ не будет сгенерирован в конкретной комбинации i , j с которой вы начинаете. Может быть, переписать на:

 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
 

Это не оптимально (оно будет выполняться через все комбинации i и j даже после нахождения ответа). Или, может быть, вам нужен список всех ответов?

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