2017-05-21 166 views
0

我进入编程(python)的第四周,它变得越来越严重。 我们的教授要求我们在python现场编程,为帕斯卡尔的三角形表示现有长度增加场区的在Python中编程一个基本的Pascal三角形

b = [[1],[1,1],[1,2,1],[1,3,3,1],...] 

我们只是用编码的基础知识开始,这意味着我们不允许使用任何附加功能,如功能等。 对于大多数情况,我们使用while和for循环以及if语句。

我真的需要帮助才能在这里开始。 我开始是这样的:

n = int(input("Number of layers=")) 
b = [[1]] 

for layer in range(0,n): 
    for row in range(0,n): 

这里是我卡住的地步。

我看到了pascale三角形呈现方式的结构: 据我所见,b内部的字段长度随着每个附加层增长1。 我有一个想法,我可以检查外部元素,因为他们总是保持值“1”。我只是没有找到一个解决方案,那怎么办..

1 
11 
121 
1331 
14641 
.. 
.. 

不过,我只是找不到从这里出发点,坚持下去.. 也许有人可以帮我..请保持记住,我必须保持 while-和for-循环。这就对了。没有额外的功能或东西。

+1

欢迎来到SO。虽然我猜你忙于你的任务,请不要忘记阅读[游览]它提供有价值的信息,以获得最好的[so] – Anthon

回答

1

我确定有非常好的解决方案在那里,但如果你正在寻找东西在开始一级检查出这

n = 5 #depth of the pascal tree 

pascal = [] 

for x in range(n): 

    if x == 0: 
     help_list = [1]   
     pascal.append(help_list) 
     continue 
    if x==1: 
     help_list = [1,1]  
     pascal.append(help_list) 
     continue 

    help_list = [l for l in range(x+1)] #this will just initialize list so you can add to it 
    for y in range(1,x): 
     help_list[0] = 1 
     help_list[x] = 1 
     help_list[y] = pascal[x-1][y] + pascal[x-1][y-1]   

    pascal.append(help_list) 

print(pascal) 
+0

,这对我帮助很大!非常感谢! – ohlawd

+0

不客气。如果需要,您可以将此解决方案标记为正确。 – lobito

0

由于这是一项任务,我不会为您提供完整的解决方案,但我会尽力在途中为您提供帮助。这似乎是你建议使用两个嵌套for循环。这应该有效,尽管你可能需要稍微改变一个。记住,你已经有b = [[1]]

接下来,考虑一下新行中的元素是如何从前一行构建的。与前面的一些元素有一个简单的代数关系吗? (你可能想问维基百科关于帕斯卡三角形的问题)。你如何索引这些元素?您可能还想查看例如列表的append函数。这可能不是最有效的解决方案,但这并不重要。

0

的是:

p = [1,3,3,1] 
l = [0]*(len(p)+1) 
for i in range(len(p)): 
    l[i] += p[i] 
for i in range(len(p)): 
    l[i+1] += p[i] 
print l 

如果[0]*n是不允许的,那么:

1 3 3 1 0 
    + 0 1 3 3 1 
    ----------- 
    1 4 6 4 1 

您可以将它们在移动由一个后加入前行的元素将自己计算的下一行您可以通过以下方式建立0的列表:

l = [] 
for i in range(len(p)+1): 
    l += [0]