Последовательность чисел генерируется лямбда-функцией: def generate_number(): return...

0 голосов
90 просмотров

Последовательность чисел генерируется лямбда-функцией:
def generate_number():
return lambda random_seed: (random_seed*693 + 5)%100
number = generate_number()
Член последовательности под номером i равен number(i). Последовательность начинается с первого элемента, признак конца последовательности — значение 0 (не входит в саму последовательность).
Найти количество чисел, кратных 7.
язык питон


Информатика (308 баллов) | 90 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

Def generate_number():
    return lambda random_seed: (random_seed*693 + 5)%100
number = generate_number()
def numbers():
    i = 0
    while True:
        elem = number(i)
        if elem != 0:
            yield elem
            i += 1
        else:
            break

print sum(1 for x in numbers() if x % 7 == 0)
______________________________

numbers - генерирует последовательность из условия
(x for x in iterable if cond(x)) - генерирует последовательность элементов interable, удовлетворяющих условию cond(x) /можно записать и через filter/

(148k баллов)
0

я так понимаю ответ 0? почему %print sum(x for x in numbers() if x % 7 == 0)

0

В данном случае считывание происходит не с клавиатуры, а мы прямо обращаемся к i-му члену последовательности number(i), следовательно в цикле while условие будет такое: number(i) != 0. А для перехода к следующему числу нужно увеличить i на 1.

0

Если вы посмотрите на определение numbers(), вы увидите как раз то, что хотите: сначала i = 0, затем вычисляется elem = number(i), если elem = 0, то процесс прекращается, иначе следующим членом становится elem, который и есть number(i), а i увеличивается на 1.

0

Вот тут опечатка: вместо print sum(x for x in numbers() if x % 7 == 0) должно быть print sum(1 for x in numbers() if x % 7 == 0).

0

(1 for x in numbers() if x % 7 == 0) работает так: numbers() - это исходная последовательность (вернее, генератор). for x in numbers() - работает так же, как и цикл. if x % 7 == 0 - отбирает все числа, делящиеся на 7. И для каждого числа в итоговый генератор добавляется единица. Получается, что в итоге получится последовательность из 1, в которой каждая единица соответствует числу, делящемуся на 7. Сумма единиц - количество.

0

Ответ будет 14.

0

В решении вашего соседнего задания (где нужно не количество, а сумма) надо как раз писать print sum(x for x in numbers() if x % 7 == 0), будет сумма чисел. Там ответ 735.

0

спасибо