我做了关于对称方格的编码练习。
以下是指示: 如果第一行与第一列相同,则列表是对称的, 第二行与第二列相同,依此类推。写一个 procedure,symmetric,以列表作为输入,并返回 boolean如果列表是对称的,则为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运行测试用例时,它表示这并没有通过[[&#39;代数&#39;,&#39;组合数据&#39;,& #39;图表&#39;],[&#39;组合&#39;,&#39;拓扑&#39;,&#39;设置&#39;],[&#39;图表&#39;,&# 39;拓扑&#39;,&#39;设置&#39;]]
当我改变&#34; j = 0&#34;的位置时进入第一个while循环,它实际上通过了测试用例
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中编写代码,我不认为它在java中有很大的不同。但是,在python的情况下,这是因为局部变量与全局变量?非常感谢!
答案 0 :(得分: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
它还测试所有子列表的长度是否相同,并且该长度与顶级列表相同。