鱼C论坛

 找回密码
 立即注册
查看: 1828|回复: 5

[已解决]看不懂杨辉三角的代码啊,谁能解释一下,谢谢

[复制链接]
发表于 2017-5-9 22:21:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
自己新手写不出来也就算了,关键看都看不懂,越来越怀疑自己智商了,唉
代码:
def triangel(n):
    L=[1]                                                                 #定义一个list[1]
    while True:
        yield L                                                           #打印出该list
       L=[L[x]+L[x+1] for x in range(len(L)-1)]        #计算下一行中间的值(除去两边的1)
        L.insert(0,1)                                                 #在开头插入1
        L.append(1)                                                 #在结尾添加1
        if len(L)>10:                                                 #仅输出10行
            break
#生成一个generator对象,然后通过for循环迭代输出每一行
a=triangel(10)
for i in a:
    print(i)
结果
[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]

关键代码哪个高手能解释透彻一点,小白能懂的……万分感激
最佳答案
2017-5-9 23:01:23
本帖最后由 jerryxjr1220 于 2017-5-9 23:03 编辑

这样写,你看得懂吗?如果这个能看懂,那上面的应该也能懂,逻辑是一样的,只是用了列表推导式。
  1. L = [[0] * (i + 1) for i in range(10)]
  2. L[0][0] = 1
  3. for row in range(1, 10):
  4.     for col in range(row + 1):
  5.         if col == 0 or col == row:
  6.             L[row][col] = 1
  7.         else:
  8.             L[row][col] = L[row - 1][col - 1] + L[row - 1][col]
  9. print(L)
复制代码

[[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]]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-9 23:01:23 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jerryxjr1220 于 2017-5-9 23:03 编辑

这样写,你看得懂吗?如果这个能看懂,那上面的应该也能懂,逻辑是一样的,只是用了列表推导式。
  1. L = [[0] * (i + 1) for i in range(10)]
  2. L[0][0] = 1
  3. for row in range(1, 10):
  4.     for col in range(row + 1):
  5.         if col == 0 or col == row:
  6.             L[row][col] = 1
  7.         else:
  8.             L[row][col] = L[row - 1][col - 1] + L[row - 1][col]
  9. print(L)
复制代码

[[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]]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-9 23:31:58 | 显示全部楼层
jerryxjr1220 发表于 2017-5-9 23:01
这样写,你看得懂吗?如果这个能看懂,那上面的应该也能懂,逻辑是一样的,只是用了列表推导式。

[[1],  ...

实在看不懂  但是运行第一行代码
L = [[0] * (i + 1) for i in range(10)]
得到[[0], [0, 0], [0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]这样一个list我才恍然大悟!你这个代码我总算看懂了!非常感谢  但上面那个代码还是不太懂  感觉好难!智商不够用啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-9 23:36:22 | 显示全部楼层
jerryxjr1220 发表于 2017-5-9 23:01
这样写,你看得懂吗?如果这个能看懂,那上面的应该也能懂,逻辑是一样的,只是用了列表推导式。

[[1],  ...

感觉你们的思路不一样吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-10 07:44:47 From FishC Mobile | 显示全部楼层
messi_xiong 发表于 2017-5-9 23:36
感觉你们的思路不一样吧?

算法肯定不一样,但是逻辑是一样的。
我是先生成列表的架构,再往里面填值。
你原来的程序是每次从上一层递推下一层。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-10 08:47:49 | 显示全部楼层
本帖最后由 sunnychou 于 2017-5-10 08:50 编辑

这样给你解释看看,你对自己的思路有没有变得很清晰,
  1. def triangel(n):
  2.     L=[1]       #定义一个list ->L,包含1个元素1
  3.     while True:
  4.         
  5.         yield L         #打印出该list,在此时会生成一个generator对象,这是yield关键字的作用
  6.          #for循环生成list中元素,range(len(L)-1)范围为(0-(长度-1)),把这些元素写入list中
  7.         L=[L[x]+L[x+1] for x in range(len(L)-1)]   
  8.         L.insert(0,1)    #在0位置插入1
  9.         L.append(1)   #把1追加在list末尾
  10.         if len(L)>10:    #循环终止条件
  11.             break
  12. #调用triangel函数,传入形参,
  13. a=triangel(10)#你也可以传入大于10的数,但是只会打印10行,看你上面写的循环终止条件
  14. for i in a:#循环打印
  15.     print(i)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-19 23:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表