Конструкция 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 шт):
Вы сравниваете значение с типом, а это всегда будет False.
Вам нужно проверять тип значения, т.е. делать так:
if isinstance(i, int):
...
if isinstance(i, str):
...
Вроде работает так как нужно.
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)
Как вариант можно тип переменной и напрямую на равенство сравнивать:
if type(i) == int:
Или:
if i.__class__ == int:
Но проверка через isinstance более "каноническая", она включает и проверку на подклассы. Хотя в вашем случае это без разницы.