Задать вопрос
@n293
Аналитик

На что заменить цикл for?

Есть задачка:
Проверьте, есть ли среди данных N чисел нули.

Формат ввода

Вводится число N, а затем N чисел.

Формат вывода

Выведите True, если среди введенных чисел есть хотя бы один нуль, или False в противном случае.

Мое решение:
print(any(int(input()) == 0 for _ in range(int(input()))))


Принимающая система не хочет его принимать, хотя работает нормально. Опытным путем было выяснено, что не хочет принимать из-за цикла for. Собственно, как изменить программу, чтобы избежать цикла?

Я пытался присобачить библиотеку itertools как-то так:
from itertools import chain
print(any(int(input()) == 0 in chain(range(int(input())))))


Но что-то вообще не очень вышло. Помогите пожалуйста!

UPD: забыл уточнить что вся эта радость в чисто "функциональном стиле" должна быть
  • Вопрос задан
  • 1866 просмотров
Подписаться 1 Простой 7 комментариев
Решения вопроса 2
@lega
0 in list(map(lambda r: int(r()), repeat(input, int(input()))))

Считывает значение N, далее считывает N чисел, потом проверяет вхождение.
Ответ написан
adugin
@adugin Куратор тега Python
Самый простой и буквальный способ:
result = '0' in input().split()
Можно усложнить:
result = not all(
    map(int, input().split())
)

UPD Тю, а что так скромно? Нужно наворотить больше функциональности!
from itertools import repeat

def ask(question, expected=int):
    return expected(input(question))

def ask_quantity():
    return ask('Введите количество чисел: ')

def ask_number():
    return ask('Введите число: ')

def call(func):
    return func()

def solve():
    return not(all(map(call, repeat(ask_number, ask_quantity()))))

if __name__ == '__main__':
    print(f'Результат: {solve()}')

Бонус - программа даёт ответ сразу после после ввода первого же нуля.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы