Задача: Найдите недостающее число

Создайте функцию, которая принимает список чисел от 1 до 10 (исключая одно число) и возвращает недостающее число.

Примеры:

missing_num([1, 2, 3, 4, 6, 7, 8, 9, 10]) ➞ 5

missing_num([7, 2, 3, 6, 5, 9, 1, 4, 8]) ➞ 10

missing_num([10, 5, 1, 2, 4, 6, 8, 3, 9]) ➞ 7

Примечания:

  • Список чисел будет несортированным (не по порядку).
  • Не будет хватать только одного числа.

Варианты решений:

def missing_num(lst):
    return 55 - sum(lst)
def missing_num(lst):
    for n in range(1, 11):
        if n not in lst:
            return(n)
def missing_num(lst):
    return list(set(range(1, 11)) - set(lst))[0]
def missing_num(lst):
    return sum(range(1, 11)) - sum(lst)

2 комментария к “Задача: Найдите недостающее число”

  1. Анжелка

    Формально – верны все решения, но их можно улучшить:
    1,4) Используют одну и ту же идею “математического” способа, однако вариант 4 в отличие от варианта 1 имеет потенциал для параметризования функции, а именно к аргументам функции добавить n: int = 10, которое будет подставляться в sum(range(1, n + 1)), добавляя универсальности решению. Также сумму чисел оптимально искать по формуле арифметической прогрессии за константное время вместо использования sum+range.
    2) Прямо топорное решение того, что требуют, читабельность 10/10 (без сарказма), считаю что улучшению не подлежит.
    3) Просто режет глаз выражение list(some_collection)[0], так как ВСЯ коллекция приводится к типу список (вся коллекция дублируется в памяти) и используется только один элемент из неё. Если нужно взять первый элемент из коллекции, то так и можно говорит питону “дай мне следующий (т.е. первый) элемент итерируемого объекта (т.е. коллекции) – next(iter(some_col))”

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *