Если все элементы соответствуют требованию, не используя «если все» - PullRequest
3 голосов
/ 10 мая 2019

Я изучаю Python с книгой: упражнение состоит в том, чтобы создать программу, которая печатает True, если все числа в списке имеют все шансы.

Я получаю это с таким подходом

if all(x % 2 == 1 for x in list):

Но подход «если все» еще не объяснен.Они используют только while, if, for и booleans в примерах.Кроме того, кажется рефлексивным упражнением о том, что это возможно, а может и нет.Это можно сделать с помощью основных инструментов, описанных выше?

Ответы [ 2 ]

4 голосов
/ 10 мая 2019

Если вы посмотрите на документы: https://docs.python.org/3/library/functions.html#all

все (повторяемые).
Верните True, если все элементы итерируемого являются истинными (или если итерируемое пусто). Эквивалентно:

def all(iterable):
    for element in iterable:
        if not element:
            return False
    return True

Так if all(x % 2 == 1 for x in li): примерно переводится как

def are_all_odds(num_list):

    #Flag to keep track if we encounter an even number
    flag = True
    for num in num_list:
        #Once we encounter a even number, we break the for loop
        if num % 2 != 1:
            flag = False
            break

    #Return the flag
    return flag

Мы можем проверить эту функцию, выполнив

print(are_all_odds([1, 2, 3, 4]))
#False
print(are_all_odds([1, 3, 5]))
#True

Также просто предложение, list - это встроенное ключевое слово python, поэтому не используйте его в переменных:)

4 голосов
/ 10 мая 2019

Да, это возможно.

Код Python, который вы написали, очень идиоматичен, продолжайте в том же духе.

Чтобы увидеть, как сделать это по-другому, вы можете взглянуть на менее продвинутые языки программирования, такие как C. Это очень простой язык программирования, в котором отсутствуют функции для этого оператора if all. Поиск «c all elements array true» должен дать вам код, который вы ищете. Для такого простого куска кода его легко перевести обратно на Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...