python杨辉三角题目实战

  1. 1. 正文
  2. 2. 完整代码

本次所涉及到的知识有:列表(List)、列表嵌套、del方法、len方法、insert方法。

正文

某日,李子从一座山前路过,李子慢慢悠悠的走过这座山时,发现这座山的山脚下竟然插着一个告示牌,李子觉得很奇怪,一个平平无奇的山竟然有人在这里插牌,难不出有山神在此,凡人不敢冒犯?还是某个隐居在此的大罗金仙?听说四海之国的大罗金仙今日出没在这个湖中山脉里,难不成真的是他?。。。。。。

就在李子站在山脚深思的时候,告示牌突然发出金光,李子越发觉得奇怪。

"是哪位神仙在此?在下是星梦国度的金牌狩猎者李子,路过此地,无意冒犯。"李子试探性的对周围拱了拱手。

李子等待了一炷香的时间,发现自己的声音没有得到任何回应,便松了一口气:"应该不是那位大罗金仙了,不过就算是临其境,也应该是我能够对付的。"

观察到周围没什么动静,他大步流星的上前观看告示牌上的信息,发现竟是一个阵法,李子仔细端详着这个阵法,片刻,他倒吸了一口凉气:"这竟然是上古之时的阵法大能者杨辉《详解九章算法》中的杨辉三角阵。"

(此阵题目)

此阵题目

编写一个python程序,打印出10行的杨辉三角,具体输出结果如下:

1
2
3
4
5
6
7
8
9
10
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]

"今日一见,果真名不虚传,此阵题摆在这里又是何意?难道.....我今天恰好经过此地,又恰好看到这个告示牌,又恰好知道这个题目....."

李子觉得自己好像被人给卖了一样,浑身上下都觉得不舒服,思考了一下决定先离开此地,在好好问问那些知道我行程的”好兄弟“。

就在这时,这座闪的山顶上竟然迸发出一道道强光,强光散发出骇人的能量波动,李子一时间祭出自己的最强的法宝来防备这次异像,就在李子以为这些强光冲自己来时,以李子为中心的地方包括整个湖中山脉都被一道道法阵给包围了起来,李子看到这种情况的时候,一时间心都凉了半解有余。

他非常气愤地大声喊道:”是那位神仙想置李某人为死地,我好像没有和哪位神仙有过过节吧?就算你想置我于死地,你也知道每一位金牌都是拥有死命灯,就算我死了,你也要承担一个国度的怒火,你可要想清楚了,我李子可不是谁都能杀的!“李子一边心虚地大声向山顶喊去,一边在暗中准备自己最强的渡神法术。

就在这时,山顶好似回应李子一样,光柱越发粗壮,看到这种情况,李子脸一下就白了。

"老子跟你拼了!不就是你死我活吗?今天就要让你看看我李子正真的实力。"李子的气势开始攀升,他想到现在最后的办法就是把杨辉三角阵给弄出来,这是他最后的机会。李子眼神微动,往地上盘膝而坐,开始了可能属于他这个人生中最后的战斗。

"通过嵌套列表的手法炼制基础容器,在通过列表材料制作第一个杨辉角。"李子的手开始动了起来,一个个材料在他熟练的嵌套列表手法上整齐排列了容器和第一个杨辉三角。

1
2
3
list_f = [1]
print(list_f)
list_1 = [[1,1]]

"好了,现在是最难部分了,这时需要while循环火元素对if元气块和列表材料进行进一步的炼制,炼制成所需材料的摸具,之后在放入其中的真气元素,形成一个上下互联左右互补的效果,最后成就杨辉三角阵。"

李子准备好了脑中对应的炼制思路和真气逻辑,用自己的双手拍了拍他的脸颊,以一股一鼓作气的气势开始了他最艰难的挑战。

他首先为while循环火元素准备引火材料,掏出了他珍藏已久的(i)至宝,一脸心疼的引燃了while循环火元素。

"这次如果成功逃出去了,应该让工会的人给我报销,不然老子血亏好吧。"

1
i = 1

点染了while循环火元素,while循环火元素在李子的手里冉冉升起。

1
while i < 9:

在while循环火元素的加持下,李子发现自己的扔材料的速度跟不上它烧的速度,所以李子只能在扔i+2个(n)材料进去,当材料扔进去时,他已经处于一种无欲无求的境界。

"如果真的....真的逃出去了,他不给我报销,我就打....打算换个地方发展好了。"

1
n = i + 2

第一步奠基已经完成,现在需要的是对真气进行连接,首先连接一个名为processFlag的节点,保证下面的真气元素不会跑上面来,之后通过嵌套列表的手法放进放进真气元素。

1
2
3
4
processFlag = True
list_1.append([])
list_1[i].append(1)
list_1[i] = list_1[i] * n

好了,第二步行基的雏形已经完成,现在需要对每一个容器里面的真气元素进行检查和判断数量的多少,保证下一步修改其每一个容器里面的真气元素对应杨辉三角阵所需的真气元素的数量。

1
a = len(list_1[i])

