<MyRusakov.ru />

Программирование на C++ в Unreal Engine 5

Программирование на C++ в Unreal Engine 5

Данный курс научит Вас созданию игр на C++ в Unreal Engine 5. Курс состоит из 12 разделов, в которых Вас ждёт теория и практика. Причём, в качестве практики будет создан весьма крупный проект объёмом свыше 5000 строк качественного кода, который уже на практике познакомит Вас с принципами создания игр на C++ в Unreal Engine 5.

Параллельно с курсом Вы также будете получать домашние задания, результатом которых станет, в том числе, полноценная серьёзная работа для портфолио.

Помимо самого курса Вас ждёт ещё и очень ценный Бонус: «Тестирование Unreal-проектов на Python», в рамках которого Вы научитесь писать очень полезные тесты для тестирования самых разных аспектов разработки игр.

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

any() и all() в Python: как проверять условия в списках и других коллекциях

any() и all() в Python: как проверять условия в списках и других коллекциях

Поисковый запрос any all Python часто появляется у тех, кто уже умеет писать циклы, но хочет делать проверки короче и понятнее. В Python для этого есть две встроенные функции: any() и all(). Они особенно полезны при валидации данных, фильтрации списков, проверке прав доступа и анализе результатов.

Коротко: что делают any() и all()

any() возвращает True, если хотя бы один элемент истинный. all() возвращает True, если все элементы истинные.

values = [False, False, True]

print(any(values))  # True, потому что есть хотя бы один True
print(all(values))  # False, потому что не все элементы True

Под истинностью в Python понимается не только значение True. Например, непустая строка, ненулевое число и непустой список считаются истинными, а 0, пустая строка, None и пустая коллекция — ложными.

Пример с обычным циклом и с any()

Допустим, нужно понять, есть ли в списке оценок хотя бы одна неудовлетворительная оценка ниже 50.

scores = [78, 91, 43, 88]

has_failed = False
for score in scores:
    if score < 50:
        has_failed = True
        break

print(has_failed)  # True

То же самое через any() записывается в одну строку:

scores = [78, 91, 43, 88]

has_failed = any(score < 50 for score in scores)
print(has_failed)  # True

Здесь используется генераторное выражение: score < 50 for score in scores. Оно по очереди создаёт булевы значения, а any() проверяет, встретилось ли среди них хотя бы одно True.

Пример с all(): все ли условия выполнены

all() удобно использовать, когда нужно убедиться, что каждый элемент проходит проверку. Например, все пользователи должны быть совершеннолетними:

ages = [22, 19, 31, 18]

only_adults = all(age >= 18 for age in ages)
print(only_adults)  # True

Если хотя бы одно значение не подходит, результат будет False:

ages = [22, 17, 31, 18]

only_adults = all(age >= 18 for age in ages)
print(only_adults)  # False

Практический пример: валидация формы

Представим, что у нас есть данные регистрации. Нужно проверить, что имя не пустое, email содержит символ @, а пароль достаточно длинный.

user = {
    'name': 'Анна',
    'email': 'anna@example.com',
    'password': 'secure123'
}

checks = [
    len(user['name']) > 0,
    '@' in user['email'],
    len(user['password']) >= 8
]

if all(checks):
    print('Данные корректны')
else:
    print('Есть ошибки')

Такой подход хорош для простых проверок. Если нужно вывести конкретные сообщения об ошибках, лучше хранить проверки вместе с текстом ошибки.

def validate_user(user):
    errors = []

    if not user.get('name'):
        errors.append('Имя обязательно')

    if '@' not in user.get('email', ''):
        errors.append('Некорректный email')

    if len(user.get('password', '')) < 8:
        errors.append('Пароль должен быть не короче 8 символов')

    return errors

errors = validate_user(user)

if not any(errors):
    print('Регистрация разрешена')
else:
    print(errors)

В последнем примере any(errors) проверяет, есть ли хотя бы одна ошибка. Но в реальном коде для списков ошибок часто ещё проще писать if not errors.

Важная особенность: короткое замыкание

any() и all() не всегда проходят по всей коллекции. any() останавливается, как только находит первое истинное значение. all() останавливается, как только находит первое ложное значение.

def check_number(number):
    print('Проверяем:', number)
    return number > 10

numbers = [3, 7, 15, 20]

result = any(check_number(n) for n in numbers)
print(result)

Функция проверит 3, 7 и 15, а до 20 уже не дойдёт, потому что для any() достаточно первого успешного условия. Это делает код не только короче, но и эффективнее.

Пустые коллекции: частая ловушка

Поведение на пустых коллекциях нужно запомнить:

print(any([]))  # False
print(all([]))  # True

Почему all([]) возвращает True? Потому что в пустой коллекции нет ни одного элемента, который нарушает условие. Это математически корректно, но иногда неожиданно для новичков.

Если пустой список должен считаться ошибкой, проверяйте это отдельно:

products = []

if products and all(product['price'] > 0 for product in products):
    print('Все цены корректны')
else:
    print('Список пуст или есть некорректные цены')

any() и all() со словарями

Если передать словарь напрямую, Python будет перебирать его ключи, а не значения.

settings = {
    'debug': False,
    'cache': True,
    'email_notifications': False
}

print(any(settings))           # True, потому что ключи непустые строки
print(any(settings.values()))  # True, потому что cache = True

Если нужно проверять значения словаря, используйте .values(). Если пары ключ-значение — используйте .items().

users = {
    'alice': True,
    'bob': True,
    'admin': False
}

all_active = all(is_active for is_active in users.values())
print(all_active)  # False

Генератор лучше списка

Новички часто пишут так:

numbers = [1, 2, 3, 4, 5]

result = any([n % 2 == 0 for n in numbers])

Код работает, но создаёт лишний список в памяти. Лучше убрать квадратные скобки:

numbers = [1, 2, 3, 4, 5]

result = any(n % 2 == 0 for n in numbers)

Генераторное выражение особенно полезно на больших данных: элементы вычисляются по одному, а проверка может остановиться раньше конца коллекции.

Типичные ошибки

  • Путать проверку элементов и проверку самой коллекции. any(numbers) проверяет, есть ли в списке истинные элементы, а не то, что список непустой.
  • Забывать про пустой список. all([]) возвращает True, поэтому при необходимости добавляйте проверку if items and all(...).
  • Создавать список там, где нужен генератор. В большинстве случаев пишите any(condition for item in items).
  • Сравнивать с True. Вместо if any(... ) == True пишите просто if any(...).

Когда использовать any() и all()

Используйте any(), если вопрос звучит как: есть ли хотя бы один подходящий элемент? Используйте all(), если вопрос звучит как: все ли элементы подходят?

files = ['report.pdf', 'photo.jpg', 'archive.zip']

has_images = any(name.endswith('.jpg') for name in files)
all_are_pdf = all(name.endswith('.pdf') for name in files)

print(has_images)  # True
print(all_are_pdf) # False

Если вы хотите глубже разобраться не только в таких встроенных функциях, но и в том, как писать чистый, уверенный Python-код на практике, посмотрите курс Python с нуля до уровня уверенного разработчика. Он хорошо подходит тем, кто хочет системно закрыть пробелы и перейти от отдельных примеров к полноценным программам.

Итог

any() и all() — простые, но очень полезные инструменты Python. Они заменяют громоздкие циклы, делают проверки выразительными и помогают писать код ближе к естественному языку. Главное — помнить про истинность значений, короткое замыкание, поведение пустых коллекций и использовать генераторные выражения вместо лишних списков.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (https://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: https://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: https://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.