这是我写的一段代码,用来计算pascal三角形的前1023行中有多少个偶数。不过,我觉得它可能需要改进,特别是下一行的功能。你知道吗
def next_row(r):
i = 0
s = []
while i < len(r) -1:
s.append(r[i] + r[i+1])
i += 1
s.insert(0, 1)
s.append(1)
return s
def count_even(r):
counter = 0
for item in r:
if item % 2 == 0:
counter += 1
return counter
def results(i, t, e):
print('In the first ' + str(i) + ' lines of the pascal triangle, there are ' + str(t) + ' entries. ' +
str(e) + ' of them are even.')
r = [1]
even = 0
total = 0
for i in range (0, 1023):
even += count_even(r)
total += len(r)
r = next_row(r)
results(i+1, total, even)
如果你的代码没问题,我建议你用
而不是
PS公司 如果你用
您将看到结果不会改变,正如@johncoleman所建议的,它是有效的。但是如果你把它打印出来,帕斯卡三角形会退化成0和1的集合。你知道吗
在这种情况下,您甚至可以简化计数:
对于初学者,在读取数组内容时,应该避免} recipe 。你知道吗
while
循环和索引迭代。观看loop like a native对话以获得更多见解。在您的例子中,由于您对一次对连续值进行交互感兴趣,您可以查看^{其次,不必在所有中心元素的计算之后修补行,您可以提供一个更大的行来开始计算,方法是在两边加0。为了避免调整列表的大小,可以使用^{} 。你知道吗
最后,要获得1023行的第一行,您可能需要提供一个生成器,该生成器提供来自pascal三角形的无尽行流,并使用^{} 将该生成器缩短到1023行之后。你知道吗
修订代码:
只是使用列表理解使您的代码(前两个函数)稍微不那么冗长。通过这样做,您可以避免初始化
i=0
和空列表s=[]
以及while
循环来跟踪i
。在count_even
函数中,如果r
是一个数组(在代码中它是一个列表),还可以使用以下counter = len(r[r%2==0])
。你知道吗其余的我保持不变。你知道吗
相关问题 更多 >
编程相关推荐