2015-08-13 3 views
-2

Всякий раз, когда я выполняю этот код он возвращает только один total_hours вместо всех часов в значении массивовLooping и возвращает все значения в словаре

worker_hours = {'John': [8,8,4,3,8], 
       'Leo': [5,6,7,8,9], 
       'Sammy': [4,5,6,8,8], 
       'Ken': [8,8,8,8,8]} 

def calc_check(worker_list): 
    worker = '' 
    total_hours = 0 
    for worker in worker_list: 
     total_hours = sum(worker_list[worker]) * 13 
    return total_hours 

print(calc_check(worker_hours)) 

Как бы я идти о распечатке ключи и общее количество часов в списке * платить за новые строки? до сих пор у меня есть:

def calc_check(worker_list): 
    workers = '' 
    total_hours = 0 
    for worker in worker_list: 
    total_hours = sum(worker_list[worker]) 
    pay = total_hours * 13 
    return print("{}'s total check amount is {}".format(worker,pay)) 

print(calc_check(worker_hours)) 
+0

потребность + = вместо = – Maxqueue

ответ

1

Вы замена на total значения каждый раз, когда:

for worker in worker_list: 
    total_hours = sum(worker_list[worker]) * 13 

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

for worker in worker_list: 
    total_hours += sum(worker_list[worker]) * 13 

Обратите внимание, что вам не нужно предварительно define worker. Вы могли бы перебирает в значения из worker_list (который на самом деле является словарь, а не список), и вы могли бы суммировать суммы с вложенным выражением:

def calc_check(workers): 
    return sum(sum(hours) * 13 for hours in workers.values()) 

или суммировать все номера списка, приковав их, то умножения этой суммы на 13:

from itertools import chain 

def calc_check(workers): 
    return sum(chain.from_iterable(workers.values())) * 13 

Демонстрация:

>>> worker_hours = { 
...  'John': [8, 8, 4, 3, 8], 
...  'Leo': [5, 6, 7, 8, 9], 
...  'Sammy': [4, 5, 6, 8, 8], 
...  'Ken': [8, 8, 8, 8, 8]} 
>>> def calc_check(workers): 
...  return sum(sum(hours) * 13 for hours in workers.values()) 
... 
>>> calc_check(worker_hours) 
1781 
>>> from itertools import chain 
>>> def calc_check(workers): 
...  return sum(chain.from_iterable(workers.values())) * 13 
... 
>>> calc_check(worker_hours) 
1781 
+0

@Rainmaker падение 'return' ул atement, * или * построить одну большую строку и вернуть ее. Ваш 'return print (..)' немедленно выходит из цикла и функции (таким образом ограничивая вас первым работником) и возвращает 'None' (возвращаемое значение функции' print() '). –

Смежные вопросы