2017-03-23 1 views
2

私はpuzzle = 2dリストを受け取り、すべての位置に値が入っていることを確認する関数を構築しています。それに何もない場合は、falseを返す必要があります。それはかなり基本的でなければなりませんが、私の関数はTrueを返し続けます。なぜ私は理解できません。Python関数の出力エラーです。インデックスをチェックして値を確認していますか?

例の入力/出力期待:

is_complete([1,2,3]、[3,1,2]、[2,3,1]])→真

次のように偽

→is_complete([[なし、なし]、[なし、なし]]は)私のコードではありません:

def is_complete(puzzle): 
    for row in puzzle: 
     for val in row: 
      if val == None: 
       return False 
      else: 
       return True 

答えて

1

テスト入力でもRolo787で述べたように、次のように「[[なし]]」であると動作するようですソリューション。 2 forループを使用する代わりに、Noneがその行にあるかどうかをチェックするだけです。

def is_complete(puzzle): 
    for row in puzzle: 
     if None in row: 
      return False 
    return True 
+0

それはトリックでした!ありがとう! –

2

あなたの機能がすぐにねますいずれかのreturn文の後のtop。これは、渡される値が '[[None]]'の場合にFalseを返す理由です。これに対する解決策は、すべての値が繰り返し処理された後に、あなたの 'return true'を移動することです。

def is_complete(puzzle): 
    for row in puzzle: 
     for val in row: 
      if val == None: 
       return False 
    return True 
+0

範囲(len())はその問題を解決しますか? –

+2

@ ocean.1234あなたはそれが何を意味するのかよく分かりません。あなたのループはどちらも素晴らしいです。あなたが最初に渡された最初のリストの最初のインデックスをチェックした後に値を返すというのは単なる事実です。 – Rolo787

+2

欲しいものではない特定のものをチェックしている場合は、望ましくない要素に遭遇したときに戻ってから、すべてがチェックされた後に 'True' **だけを返すべきです。 'True'を返すとすぐに、ループが完了する前にメソッドを終了するからです。 –

関連する問題