2016-07-09 7 views
0

対称四角形についてコーディングを行いました。外側スコープで定義された変数の内部スコープ変更値

命令は です。最初の行が最初の列と同じ場合はリストは対称です。 2番目の行は2番目の列と同じようにリストを対称とするなどです。 プロシージャを入力します。これはリストを入力として受け取り、リストが対称であれば ブールTrueを返し、そうでない場合はFalseを返します。

次はそうここUdacity

print symmetric([[1, 2, 3], 
      [2, 3, 4], 
      [3, 4, 1]]) 
->True 

print symmetric([["cat", "dog", "fish"], 
      ["dog", "dog", "fish"], 
      ["fish", "fish", "cat"]]) 
-> True 

print symmetric([["cat", "dog", "fish"], 
      ["dog", "dog", "dog"], 
      ["fish","fish","cat"]]) 
-> False 

によって書かれたテストケースでは、私のコードです:

def symmetric(list1): 
    i=0 
    j=0 
    if list1 == []: 
    return True 
    if len(list1) != len(list1[0]): 
    return False 
    while i<len(list1): 
    while j<len(list1): 
     if list1[i][j] !=list1[j][i]: 
      return False 
     j=j+1 
    i=i+1 
    return True 

私はそれが仕事だと思うけどudacityは、テストケースを実行したときに、これはdoesnの言います'' '代数'、 'コンビナトリアル'、 'グラフ'、 'コンビナトリアル'、 'トポロジー'、 'セット'、[グラフ]、 'トポロジー'、 'セット']のテストケースを渡す

「j = 0」の位置を最初のwhileループは、それは実際に私が前にJavaでコードを書くために使用されるテストケース

def symmetric(list1): 
    i=0 
    if list1 == []: 
    return True 
    if len(list1) != len(list1[0]): 
    return False 
    while i<len(list1): 
    j=0 
    while j<len(list1): 
     if list1[i][j] !=list1[j][i]: 
      return False 

     j=j+1 
    i=i+1 
    return True 

に合格し、私はそれが大きな違いをJavaではないと思います。しかし、Pythonの場合、ローカル変数とグローバル変数のためにこれがありますか?どうもありがとう!

答えて

0

jはwhileループのスコープ外で定義されているため、ループ内でjをインクリメントすると、外側のスコープで定義された変数がインクリメントされます。

何が価値があるのは、これはそれを行うには、わずかにより簡潔な方法である場合:

def symmetric(inval): 
    return map(tuple, inval) == zip(*inval) 

そして、これがまたあることをテスト

def symmetric(list1): 
    i=0 
    if not list1: 
     return True 
    if not set(map(len, list1)) == set([len(list1)]): 
     return False 

    for i in range(0, len(list1)): 
     for j in range(0, len(list1)): 
      if list1[i][j] !=list1[j][i]: 
       return False 
    return True 

あなたのアプローチを書くもう少し神託の方法ですすべてのサブリストは同じ長さであり、その長さは最上位リストと同じです。

関連する問題