在 Python 中编写基本的 Pascal 三角形
Programming a basic Pascal Triangle in Python
我已经进入编程的第 4 周了(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):
这就是我卡住的地方。
我看到了帕斯卡尔三角形的结构:
据我所知,每增加一层,b 中字段的长度就会增加 1。
我有一个想法,我可以检查外部元素,因为它们始终保持值“1”。我就是找不到解决办法,怎么办..
1
11
121
1331
14641
..
..
然而,我就是找不到从这里开始继续前进的起点..
也许有人可以帮助我。请记住,我必须保留它
while- 和 for- 循环。这就对了。没有额外的功能什么的。
由于这是一项作业,我不会为您提供完整的解决方案,但我会尽力在途中为您提供帮助。您似乎在建议使用两个嵌套的 for 循环。这应该有效,尽管您可能需要稍作更改。请记住,您已经获得 b = [[1]]
.
接下来,想想新行中的元素是如何从上一行构建的。是否与前面的某些元素存在简单的代数关系? (您可能想向维基百科询问有关帕斯卡三角形的信息)。你如何索引这些元素?您可能还想查看列表的 append
函数。这可能不是最有效的解决方案,但这并不重要。
什么是:
1 3 3 1 0
+ 0 1 3 3 1
-----------
1 4 6 4 1
您可以通过将前一行的元素移动一个后将它们自身相加来计算下一行:
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
,那么您可以通过以下方式构建 0
的列表:
l = []
for i in range(len(p)+1):
l += [0]
我确信那里有非常好的解决方案,但如果您正在寻找初学者级别的东西,请查看此
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)
我已经进入编程的第 4 周了(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):
这就是我卡住的地方。
我看到了帕斯卡尔三角形的结构: 据我所知,每增加一层,b 中字段的长度就会增加 1。 我有一个想法,我可以检查外部元素,因为它们始终保持值“1”。我就是找不到解决办法,怎么办..
1
11
121
1331
14641
..
..
然而,我就是找不到从这里开始继续前进的起点.. 也许有人可以帮助我。请记住,我必须保留它 while- 和 for- 循环。这就对了。没有额外的功能什么的。
由于这是一项作业,我不会为您提供完整的解决方案,但我会尽力在途中为您提供帮助。您似乎在建议使用两个嵌套的 for 循环。这应该有效,尽管您可能需要稍作更改。请记住,您已经获得 b = [[1]]
.
接下来,想想新行中的元素是如何从上一行构建的。是否与前面的某些元素存在简单的代数关系? (您可能想向维基百科询问有关帕斯卡三角形的信息)。你如何索引这些元素?您可能还想查看列表的 append
函数。这可能不是最有效的解决方案,但这并不重要。
什么是:
1 3 3 1 0
+ 0 1 3 3 1
-----------
1 4 6 4 1
您可以通过将前一行的元素移动一个后将它们自身相加来计算下一行:
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
,那么您可以通过以下方式构建 0
的列表:
l = []
for i in range(len(p)+1):
l += [0]
我确信那里有非常好的解决方案,但如果您正在寻找初学者级别的东西,请查看此
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)