Python Erreur: 'int' object n'est pas itérable
Je suis en train d'écrire un petit test de mathématiques programme pour mon Python classe, mais je reçois un message d'erreur avec le sum()
fonction. L'erreur est:
'int' object is not iterable.
Voici mon code:
import random
import math
def main():
print('This is a simple math quiz that will test your addition skills.\n')
print('\tGood Luck!\n\n')
# Get two random integers
num1 = random.randint(1, 1001)
num2 = random.randint(1, 1001)
print('What is the sum of ', num1, ' and ', num2, '?')
student_answer = int(input('Enter your answer, then press Enter: '))
answer = sum(num1, num2)
if student_answer == answer:
print('Congratulations! You got it right!')
else:
print('Sorry, your answer is not correct!')
print(answer)
main()
def sum(number1, number2):
return number1 + number2
Erreur:
Traceback (most recent call last):
File "C:\Users\Terrence\Desktop\Python Assignments\Chapter 6\Math Quiz.py", line 29, in <module>
main()
File "C:\Users\Terrence\Desktop\Python Assignments\Chapter 6\Math Quiz.py", line 20, in main
answer = sum(num1, num2)
TypeError: 'int' object is not iterable
- Quelle erreur avez-vous?
Vous devez vous connecter pour publier un commentaire.
Le problème est que, au moment de l'appel
main
, vous n'avez pas encore définisum
.Alors, pourquoi n'est-ce pas un
NameError
? Parce qu'il y a déjà un builtin nommésomme
, de sorte que vous êtes d'appel que. Et cette fonction nécessite un objet iterable de valeurs, pas deux valeurs distinctes. (Si vous ne savez pas ce qu'est un objet iterable est: "C'est quelque chose que vous pouvez passer en boucle dans unfor
boucle, comme une liste.) Ainsi, il semble à votre premier argument un entier aléatoire—et tente de l'utiliser comme un objet iterable. Et c'est pourquoi vous obtenez cette erreur.Si vous déplacez votre définition jusqu'au-dessus de l'appel à
main()
, votre code fonctionne. Cependant, il sera toujours une source de confusion. C'est la raison pour laquelle il est préférable d'éviter de donner vos fonctions le même nom que l'un des objets internes.Comme une note de côté, la fonction que vous voulez définir existe déjà, comme
operator.add
. La raisonadd
et les amis sont planquées dans lesoperator
module, c'est que vous n'avez généralement pas besoin d'eux. Si vous souhaitez simplement ajouter deux nombres,a + b
est toujours plus claire quesum(a, b)
. Vous n'aurez besoin que d'une fonction distincte lorsque vous avez besoin pour passer cette fonction autour (par exemple, pour l'utiliser comme un argument pourmap
).sum
est déjà un builtin fonction!Utilisation:
sum(list)
Dans votre code:
sum
fonction est ignorée. Aussi, le groupe builtinsum
prend n'importe quel itérable (et éventuellement une valeur de départ), doncsum(list)
n'est pas une très bonne description de l'utilisation.Place de la fonction somme sur le haut de la fonction principale.
ex:
Ensuite appeler la fonction principale.
Le problème est qu'un int ne peut pas être un itérateur en somme de construire en fonction , vous avez besoin de faire une liste :