inp = int(input("Enter a number:"))
for i in inp:
n = n + i;
print (n)
... génère une erreur: 'int' object is not iterable
Je voulais connaître le total en ajoutant chaque chiffre, par exemple 110. 1 + 1 + 0 = 2. Comment faire cela?
Merci
Tout d'abord, perdez cet appel en int
- vous convertissez une chaîne de caractères en un entier, ce qui n'est pas ce que vous voulez (vous voulez traiter chaque caractère comme son propre numéro). Changement:
inp = int(input("Enter a number:"))
à:
inp = input("Enter a number:")
Maintenant que inp
est une chaîne de chiffres, vous pouvez la parcourir, chiffre par chiffre.
Ensuite, attribuez une valeur initiale à n
- en l'état actuel du code, vous obtiendrez une NameError
puisque vous ne l'initialisez jamais. Vous voulez probablement n = 0
avant la boucle for
.
Ensuite, considérons à nouveau la différence entre un caractère et un entier. Vous avez maintenant:
n = n + i;
qui, outre le point-virgule inutile (Python est une syntaxe basée sur l'indentation), tente de faire l'addition du caractèrei au entier n - qui ne fonctionnera pas! Alors, ceci devient
n = n + int(i)
transformer le caractère '7'
en entier 7
, et ainsi de suite.
essayer:
for i in str(inp):
Cela va parcourir les caractères dans la représentation sous forme de chaîne. Une fois que vous avez chaque personnage, vous pouvez l'utiliser comme un numéro séparé.
peut-être que vous essayez de
for i in range(inp)
Je viens d'avoir cette erreur parce que je n'utilisais pas range ()
Note latérale: si vous voulez obtenir la somme de tous les chiffres, vous pouvez simplement faire
print sum(int(digit) for digit in raw_input('Enter a number:'))
Eh bien, vous voulez traiter la chaîne représentant le nombre, en itérant sur les chiffres, pas le nombre lui-même (qui est une entité abstraite qui pourrait être écrite différemment, comme "CX" en chiffres romains ou "0x6e" hexadécimal (tous deux pour 110) ou peu importe).
Donc:
inp = input('Enter a number:')
n = 0
for digit in inp:
n = n + int(digit)
print(n)
Notez que le n = 0
est requis (quelque part avant l'entrée dans la boucle). Vous ne pouvez pas prendre la valeur d'une variable qui n'existe pas (et le côté droit de n = n + int(digit)
prend la valeur de n
). Et si n
existe à ce moment-là, cela pourrait contenir quelque chose de complètement différent de vos besoins actuels, ce qui entraînerait un comportement inattendu. vous devez vous prémunir contre cela.
Cette solution ne tente pas de garantir que l'entrée fournie par l'utilisateur est en réalité un nombre. Je laisserai ce problème à votre réflexion (indice: tout ce dont vous avez besoin se trouve dans le tutoriel sur Python ).
Les instructions for .. in
supposent que vous utilisiez un type pour lequel un itérateur est défini. Un type simple int n'a pas d'itérateur.
Comme ghill l'avait déjà mentionné
inp = int(input("Enter a number:"))
n = 0
for i in str(inp):
n = n + int(i);
print n
Lorsque vous parcourez quelque chose, le mot-clé est "IN", pensez-y toujours comme une liste de quelque chose. Vous ne pouvez pas passer en boucle par un entier simple. Par conséquent, ce n'est pas itérable.
Prenez votre entrée et assurez-vous que c'est une chaîne pour qu'elle soit itérable.
Effectuez ensuite une compréhension de la liste et modifiez chaque valeur en un nombre.
Maintenant, vous pouvez faire la somme de tous les nombres si vous voulez:
inp = [int(i) for i in str(input("Enter a number:"))]
print sum(inp)
Ou, si vous voulez vraiment voir la sortie pendant son exécution:
def printadd(x,y):
print x+y
return x+y
inp = [int(i) for i in str(input("Enter a number:"))]
reduce(printadd,inp)
N'en faites pas une int()
, mais faites-en une range()
pour résoudre ce problème.
inp = range(input("Enter a number: "))
Vous pouvez essayer de changer for i in inp:
En for i in range(1,inp):
L'itération ne fonctionne pas avec un seul int. Au lieu de cela, vous devez lui fournir une plage d'exécution.
Une réponse possible à la question de OP-s ("Je voulais connaître le total en ajoutant chaque chiffre, par exemple 110. 1 + 1 + 0 = 2. Comment faire cela?") Est d'utiliser la fonction intégrée divmod ()
num = int(input('Enter a number: ')
nums_sum = 0
while num:
num, reminder = divmod(num, 10)
nums_sum += reminder