python - Some questions on a function -
def get_party_stats(families, table_size=6): """to calculate number of attendees , tables needed. args: families(list): list of members. table_size(int): table size of 6. returns: mixed: people count & table count. examples: >>> get_party_stats([['jan'], ['jen', 'jess'], ['jem', 'jack', 'janis']]) '(6, 3)' """ table_num = 0 people_num = 0 people in families: table_num += -(-len(people)//table_size) people_num += len(people) return people_num, table_num
how people_num
return 6
, if len(people)
3
. table_num
, having negative signs in -(-len(people)//table_size)
, achieve? there way count number of attendees , tables, using simple examples? thank you.
since sum on sizes of each family people_num
come out len(['jan']) + len(['jen', 'jess']) + len(['jem', 'jack', 'janis']) = 1 + 2 + 3 = 6
.
the -(-len(people)//table_size)
term bit sneaky realize noting a // b == floor(a / b)
. integer division c = // b
defined such c
biggest integer number such c <= / b
(note /
means float-division here). makes abs(a) // abs(b) != abs(a // b)
when a / b < 0
want when calculating number of tables necessary in function.
the following results may illustrate that:
-1 // 6 == -1 1 // 6 == 0 -2 // 6 == -1 2 // 6 == 0 ... ... -6 // 6 == -1 6 // 6 == 1 -7 // 6 == -2 7 // 6 == 1 -8 // 6 == -2 8 // 6 == 1 ... ... -12 // 6 == -2 12 // 6 == 2 -13 // 6 == -3 13 // 6 == 2
another (maybe less elegant) way of calculating number of tables necessary given people
1 + (len(people) - 1) // table_size
.
finally, whole function made lot shorter using list-comprehensions:
def get_party_stats(families, table_size=6): return (sum([len(f) f in families]), sum([-(-len(f) // table_size) f in families]))
Comments
Post a Comment