代码中的方法end
有什么问题?
方法end
总是返回 1 ,尽管它应该使用当前数据返回 0 。
# return 1 if the sum of four consecutive elements equal the sum over other sum of the other three sums
# else return 0
# Eg the current sums "35 34 34 34" should return 0
data = "2|15|14|4|12|6|7|9|8|10|11|5|13|3|2|16"
arra = data.split("|");
def do_row ( arra, n ):
return arra[4*n:4 + 4*n]
def row_summa (row):
return sum(map(int,row))
def end ( summat ): # problem here!
equality = 1
for i in summat[2:5]:
print "Comparing: ", summat[1], " and ", i, ".\n"
if summat[1] != i:
equality = 0
print equality
for i in range(0,4):
summat = []
summat.append( row_summa( do_row(arra,i) ) )
print row_summa ( do_row(arra,i) )
summa = 0
end(summat)
答案 0 :(得分:2)
我无法确切地告诉你这里要做什么,但我当然可以说为什么end()
返回1而不是0.在你的上一个for
循环中,你重置{{1在循环开始时到summat
,所以在结束时,summat只包含一个值(最近附加的值)。因此,当您在单个项目列表中请求[]
时,Python会返回一个空列表(因为该范围内没有值) - 在这种情况下,summat[2:5]
没有机会被设置为零,因为equality
中的循环永远不会运行。
答案 1 :(得分:2)
我认为你可能有一个错误的错误。请记住,Python中的数组索引从0开始,而不是1.所以你要这样做:
for i in summat[2:5]:
print "Comparing: ", summat[1], " and ", i, ".\n"
if summat[1] != i:
equality = 0
你根本不看summat[0]
。或许尝试:
for i in summat[1:4]:
print "Comparing: ", summat[0], " and ", i, ".\n"
if summat[0] != i:
equality = 0
答案 2 :(得分:1)
首先,end
不返回1.它返回None
。它打印 1.如果你从命令行运行它,那就是一种欺骗性的。
其次,当您致电end
时,summat
等于[34]
。所以这个:
for i in summat[2:5]:
永远不会执行。除非summat
包含至少3个元素,否则它不会执行任何操作。
答案 3 :(得分:1)
你有两个问题。将循环中的summat初始化为[],也是Greg提到的一个错误
data = "2|15|14|4|12|6|7|9|8|10|11|5|13|3|2|16"
arra = data.split("|");
def do_row ( arra, n ):
return arra[4*n:4 + 4*n]
def row_summa (row):
return sum(map(int,row))
def end ( summat ): # problem here!
equality = 1
for i in summat[1:]: # 1 <=== IS THE SECOND ELEMENT
print "Comparing: ", summat[0], " and ", i, ".\n"
if summat[0] != i:
equality = 0
print equality
summat = [] # <=== DO THIS BEFORE THE LOOP
for i in range(0,4):
summat.append( row_summa( do_row(arra,i) ) )
print row_summa ( do_row(arra,i) )
summa = 0
end(summat)
答案 4 :(得分:1)
您还应该研究这段代码
data = "2|15|14|4|12|6|7|9|8|10|11|5|13|3|2|16"
arra = map(int,data.split("|"))
summat = [sum(arra[i:i+4]) for i in range(0,len(arra),4)]
print summat
print len(set(summat))==1