Конструкция IF ELSE не видит локальную переменную

Не могу изменить переменную внутри функции. В коде ниже, переменная а - локальная. Она служит счётчиком. После взаимодействия с условными операторами - она должна измениться. И функция func() должна вернуть обновлённое значение переменной a.

list_1 = [1, 2, 3, 4]

def func (array): 

    a = 0 # Счётчик. Локальная переменная.

    for i in array: # Тут я проверяю каждую переменную из списка на тип
        
        if i == int: # Если переменная - целое число
            if i <= 3:
                a += 1 # Вот я хочу изменить локальную переменную, но она ни в какую
            elif i >= 3:
                a -=1
        
        elif i == str: # Если переменная - строка
            print ("It's a string!")

    return a

print (func(list_1)) # Должно получиться 2, но оно выводит 0

Я прочитал много статей про область видимости переменных. Но в этой ситуации я зашёл в тупик.


Ответы (3 шт):

Автор решения: Roman Konoval

Вы сравниваете значение с типом, а это всегда будет False.

Вам нужно проверять тип значения, т.е. делать так:

if isinstance(i, int):
  ...
if isinstance(i, str):
  ...
→ Ссылка
Автор решения: Prohodchik

Вроде работает так как нужно.

num = [1, 3, 5, 5, 4, 2]
def func(num):
    a = 0
    for i in num:  
        if i <= 3:
            a += 1  
        else:
            a -= 1
        print(a)
func(num) 
→ Ссылка
Автор решения: CrazyElf

Как вариант можно тип переменной и напрямую на равенство сравнивать:

if type(i) == int:

Или:

if i.__class__ == int:

Но проверка через isinstance более "каноническая", она включает и проверку на подклассы. Хотя в вашем случае это без разницы.

→ Ссылка