Проверьте, все ли элементы кортежа одного типа - PullRequest
0 голосов
/ 26 января 2020

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

Это то, что я пробовал:

def istuple(t):
    if type(t)!=tuple:
        return None
    else:
        for i in t:
            while type(i) == int:
                return True
            return False

Первый часть кода работает нормально, вставляя, если я введу на вход следующие кортежи:

(1,2,3,6.6,3.5,9.0) или (2,4, «ок», «да», 'нет') это должно вернуть мне значение False, но код дает мне значение True.

Как я могу изменить свой код? Я знаю, что есть много других способов сделать это (даже короче), но я должен использовать while l oop

1 Ответ

2 голосов
/ 26 января 2020

Вы можете использовать isinstance для проверки типов.

def istuple(t):
    return all(isinstance(x, int) for x in t)

РЕДАКТИРОВАТЬ: Я только что прочитал вашу последнюю строку. Чтобы сделать это с while l oop:

def istuple(t):
    if not t:
        return False
    gen = iter(t)
    out = True
    while out:
        try:
            out = isinstance(next(gen), int)
        except StopIteration:
            return True
    return False
...