Почему я получаю TypeError: объект 'int' не повторяется в моем коде? - PullRequest
0 голосов
/ 06 сентября 2018

Я разрабатываю программу, которая выводит простые множители числа.

Вот код:

while True:
    x = int(input("Enter a positive number: "))
    if x >= 0:
        break

ranger = list(range(1, x+1))
counter = 0

#The first for loop checks if the number is a factor
for i in ranger:
    if x % i == 0:
        #The second for loop checks if the number is prime
        for element in range(1, i+1 ):
            if i % element == 0:
                counter += 1
                if counter == 2:
                    prime_factors = []
                    prime_factors += i
                #Counter having a value of 2 means the number is prime

print(prime_factors)

Я получаю сообщение об ошибке:

Traceback (most recent call last):
  File ".\primefactors.py", line 18, in <module>

    prime_factors += i
TypeError: 'int' object is not iterable

Но я не понимаю, почему я получаю эту ошибку.

Ответы [ 3 ]

0 голосов
/ 06 сентября 2018

Оператор сложения list определяется только для двух списков, а не для списка и целого числа. Python пытался выполнить list.__add__ для prime_factors и i, что включает в себя итерацию по элементам i. Вот где вы получили ошибку.

Правильная команда будет

prime_factors.append(i)

С этим изменением ваша программа правильно печатает только самый низкий простой множитель. Вам также необходимо переместить ваши инициализации и проверки в соответствующие места:

  • установить prime_factors в пустой список только в начале вашей программы.
  • установить counter обратно на 0 для каждого предполагаемого простого фактора.
  • проверьте значение counter только после того, как вы просмотрели все меньшие числа.
0 голосов
/ 06 сентября 2018

Когда левый операнд += является списком, python ожидает итерацию с правой стороны. Вместо этого вы можете использовать append или prime_factors +=[i]. Кроме того, похоже, что вы облажались или что-то еще; ваш нынешний код не имеет никакого смысла. Например, вашей prime_factors +=i строке всегда предшествует prime_factors = []. Если бы вы заменили += на append, вы получили бы те две строки, имеющие такую ​​же функциональность, как если бы у вас была одна строка, которая просто сказала prime_factors = [i].

0 голосов
/ 06 сентября 2018

Это должно быть prime_factors.append(i), поскольку вы добавляете к list с, используя .append(), а не оператор сложения:)

(python выдаст ошибки, если вы попытаетесь + a list и int, так как их невозможно сложить вместе)

...