Проверьте, состоит ли список только из целых чисел

1

У меня есть программа, которая

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

Я написал это, хотя хочу, чтобы программа перебирала список, если значение типа int -append и когда следующее значение строки типа отображает исходный список и конечный цикл

Я думаю, что мой код мой код не делает это хорошо:

def is_int(val):
    if type(val) == int:
        return True
    else:
        return False

def is_string(val):
      if type(val) == str:
         return True
      else:
         return False

def is_float(val):
    if type(val) == float:
        return True
    else:
        return False

def invert(val):
    k = len(val)

    for i in range(k//2):
        a = val[i]
        val[i] = val[k-1]
        val[k-1] = a

    print(val)


lis = ["a","c",2,7]
lim = []
tart = 1
for x in lis:
    if is_int(x) == True and is_int(lis[tart:]) == True:
        lim.append(x)
        tart += 1
    elif is_string(x) == True and is_string(lis[tart:]) == True :
        x = x.upper()
        lim.append(x)
        tart += 1
    else:
        print(lis)
        break


invert(lim)
  • 1
    В какой момент это терпит неудачу? Вы подпрограммы работают так, как вы ожидаете?
  • 0
    @Loebl, как убедиться, что он проверяет, содержит ли список только целые числа, и затем элемент добавляется. если список содержит смесь, перейдите к другой части и распечатайте исходный список
Теги:

2 ответа

5
Лучший ответ

Вы можете использовать это -

all(isinstance(i, int) for i in lis)

Это даст вам значение True если все элементы списка являются целыми, тогда вы можете изменить свой код, чтобы протестировать строки и целые числа

if all(isinstance(i, int) for i in lis):
    return list(reversed(lis)) # return reversed list
elif all(isinstance(i, str) for i in lis):
    return [i.upper() for i in lis] # change to uppercase and return the list
return lis # return list as is
  • 0
    Спасибо, сэкономили много на написании много кода
0

Вместо этого вы можете сделать следующее:

if all(isinstance(i, int) for i in lis):
    lim = lis[::-1]
elif all(isinstance(i, str) for i in lis):
    lim = [i.upper() for i in lis]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню