Как проверить, содержит ли кортеж только числа в Python

PythonBeginner
Практиковаться сейчас

Введение

В этом лабораторном занятии (LabEx) вы научитесь проверять, содержит ли кортеж (tuple) только числа (целые и вещественные) на Python. Вы начнете с определения числовых кортежей, изучив, как создавать кортежи, содержащие целые числа, вещественные числа или их смесь. Это включает создание файла numeric_tuple.py, добавление определений кортежей и запуск скрипта для наблюдения за выводом.

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

Определение числовых кортежей

На этом этапе вы научитесь определять кортежи (tuples), содержащие только числовые данные (целые и вещественные числа) на Python. Кортежи - это фундаментальная структура данных в Python, похожая на списки (lists), но с одной важной разницей: они неизменяемы (immutable), то есть их элементы не могут быть изменены после создания. Эта неизменяемость делает их полезными для представления фиксированных наборов данных.

Начнем с создания простого кортежа, содержащего целые числа:

  1. Откройте редактор VS Code.

  2. Создайте новый файл с именем numeric_tuple.py в директории ~/project.

    ## ~/project/numeric_tuple.py
    my_tuple = (1, 2, 3, 4, 5)
    print(my_tuple)
    
  3. Сохраните файл.

  4. Откройте терминал.

  5. Запустите скрипт с помощью команды python:

    python ~/project/numeric_tuple.py
    

    Вы должны увидеть следующий вывод:

    (1, 2, 3, 4, 5)
    

Теперь создадим кортеж, содержащий вещественные числа:

  1. Измените файл numeric_tuple.py, добавив в него вещественные значения:

    ## ~/project/numeric_tuple.py
    my_tuple = (1.0, 2.5, 3.7, 4.2, 5.9)
    print(my_tuple)
    
  2. Сохраните файл.

  3. Запустите скрипт снова:

    python ~/project/numeric_tuple.py
    

    Вы должны увидеть следующий вывод:

    (1.0, 2.5, 3.7, 4.2, 5.9)
    

Кортежи также могут содержать смесь целых и вещественных чисел:

  1. Измените файл numeric_tuple.py, добавив в него и целые, и вещественные значения:

    ## ~/project/numeric_tuple.py
    my_tuple = (1, 2.5, 3, 4.2, 5)
    print(my_tuple)
    
  2. Сохраните файл.

  3. Запустите скрипт:

    python ~/project/numeric_tuple.py
    

    Вы должны увидеть следующий вывод:

    (1, 2.5, 3, 4.2, 5)
    

В целом, вы можете определить кортежи, содержащие числовые данные, заключая числа (целые и вещественные) в круглые скобки () и разделяя их запятыми.

Использование all() с isinstance()

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

Сначала разберемся, что делают функции all() и isinstance():

  • all(iterable): Эта функция возвращает True, если все элементы итерируемого объекта (например, кортежа) являются истинными (или если итерируемый объект пуст). Она возвращает False, если хотя бы один элемент является ложным.
  • isinstance(object, classinfo): Эта функция возвращает True, если object является экземпляром classinfo (например, int, float). В противном случае она возвращает False.

Теперь создадим скрипт на Python для проверки, являются ли все элементы в кортеже целыми числами или вещественными:

  1. Откройте редактор VS Code.

  2. Создайте новый файл с именем check_numeric_tuple.py в директории ~/project.

    ## ~/project/check_numeric_tuple.py
    def is_numeric_tuple(my_tuple):
        return all(isinstance(item, (int, float)) for item in my_tuple)
    
    tuple1 = (1, 2.5, 3, 4.2, 5)
    tuple2 = (1, 2, 'a', 4, 5)
    tuple3 = (1.0, 2.0, 3.0)
    
    print(f"Tuple 1 is numeric: {is_numeric_tuple(tuple1)}")
    print(f"Tuple 2 is numeric: {is_numeric_tuple(tuple2)}")
    print(f"Tuple 3 is numeric: {is_numeric_tuple(tuple3)}")
    

    В этом скрипте:

    • Мы определяем функцию is_numeric_tuple, которая принимает кортеж в качестве входного параметра.
    • Внутри функции мы используем функцию all() с генераторным выражением (isinstance(item, (int, float)) for item in my_tuple) для проверки, является ли каждый item в кортеже экземпляром либо int, либо float.
    • Затем мы тестируем функцию на трех разных кортежах.
  3. Сохраните файл.

  4. Откройте терминал.

  5. Запустите скрипт с помощью команды python:

    python ~/project/check_numeric_tuple.py
    

    Вы должны увидеть следующий вывод:

    Tuple 1 is numeric: True
    Tuple 2 is numeric: False
    Tuple 3 is numeric: True
    

    Этот вывод показывает, что tuple1 и tuple3 содержат только числовые значения, в то время как tuple2 содержит строку, поэтому он не считается числовым кортежем.

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

Обработка пустых кортежей

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

Давайте модифицируем скрипт из предыдущего шага для обработки пустых кортежей:

  1. Откройте редактор VS Code.

  2. Откройте файл check_numeric_tuple.py в директории ~/project.

    ## ~/project/check_numeric_tuple.py
    def is_numeric_tuple(my_tuple):
        if not my_tuple:
            return True  ## An empty tuple is considered numeric
        return all(isinstance(item, (int, float)) for item in my_tuple)
    
    tuple1 = (1, 2.5, 3, 4.2, 5)
    tuple2 = (1, 2, 'a', 4, 5)
    tuple3 = (1.0, 2.0, 3.0)
    tuple4 = () ## Empty tuple
    
    print(f"Tuple 1 is numeric: {is_numeric_tuple(tuple1)}")
    print(f"Tuple 2 is numeric: {is_numeric_tuple(tuple2)}")
    print(f"Tuple 3 is numeric: {is_numeric_tuple(tuple3)}")
    print(f"Tuple 4 is numeric: {is_numeric_tuple(tuple4)}")
    

    В этом модифицированном скрипте:

    • Мы добавили проверку в начале функции is_numeric_tuple: if not my_tuple: return True. Эта проверка определяет, является ли кортеж пустым. Если он пуст, функция возвращает True, считая пустой кортеж числовым.
    • Мы добавили пустой кортеж tuple4 = () для тестирования функции.
  3. Сохраните файл.

  4. Откройте терминал.

  5. Запустите скрипт с помощью команды python:

    python ~/project/check_numeric_tuple.py
    

    Вы должны увидеть следующий вывод:

    Tuple 1 is numeric: True
    Tuple 2 is numeric: False
    Tuple 3 is numeric: True
    Tuple 4 is numeric: True
    

    Этот вывод показывает, что пустой кортеж tuple4 теперь корректно обрабатывается и считается числовым кортежем.

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

Резюме

В этом практическом занятии (lab) первый шаг посвящен определению числовых кортежей (tuples) в Python. Вы узнали, что кортежи - это неизменяемые структуры данных, похожие на списки, и они определяются с использованием круглых скобок (). Вы можете создавать кортежи, содержащие целые числа, вещественные числа или их смесь, разделяя элементы запятыми.

Затем в практическом занятии показано, как проверить, содержит ли кортеж только числа, используя функцию all() в сочетании с функцией isinstance(). (Содержание в оригинальном описании практического занятия обрезано.)