==今天的课题
课本:https://reurl.cc/ROvEv6
练习6:打印杨辉三角。
起手式餵狗https://tinyurl.com/2fumwa3m
想法:
写一个for迴圈,印一个[1]的串列,每次印都会append一个1
像这样
str1=[1]for i in range(1,20,2): str1.append(1) print(str(str1).center(50," "))
或insert?
str1=[1]for i in range(1,10,1): str1.insert(-1,i) print(str(str1).center(50," "))
发现问题
1.列表会自己变长,导致index out of range
2.每一项的规律要相同
==凌晨五点,想code想到睡不着
还真没想过自己的人生有一天会为了这种事失眠
总之我想到一些规律
其一
y[1]=x[0]+x[1]
y[2]=x[1]+x[2]
y[i]=x[i-1]+x[i]
x为前一个list,要实现这个大概要用两个for包在一起,像99乘法表那样
其二 如果要用前面这个规律做insert,或许要複製旧的串列,运算之后再印出
也许可以利用「list切片之后会形成一个新的複製」这个特性来製作下一列
list1=[]list2=[]for i in range(8): if i <2: list1.append(1) print(list1) else: list2=list1 list2.append(1) for j in range(1,len(list2)-1): list2[j]=list1[j-1]+list1[j] print(list2)
这几天运用工作休息的30分钟慢慢写,终于给我写到这样,只差一哩路了
现在的问题卡在:list2在做运算的时候会连list1一起变动,不符合我原先希望的1,2分开
试了一下可能是对于a=b的理解有点问题
简单来说我卡在这个概念:
list1=[]list2=[]for i in range(8): if i <2: list1.append(1) print(list1) else: list2= list1[:] list2+=[1] for j in range(1,len(list2)-1): list2[j]=list1[j-1]+list1[j] print(list2)#问题:卡在深浅複製的问题走不出来
看答案时间
def main(): num = int(input('Number of rows: '))#让使用者决定列数 yh = [[]] * num#初始化list([[]]长度为1) for row in range(len(yh)):#决定每一列中会有相应个栏位 yh[row] = [None] * (row + 1)#因为row会被len(yh)-1所以要加回来 for col in range(len(yh[row])): if col == 0 or col == row: yh[row][col] = 1 else: yh[row][col] = yh[row - 1][col] + yh[row - 1][col - 1] print(yh[row][col], end='\t') print()if __name__ == '__main__': main()
检讨:
这次是第二次主动认输,跟第一次的差别在于这次没有被降纬打击的感觉,我想是因为程式码都比较能看懂,比较可惜的就是原本在规划问题的时候其实有想到用list1[][]的方向来做这题,但是一直觉得不太可能所以后来就往b[]=a[]+a[]的方向去做
另外一个不舒服的地方就是这次又想太久了,可惜浪费掉的时间
中间甚至一度产生了放弃的念头,但回头看看自己写了多少东西,就觉得还是可以再试一下,毕竟就是学新东西,挫折难免嘛
额外学到的小撇步:
1.建立[[]]时长度为1