Ситуация: мы пишем на Python программу для ветеринарной клиники, и у нас есть список животных, которых мы лечим:
animals = ['собака', 'кошка', 'попугай', 'хомяк', 'морская свинка']
Нам нужно вывести список всех этих животных на экран, поэтому будем использовать цикл. Мы помним, что для организации циклов в питоне используется команда range(), которая берёт диапазон и перебирает его по одному элементу, поэтому пишем простой цикл:
# объявляем список животных, которых мы лечим в ветклинике
animals = ['собака', 'кошка', 'попугай', 'хомяк', 'морская свинка']
# перебираем все элементы списка
for i in range(animals):
# и выводим их по одному на экран
print(animals[i])
Но при запуске программа останавливается и выводит ошибку:
❌ TypeError: 'list' object cannot be interpreted as an integer
Странно, мы же всё сделали по правилам, почему так?
Что это значит: команда range() работает с диапазонами, которые явно представлены в числовом виде, например range(5). А у нас вместо этого стоит список со строковыми значениями. Python не знает, как это обработать в виде чисел, поэтому выдаёт ошибку.
Когда встречается: когда в диапазоне мы указываем сам список или массив, вместо того чтобы указать количество элементов в нём.
Как исправить ошибку TypeError: 'list' object cannot be interpreted as an integer
Если вы хотите организовать цикл, в котором нужно перебрать все элементы списка или строки, используйте дополнительно команду len(). Она посчитает количество элементов в вашей переменной и вернёт числовое значение, которое и будет использоваться в цикле:
# объявляем список животных, которых мы лечим в ветклинике
animals = ['собака', 'кошка', 'попугай', 'хомяк', 'морская свинка']
# получаем длину списка и перебираем все его элементы
for i in range(len(animals)):
# и выводим их по одному на экран
print(animals[i])
Практика
Попробуйте выяснить самостоятельно, есть ли здесь фрагмент кода, который работает без ошибок:
lst = [3,5,7,9,2,4,6,8]
for i in range(lst):
print(lst[i])
lst = (3,5,7,9,2,4,6,8)
for i in range(lst):
print(lst[i])
lst = (3)
for i in range(lst):
print(lst[i])