2015-10-30 14 views
4

У меня есть массив, где каждая позиция в массиве представляет собой место для парковки. Значение каждой позиции в массиве (или автостоянке) представляет собой то, что находится на стоянке (автомобиль, мотоцикл и т. Д.). Функция showSpots должна показывать все пятна, на которых находится определенное транспортное средство. Например, showSpots (CAR) (где CAR = 1) должны показывать все пятна (или позиции в массиве), которые содержат значение 1.Python 3.4 TypeError: аргумент типа 'int' не итерируется

Однако, когда я запускаю код, я получаю «TypeError: аргумент типа« int », который не является итерируемым« на линии », если владелец в parkingLot [x]: '

Почему я получаю эту ошибку и как мне это исправить?

Мой код:

from random import * 

parkingLot = [0, 1, 0, 2, 0, 0, 1] 

EMPTY = 0 
CAR = 1 
MOTORCYCLE = 2 

def showSpots(holder): 
    for x in range(0, 6): 
     if holder in parkingLot[x]: 
      print(x) 

def main(): 
    print("There are cars in lots:") 
    showSpots(CAR) 
    print("There are motorcycles in lots:") 
    showSpots(MOTORCYCLE) 

main() 

ответ

5

Я думаю, что вы хотите if holder == parkingLot[x]:. Делая in, Python пытается перебрать parkingLot[x] и проверить, есть ли в нем holder. Очевидно, поскольку вы не можете сделать list(1), тогда возникает ошибка.

+0

Это сработало. Благодаря! – zbalda

+0

@ ZacharyB48265 проблем нет. Обязательно принимайте ответ :) – TerryA

1

parkingLot[x] является единым целым, но in ожидает последовательность (т.е. список, кортеж, словарь и т.д.)

1

Это должно быть if holder == parkingLot[x]. Как и при использовании, это означает, что вы ищете что-то в последовательности, то есть в списке или кортеже или словаре.

Для целых чисел следует использовать ==.

1

TerryA полностью исправит ошибку.

В Python вы можете сделать такую ​​ошибку гораздо менее вероятной, используя встроенные функции для работы со списками и другими итерами вместо прямого управления списками.

В этом случае вы можете использовать представление списка, чтобы построить набор данных для вас. Например:

def showSpots(holder): 
    for space in [ index for index,value in enumerate(parkingLot) if value == holder ]: 
    print (space) 

enumerate функция превратит ваш вход в пар индекс/значение, которые вы можете использовать, чтобы построить список, содержащий только данные, которые вы заботитесь о. Поскольку вам никогда не нужно напрямую манипулировать списком входных данных, вам не нужно беспокоиться о размере списка и отсутствии возможности смешивания итерационных и неинируемых значений.

Смежные вопросы