2011-12-30 20 views
2

私のプログラムを実行するとこのエラーが発生します。理由はわかりません。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 

私が知りたいのですが何が、私はまだプログラムを持って起きてからこのエラーを修正する方法である:「1場合ではないCに」エラーが言う回線に発生しています正しく動作します。

ありがとうございます!

答えて

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

0

cは、行番号なので、それはintだ意味をなさないc、であるかどうかを確認しようとしています。したがって、数字はinの他の数字になることはできません。

+0

どうすればエラーを起こさずにこの作業を行うことができますか? – chingchong

+0

何をしようとしていますか? (いつ 't'を印刷するのですか?) – BenH

+0

行に0があり、行に1がない場合は、" t "を出力します。 – chingchong

0

if 1 != c: - cに値1がないかどうかをテストしたいと思います。

+0

それはうまくいくだろうか? 0が入っている行をチェックしていますか? – chingchong

0

あなたは行番号を保持している単なる整数である 'c'を反復しようとしています。

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

それが言うように、それからちょうど行とCを置き換える:

変更 if 1 not in c It should print "t" if there is a 0 in a row and there is not a 1 in the row.

OPさんのコメントに基づいて

if 1 not in row: 
2

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変数ホール単一の行そのもの、つまり[0, 5, 0, 0, 0, 3, 0, 0, 0]です。 c変数は、のインデックスを保持します。行です。すなわち、rowが行列の3番目の行を保持する場合は、c = 2です。 cはゼロベースであることを覚えておいてください。つまり、最初の行はインデックス0に、2行目はインデックス1にあります。

+0

これは本当に私が探しているものに近いです! – chingchong

+0

私がまだ混乱しているのは、その中に0を持つ複数の行がある場合です。それらの行のすべてでそれを行うのでしょうか? – chingchong

+0

@chingchongはい、その上に0があるすべての行について、 "Found 0 on row ..."と表示されます。これは、 'for c、列挙列(行列)'を介して行列の行をループしているためです。 –

関連する問題