Aquí está mi código:
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
Estoy buscando hacer un bucle para que cada elemento de la lista se divida en cada uno de sus caracteres. Por ejemplo, diga el número 137
estaba en la lista, entonces se convertiría en [1,3,7]
. Luego quiero sumar estos números (todavía no he comenzado, pero tengo una idea de cómo hacerlo).
Sin embargo, sigo recibiendo este mensaje de error:
TypeError: 'int' object is not iterable
¿Qué estoy haciendo mal?
Tu problema es con esta línea:
number4 = list(cow[n])
trata de tomar cow[n]
, que devuelve un número entero, y lo convierte en una lista. Esto no funciona, como se demuestra a continuación:
>>> a = 1
>>> list(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>>
Tal vez quisiste poner cow[n]
adentro una lista:
number4 = [cow[n]]
Vea una demostración a continuación:
>>> a = 1
>>> [a]
[1]
>>>
Además, quería abordar dos cosas:
- A su instrucción while le falta un
:
al final. - Se considera muy peligroso utilizar
input
así, ya que evalúa su entrada como código Python real. Sería mejor aquí para usarraw_input
y luego convertir la entrada a un número entero conint
.
Para dividir los dígitos y luego agregarlos como quieras, primero convertiría el número en una cadena. Entonces, dado que las cadenas son iterables, puede usar 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
>>>
-
Gracias por contestar tan rápido. ¿Cómo dividiría el número en caracteres individuales? Intenté poner una lista (número 4) debajo, pero eso hace que se ejecute para siempre cuando lo ejecuto en la terminal.
– usuario2908001
22 de octubre de 2013 a las 16:48
-
Los enteros no tienen caracteres. Sin embargo, podría convertirlo en una cadena, lo que hace:
str(..)
. Es posible que no necesite convertirlo en una lista después de eso, dependiendo de lo que pretenda hacer con él, porque las cadenas son iterables y producen sus caracteres constituyentes.– tipo todo
22 de octubre de 2013 a las 16:54
-
@ Mikey6743 – Mira mi edición. Si bien podría usar un bucle for para esto, la opción más rápida es usar
sum
.– usuario2555451
22 de octubre de 2013 a las 16:58
-
Esto es genial chicos, ¡muchas gracias! Acabo de empezar a aprender a codificar 🙂 Todavía estoy confundido sobre cómo repetirlo para que se repita sin usar un bucle. Por ejemplo, digamos que el usuario quiere mirar 3 dígitos, entonces debo calcularlo de 100 a 999. Por ejemplo, la suma de los números enteros en 100 = 1 y la suma de los números enteros en 999 = 27.
– usuario2908001
22/10/2013 a las 19:28
-
@ Mikey6743 – Hmm, entonces es posible que tengas que usar un bucle. Sin embargo, dado que el tema de esta pregunta era el
TypeError
(que corrige mi publicación), ¿por qué no cerrar primero esta pregunta como respondida (haga clic en la marca junto a mi respuesta) y luego haga otra pregunta que se centre en ese problema en particular? Obtendrás mejor ayuda de esa manera. Sin embargo, primero debe convertir el número en una cadena para poder dividirlo en dígitos.– usuario2555451
22/10/2013 a las 20:07
Agustín José
Si el caso es:
n=int(input())
en lugar de -> for i in n:
-> da error- int
el objeto no es iterable
Usar -> for i in range(0,n):
funciona bien..!
¡Esto es muy simple, está tratando de convertir un número entero en un objeto de lista! por supuesto que fallará y debería…
Para demostrar/probarle esto usando el ejemplo que proporcionó… ¡simplemente use la función de tipo para cada caso como se muestra a continuación y los resultados hablarán por sí mismos!
>>> 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
>>>
usuario16526150
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
y si ejecutamos la declaración de comentario debajo de la declaración, entonces se ejecuta correctamente.
Qué esperas
list(cow[n])
hacer ?–Jon Clements
22/10/2013 a las 16:39
Pista: puedes dar
range()
argumentos dinámicos también:cow = range(10 ** (number1 - 1) if number1 > 1 else 0, 10 ** number1)
le daría exactamente los mismos resultados que todos susif
declaraciones, en una sola línea.– Martijn Pieters
♦
22 de octubre de 2013 a las 16:42
@MartijnPieters Estaba pensando en eso, pero piensa en IIRC, 10 ** 0 es 1, no 0
–Jon Clements
22 de octubre de 2013 a las 16:43
@JonClements: ajustado. 🙂 Eso
0
es bastante inconsistente en este caso; todos los demás números son potencias de 10..– Martijn Pieters
♦
22/10/2013 a las 16:45