==今天的課題
課本: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