2
votes

Comment calculer la somme de la sortie d'une boucle for

J'ai construit une boucle for qui parcourt les valeurs d'une liste, les saisit comme clés pour deux dictionnaires et multiplie les 2 valeurs clés ensemble.

Lorsque vous imprimez, chaque valeur multipliée sur une nouvelle ligne .

J'aimerais additionner les valeurs pour obtenir un total combiné, mais je n'ai pas encore été en mesure de le faire.

#The list and two dictionaries 

List1 = ['coffee', 'tea' , 'cake' , 'scones' ]  

Dictionary1 ={'coffee' :'4', 'tea' :'2' , 'cake' :'6' , 'scones' :'8' }

Dictionary2 = { 'coffee':'25' , 'tea':'18' , 'cake':'45' , 'scones':'30' }


#the for function which runs through the list

for i in range(len(List1)): 
  t = ((int(Dictionary1[List1[i]])*int(Dictionary2[List1[i]]))) 

#now if you print t the following is printed:

100
36
270
240

J'aimerais pour obtenir la somme de ces valeurs, mais jusqu'à présent je n'ai pas pu.

Pour ce faire, j'ai essayé sum (t) qui produit l'erreur:

"> TypeError: l'objet 'int' n'est pas itérable"

J'ai pensé que c'était peut-être une erreur de concaténation alors j'ai essayé sum (int (t)) mais cela ne fonctionne pas.

J'ai aussi essayé de le transformer en list () " x = list (t) ainsi que le remplacement des lignes par des virgules par .replace("\n",",").

Tous les commentaires sont les bienvenus, je pense que c'est probablement facilement résolu mais je n'ai tout simplement pas pu y arriver - merci.


0 commentaires

3 Réponses :


1
votes

Si je vous comprends bien et que vous réfléchissez de la manière la plus simple, vous pouvez attribuer une variable et l'ajouter à chaque itération comme:

res = 0
for i in range(len(List1)): 
  t = ((int(Dictionary1[List1[i]])*int(Dictionary2[List1[i]])))
  res += t

print(res)

Modifier: Et comme @patrick le suggère et discuté dans ce post , le nom de la variable modifié ne doit pas être sum


1 commentaires

Pour clarifier si nécessaire, res + = t signifie res = res + t . Puisqu'il s'agit d'une question fondamentale, le lecteur pourrait ne pas être familier avec la notation + =.



1
votes

L'erreur est explicite: TypeError: l'objet 'int' n'est pas itérable lors de l'exécution de t . Cela signifie que t est juste une valeur int sigulaire. Le intégré à sum () a besoin un itérable sur lequel opérer.

Vous devez ajouter votre int à quelque chose pour chaque itération:

print (sum ( int(Dictionary1[a])*int(Dictionary2[a]) for a in List1))

Sorties:

646

Vous pouvez cependant créer une compréhension du générateur et utiliser le intégré fonction sum () également:

List1 = ['coffee', 'tea' , 'cake' , 'scones' ]  

Dictionary1 ={'coffee' :'4', 'tea' :'2' , 'cake' :'6' , 'scones' :'8' }

Dictionary2 = { 'coffee':'25' , 'tea':'18' , 'cake':'45' , 'scones':'30' }


# accumulate your values into s
s = 0
for i in range(len(List1)): 
  t = ((int(Dictionary1[List1[i]])*int(Dictionary2[List1[i]]))) 
  s += t

print(s) # print sum


0 commentaires

1
votes

Voici une liste de compréhension qui fait le travail

646

Sortie:

total = sum(int(Dictionary1[x]) * int(Dictionary2[x]) for x in List1)


0 commentaires