日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【Python实现杨辉三角】

發布時間:2023/12/31 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python实现杨辉三角】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

什么是楊輝三角

楊輝三角解法

1. 定義法

2. 計算楊輝三角 補0法

?3. 楊輝三角,對稱法

?4. 楊輝三角,單列表方法

5.列表嵌套(二維數組)

6. 新舊兩行,一次性開辟新行

7.yield函數

8.zip函數

參考資料鏈接:


一、什么是楊輝三角

楊輝三角,是二項式系數在三角形中的一種幾何排列,中國南宋數學家楊輝1261年所著的《詳解九章算法》一書中出現。在歐洲,帕斯卡(1623----1662)在1654年發現這一規律,所以這個表又叫做帕斯卡三角形。帕斯卡的發現比楊輝要遲393年,比賈憲遲600年。

楊輝三角_百度百科

?

楊輝三角的性質:

每個數字等于上一行的左右兩個數字之和。即第n+1行的第i個數等于第n行的第i-1個數和第i個數之和。

為了解決這個問題,并了解更多的解法,我在網上查找了一些資料,將解法進行了匯總

二、楊輝三角解法

1. 定義法

思路:

從第三行開始,每一行的首尾都是1,中間部分每個數字等于上一行的左右兩個數字之和。先定義每一行的第一個數字,然后在利用規則對中間部分進行運算,最后再添加最后一個元素。

PS:這個解法還是比較容易想出來的

代碼:

# 計算楊輝三角 定義法 n = eval(input("輸入要打印的行數:")) triangle = [[1], [1, 1]] for i in range(2, n): # 已經給出前兩行,求剩余行pre = triangle[i-1] # 上一行cul = [1] # 定義每行第一個元素for j in range(i-1): # 算幾次cul.append(pre[j]+pre[j+1]) # 每個數字等于上一行的左右兩個數字之和。cul.append(1) # 添加每行最后一個元素triangle.append(cul) print("普通輸出:{}".format(triangle)) for i in range(n): # 按等邊三角形格式輸出s = " "*(n-i-1)for j in triangle[i]:s = s + str(j)+" "print(s)

運行結果

定義法也可以使用下面這種形式,先給出一個空列表,通過循環先進行追加列表,在對列表進行修改

代碼

n = eval(input()) triangle = [] for i in range(n):cur = [1]triangle.append(cur) #先追加進去if i == 0:continuepre = triangle[i-1]for j in range(i-1):cur.append(pre[j] + pre[j+1])cur.append(1) print(triangle)

2.?補0法

補零法是在定義法的基礎上,通過對上一行加[0],那么每行只需定義每行的第一個元素,這一行的其余元素可以通過上一行的左右兩個元素相加得到。值得注意的是補零只是對中間的過程變量進行補零,不影響輸出結果。

代碼

# 計算楊輝三角 補0法 triangle = [[1]] n = eval(input("輸入行數:")) for i in range(1, n):swap = triangle[i-1]+[0]cul = [1]for j in range(len(swap)-1):cul.append(swap[j]+swap[j+1])triangle.append(cul) print(triangle)

運行結果

?

3.對稱法

思路

中點的確定:

代碼:

# 楊輝三角,對稱法 n = eval(input("輸入要打印的行數:")) triangle = [[1], [1, 1]] for i in range(2, n):tmp = triangle[-1]#上一個列表cul = [1] * (i+1)for j in range(i//2): #有圖知:大概的臨界值為一半,再仔細推敲cul[j+1] = tmp[j]+tmp[j+1]if i != 2j:#當j不為中點時cul[-j-2] = cul[j+1]triangle.append(cul) print(triangle)

運行結果

4. 楊輝三角,單列表方法

代碼

# 楊輝三角,單列表解決 n = eval(input("輸入要打印的行數:")) row = [1] * n for i in range(n):z = 1offset = n - ifor j in range(1, i//2+1):val = z + row[j]z = row[j]row[j] = valif i != 2*j:row[-j - offset] = valprint(row[:i+1])

運行結果

5.列表嵌套(二維數組)

概念:list1[n][m] = list1[n-1][m-1] + list1[n-1][m]

代碼

n=int(input()) list1=[] for n in range(n):row=[1] # 第一行第一列為1list1.append(row)if n==0:for num in row: # 這里主要是為輸出做的格式處理print(num,end=" ")print()continuefor m in range(1,n):row.append(list1[n-1][m-1]+list1[n-1][m])row.append(1)for num in row:print(num, end=" ")print()

這個方法利用List列表將二維數組進行實現

6. 新舊兩行,一次性開辟新行

代碼

m = eval(input("輸入要輸出的行數:")) # 新舊兩行,一次性開辟新行 ordline = [] for i in range(m):newline = [1] * (i+1)for j in range(2, i+1):newline[j-1] = oldline[j-1]+oldline[j-2]oldline = newlineprint(newline)

運行結果

?其中通過計算比較,第五種方法一次性開辟內存空間的方法要比第一種方法中,每次計算通過append添加新的內存空間要快。

7.yield函數

利用yield函數可以將L定義為生成器

代碼

def triangles():L = [1] #定義L為一個只包含一個元素的列表while True:yield L #定義為生成器函數L =[1] + [L[n] + L[n-1] for n in range(1,len(L))] + [1]n = 0 for t in triangles():print(t)n = n + 1if n == 10:break

8.zip函數

zip()?函數用于將可迭代的對象作為參數,將對象中對應的元素打包成一個個元組,然后返回由這些元組組成的列表。

如果各個迭代器的元素個數不一致,則返回列表長度與最短的對象相同,利用 * 號操作符,可以將元組解壓為列表。

思路

?楊輝三角特性:

代碼

def triangles():n = [1]while True:yield nn = [x+y for x,y in zip([0] + n,n+[0])]n = 0 for t in triangles():print(t)n = n + 1if n == 10:break

?運行結果

?

參考資料鏈接:

楊輝三角的幾種解法(python)_vampire's blood的博客-CSDN博客_楊輝三角python

python——楊輝三角 - 我聽過 - 博客園

python打印楊輝三角的兩種方法及詳解 - 簡書

楊輝三角形(超級簡單的Python實現方法)_3Sunremitting的博客-CSDN博客_python楊輝三角

Python yield 使用淺析 | 菜鳥教程

Python3 zip() 函數 | 菜鳥教程

總結

以上是生活随笔為你收集整理的【Python实现杨辉三角】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。