2016-05-25 8 views
-2
def get_party_stats(families, table_size=6): 

    """To calculate the number of attendees and tables needed. 

    Args: 
     families(list): a 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 

    for people in families: 
     table_num += -(-len(people)//table_size) 
     people_num += len(people) 
    return people_num, table_num 

Как получить people_num вернуть 6, если len(people) только 3. Для table_num, имеющих отрицательные знаки в -(-len(people)//table_size), что это значит? Есть ли другой способ подсчета количества посетителей и таблиц, используя некоторые простые примеры? Спасибо.Некоторые вопросы функции

ответ

0

Поскольку вы суммируете размеры каждого семейства people_num, вы получите len(['Jan']) + len(['Jen', 'Jess']) + len(['Jem', 'Jack', 'Janis']) = 1 + 2 + 3 = 6.

Термин немного подлый, но вы поймете, что он делает, отметив это a // b == floor(a/b). Целочисленное деление c = a // b определено таким образом, что c является наибольшим целым числом, таким как c <= a/b (обратите внимание, что / означает float-division здесь). Это делает abs(a) // abs(b) != abs(a // b), когда a/b < 0, но это именно то, что вы хотите, вычисляя количество таблиц, необходимых в вашей функции.

Следующие результаты могут показать, что:

-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 

Другой (возможно, менее элегантно) способ расчета количества таблиц, необходимых данных people будет 1 + (len(people) - 1) // table_size.

Наконец, вся функция может быть намного короче, используя список-постижения:

def get_party_stats(families, table_size=6): 
    return (sum([len(f) for f in families]), 
      sum([-(-len(f) // table_size) for f in families])) 
+0

@ siwica я получаю первую часть о LEN(), второй части вопроса о разделении полов с отрицательными числами кажется немного запутанной. И последняя часть с использованием понимания списка, это довольно аккуратно, что-то отнять. Спасибо. – FriedRise

+0

@ siwica деления пола с отрицательными номерами в основном используются, когда? – FriedRise

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