修改容器中的真气元素时,李子掏出他紧剩无几的if元气块,if元气块所散发的气体让人欲罢不能,李子看着它吞了吞口水。

李子一副"大气凛然"的样子随手把if元气块抛入阵里:"元气块算啥,活命才是王道!"

1
2
3
4
5
6
if a >= 3:
b = a - 1
list_1[i][1] = b
if a >= 4:
c = a - 1
list_1[i][-2] = c

通过if元气块的加持,李子发现还需要大量的元气块对真气元素做出更为细微的操作,于是他又抛出了大量的if元气块并通过for漩涡的炼制手法对容器里面的真气元素取出来并进行细微的操作和通过del工具对真气元素进行细微的删减,达到一种平衡的效果。因为阵中真气混杂不堪,所以通过之前的processFlag节点对真气元素进行精确的判断。

1
2
3
4
5
if a >= 5:
for i in range(2,a-2):
if processFlag:
del list_1[a-2][2:a-2]
list_1[a-2].insert(i,list_1[a - 3][i]+list_1[a - 3][i - 1])

李子突然发觉阵中的稳定的真气元素要冲破他的禁制,霎时间,他通过processFlag节点对那些真气元素进行压缩稳定,保证它们不会受到其他因素的影响,当真气元素保持稳定时,李子松了一口气,因为差点就前功尽弃了。

"就差一点了!"

为了保证阵法的中材料(i)会因为之前的损耗而破坏容器,所以需要在运做一次真气的情况下增加材料(i)。

1
i += 1

且因为while循环火元素所消耗的材料(i),在每一次运行火元素都要对材料(i)进行补充,以保证容器的完整性以及杨辉三角阵所需容器的数量。

1
i += 1

.........

在历经不到半炷香的时间内李子完成了所有的步骤,李子站了起来,看着山顶:"你不是很nb吗?等下就让你知道我的厉害,别以为什么都在你的计划之内,我!李!子!可不是你能小瞧的!"

李子突然大吼一声;"融合!"

只见李子使用for漩涡炼制手法对地上的阵法进行炼制,不到片刻,天空乌云密布,雷声作响,远处好似出现远古生物的吼叫,整个山脉都被一个散发金光的三角形所笼罩。

1
2
for y in range(9):
print(list_1[y])

"这就是杨辉三角的力量,受死吧,辣鸡!"

只见李子双手结阵,左右变化,形成一个三角形,三角形在李子手里不断散发着金光,整个山脉也被金光所笼罩。最后,无限放大的金光突破天际,冲破了之前的屏障,整个山脉都为止振动,很多人都纷纷往这里赶,想要查看这里所谓的天地异象到底是什么,但是,当金光散去时,这里除了有一座山脉之外,什么都没有。

处在千里之外的李子一边大口喘气一边往前飞。

"真是天助我也,幸好老子跑得块,死不掉,之后得慢慢查查看,看到底是谁坑了老子!"李子显得愤愤不平,仿佛有一个血海深仇要报似的。

"哦?尔等就这水平?还想要报仇?"

一个轻蔑的女声在李子的身旁的响起,李子忽然感到一阵恶寒,随即加快了飞行的速度,头也不回般的往前飞。

如果李子往后看的话,就会发现在刚才听到声音的地方,有一个穿着黑色裙子带着面纱的少女站在那里,她看着李子方向露出了一个不可名状的笑容,便消失在原地。

(已完无待续)

完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#杨辉三角
#首先定义一个列表,打印杨辉三角的第一行
list_f = [1]
print(list_f)
#定义一个嵌套列表
list_1 = [[1,1]]
#定义变量i
i = 1
#通过while循环打印杨辉三角的列表
while i < 9:
#定义变量n对列表中的元素进行打印
n = i + 2
#定一个为True的布尔值为下面判断修改元素做好基础条件
processFlag = True
#通过apppend函数增加嵌套列表中的空列表
list_1.append([])
#通过append函数对空列表进行增加数值为1的元素
list_1[i].append(1)
#通过乘积运算为列表增加*n的元素
list_1[i] = list_1[i] * n
#定义一个变量a
#该变量是为了算出列表中所含元素的数量
a = len(list_1[i])
#通过if对列表中元素的数量进行判断
if a >= 3:
#对列表元素数量大于等于3的列表中的索引进行修改
b = a - 1
list_1[i][1] = b
if a >= 4:
c = a - 1
list_1[i][-2] = c
if a >= 5:
#通过for循环对变量a到a减2的范围进行遍历
for i in range(2,a-2):
#判断proocessFlag是否为True
if processFlag:
#删减列表中2到倒数第2个索引的范围内所有的元素
del list_1[a-2][2:a-2]
#从列表的中间进行插值,通过上一行的元素进行加法运算
list_1[a-2].insert(i,list_1[a - 3][i]+list_1[a - 3][i - 1])
#改变processFlag的布尔值为False
processFlag = False
#因为这里会把i值从原来的值减一所以需要加一运算
i += 1
#对变量i加一
i += 1
#对嵌套列表中的元素进行循环遍历
for y in range(9):
#打印嵌套列表中所有的元素
print(list_1[y])