Python – TypeError: ‘int’-object kan niet worden herhaald

Hier is mijn code:

import math
print("Hey, lets solve Task 4 :)")
number1 = input("How many digits do you want to look at? ")
number2 = input("What would you like the digits to add up to? ")
if number1 == 1:
    cow = range(0,10)
elif number1 == 2:
    cow = range(10,100)
elif number1 == 3:
    cow = range(100,1000)
elif number1 == 4:
    cow = range(1000,10000)
elif number1 == 5:
    cow = range(10000,100000)
elif number1 == 6:
    cow = range(100000,1000000)
elif number1 == 7:
    cow = range(1000000,10000000)
elif number1 == 8:
    cow = range(10000000,100000000)
elif number1 == 9:
    cow = range(100000000,1000000000)
elif number1 == 10:
    cow = range(1000000000,10000000000)
number3 = cow[-1] + 1
n = 0
while n < number3:
    number4 = list(cow[n])
    n += 1

Ik ben op zoek naar een lus zodat het voor elk element in de lijst wordt opgesplitst in elk van zijn karakters. Stel bijvoorbeeld dat het nummer 137in de lijst stond, dan zou het worden omgezet in [1,3,7]. Dan wil ik deze getallen bij elkaar optellen (daar ben ik nog niet aan begonnen, maar ik heb wel enig idee hoe ik dat moet doen).

Ik krijg echter steeds deze foutmelding:

TypeError: 'int' object is not iterable

Wat doe ik verkeerd?


Antwoord 1, autoriteit 100%

Uw probleem is met deze regel:

number4 = list(cow[n])

Het probeert cow[n]te nemen, wat een geheel getal retourneert, en er een lijst van te maken. Dit werkt niet, zoals hieronder wordt aangetoond:

>>> a = 1
>>> list(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>>

Misschien wilde je cow[n]ineen lijst zetten:

number4 = [cow[n]]

Bekijk hieronder een demonstratie:

>>> a = 1
>>> [a]
[1]
>>>

Ik wilde ook twee dingen bespreken:

  1. Je while-statement mist een :aan het einde.
  2. Het wordt als zeer gevaarlijk beschouwd om inputop die manier te gebruiken, omdat het zijn invoer als echte Python-code evalueert. Het zou hier beter zijn om raw_inputte gebruiken en vervolgens de invoer te converteren naar een geheel getal met int.

Om de cijfers op te splitsen en ze vervolgens toe te voegen zoals je wilt, zou ik eerst van het nummer een string maken. Omdat strings itereerbaar zijn, kun je sum:

>>> a = 137
>>> a = str(a)
>>> # This way is more common and preferred
>>> sum(int(x) for x in a)
11
>>> # But this also works
>>> sum(map(int, a))
11
>>>

Antwoord 2, autoriteit 3%

Dit is heel eenvoudig, u probeert een geheel getal naar een lijstobject te converteren !!! natuurlijk zal het mislukken en het zou moeten …

Om dit aan u te demonstreren/bewijzen met behulp van het door u verstrekte voorbeeld … gebruik gewoon de typefunctie voor elk geval zoals hieronder en de resultaten spreken voor zich!

>>> type(cow)
<class 'range'>
>>> 
>>> type(cow[0])
<class 'int'>
>>> 
>>> type(0)
<class 'int'>
>>> 
>>> >>> list(0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>> 

Antwoord 3, autoriteit 2%

Als het geval is:

n=int(input())

In plaats van -> voor i in n: -> geeft fout- ‘int’ object is niet itereerbaar

Gebruik -> voor i in bereik (0,n): -> werkt prima..!


Antwoord 4

def hourglassSum(arr):
    sum1 = []
    # Write your code here
    for i in range(0,len(arr)-2):
        for j in range(0,len(arr)-2):
            x = sum(arr[i][j]+arr[i+1][j+1]+arr[i+2][j]+arr[i][j+1]+arr[i][j+2]+arr[i+2][j+1]+arr[i+2][j+2])
            sum1.append(x)
            #sum1.append(arr[i][j]+arr[i][j+1]+arr[i][j+2]+arr[i+1][j+1]+arr[i+2][j]+arr[i+2][j+1]+arr[i+2][j+2])
    return max(sum1)
# Why x = sum(arr[i][j]+arr[i+1][j+1]+arr[i+2][j]+arr[i][j+1]+arr[i][j+2]+arr[i+2][j+1]+arr[i+2][j+2]) is showing TypeError: 'int' object is not iterable

en als we het commentaar statement onder het statement uitvoeren, dan werkt het correct..

Other episodes