2011-12-30 3 views
2

Я получаю эту ошибку при запуске моей программы, и я понятия не имею, почему. Ошибка происходит на линии, которая говорит: «если 1 не в C:»TypeError: аргумент типа 'int' не итерируется

Код:

matrix = [ 
    [0, 0, 0, 5, 0, 0, 0, 0, 6], 
    [8, 0, 0, 0, 4, 7, 5, 0, 3], 
    [0, 5, 0, 0, 0, 3, 0, 0, 0], 
    [0, 7, 0, 8, 0, 0, 0, 0, 9], 
    [0, 0, 0, 0, 1, 0, 0, 0, 0], 
    [9, 0, 0, 0, 0, 4, 0, 2, 0], 
    [0, 0, 0, 9, 0, 0, 0, 1, 0], 
    [7, 0, 8, 3, 2, 0, 0, 0, 5], 
    [3, 0, 0, 0, 0, 8, 0, 0, 0], 
    ] 
a = 1 
while a: 
    try: 
     for c, row in enumerate(matrix): 
      if 0 in row: 
       print("Found 0 on row,", c, "index", row.index(0)) 
       if 1 not in c: 
        print ("t") 
    except ValueError: 
     break 

То, что я хотел бы знать, как я могу исправить эту ошибку от случаться еще есть программа работать правильно.

Заранее спасибо!

ответ

8

здесь c - это не список, который вы ищете. Поскольку вы не можете перебирать целое число, вы получаете эту ошибку.



>>> myList = ['a','b','c','d'] 
>>> for c,element in enumerate(myList): 
...  print c,element 
... 
0 a 
1 b 
2 c 
3 d 

вы пытаетесь проверить, если 1 в c, который не имеет смысла

0

c это номер строки, так что это int. Таким образом, цифры не могут быть in других номеров.

+0

Как я могу сделать это без ошибок? – chingchong

+0

Что вы пытаетесь сделать? (Когда он должен печатать 't'?) – BenH

+0

Он должен печатать« t », если в строке есть 0, а в строке нет 1. – chingchong

0

Я думаю, что вы хотите if 1 != c: - это тесты, если c не имеет значения 1.

+0

Будет ли это работать? Будет ли проверка строки, в которой находится 0? – chingchong

0

Вы пытаетесь перебрать 'c', который является целым числом, удерживая номер строки.

It should print "t" if there is a 0 in a row

Тогда просто заменить с с строки так говорит:

if 1 not in row: 
2

Основываясь на комментарий Ор в It should print "t" if there is a 0 in a row and there is not a 1 in the row.

изменения if 1 not in c в if 1 not in row

for c, row in enumerate(matrix): 
    if 0 in row: 
     print("Found 0 on row,", c, "index", row.index(0)) 
     if 1 not in row: #change here 
      print ("t") 

Дальнейшее уточнение: Переменный хост row ds - одна строка, то есть [0, 5, 0, 0, 0, 3, 0, 0, 0]. Переменная c содержит индекс который строка это. т.е. если row удерживает 3-ю строку в матрице, c = 2. Помните, что c имеет нулевое значение, то есть первая строка имеет индекс 0, вторую строку с индексом 1 и т. Д.

+0

Спасибо, что это действительно близко к тому, что я ищу! – chingchong

+0

Вещь, о которой я все еще смущаюсь, - это то, что у них несколько строк с 0 в ней. Будет ли это делать для всех этих строк? – chingchong

+0

@chingchong да, он напечатает «Найдено 0 по строке ...» для каждой строки, на которой есть 0.Это потому, что мы зацикливаемся на строках в матрице через 'для c, row в перечислении (матрице)' –

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