Как рассчитать сумму вывода цикла for - PullRequest
2 голосов
/ 09 мая 2019

Я построил цикл for, который просматривает значения списка, вводит их в качестве ключей для двух словарей и умножает значения двух ключей вместе.

Когда вы печатаете, это дает каждое умноженное значение в новой строке.

Я бы хотел сложить значения вместе, чтобы получить общую сумму, но пока не смог.

#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

Я бы хотел получить сумму этих значений, но пока не смог.

Для этого я пробовал sum (t), которая выдает ошибку:

"> TypeError: объект 'int' не повторяется"

Я подумал, что это может быть ошибка конкатенации, поэтому я попытался использовать sum (int (t)), но это не работает.

Я также пытался превратить его в list () "x = list (t), а также заменить строки запятыми на .replace("\n",",").

Все отзывы приветствуются, я думаю, что это, вероятно, легко решить, но я просто не смог туда добраться - спасибо.

Ответы [ 3 ]

1 голос
/ 09 мая 2019

Ошибка не требует пояснений: TypeError: 'int' object is not iterable при выполнении t.Это означает, что t - это просто символьное значение типа int.Для , встроенного в sum(), требуется итерация для работы.

Вам нужно добавить int к чему-то для каждой итерации:

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

Выходы:

646

Однако вы можете создать генераторное понимание и использовать встроенную функцию sum():

print (sum ( int(Dictionary1[a])*int(Dictionary2[a]) for a in List1))
1 голос
/ 09 мая 2019

Вот понимание списка, которое делает работу

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

Вывод:

646
1 голос
/ 09 мая 2019

Если я вас правильно понял и думал простейшим образом, вы можете назначить переменную и складывать ее в каждой итерации, например:

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

print(res)

Редактировать: И как @patrick предлагает и обсуждает в этом посте , имя переменной отредактировано, чтобы не быть sum

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...