【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实现杨辉三角】相关推荐
- python杨辉三角居中_利用python打印杨辉三角
用python打印杨辉三角 介绍 杨辉三角,是初高中时候的一个数列,其核心思想就是说生成一个数列,该数列中的每一个元素,都是之前一个数列中,同样位置的元素和前一个元素的和. 正好在python中,也就 ...
- 用python打印杨辉三角
杨辉三角的形式如下图(图片来自维基百科)所示: 用列表的形式呈现如下: [1] [1, 1] [1, 2, 1] [1, 3, 3, 1] [1, 4, 6, 4, 1] [1, 5, 10, 10, ...
- python语言输入杨辉三角_?新手求教:请问怎样用python 显示杨辉三角,任意输入一个数N,输出一个N 1层的杨辉三角。...
如何用python输出杨辉三角 iangles里用到了yield,yield 的作用就是把一个函数变成一个 generator 用python语言输出九九乘法表 杨辉三角 求代码 1.九九乘法表def ...
- Python打印杨辉三角-生成器语法yield的理解
###先看代码. def triangles():# 定义最初的数据 1 ,存到列表中lt = [1]# 进入循环while True:# 使用yield语句产生一个生成器,返回当前列表yield l ...
- python杨辉三角代码,python实现杨辉三角的几种方法代码实例
方法一:迭代 def triangle_1(x): """ :param x: 需要生成的杨辉三角行数 :return: """ trian ...
- 用python实现杨辉三角的几种不同方式
杨辉三角的概念 比较详细的知识可以看这里,在杨辉三角中,每个数是它左上方和右上方的数的和. 1/ \1 1/ \ / \1 2 1/ \ / \ / \1 3 3 1/ \ / \ / \ / \1 ...
- python 实现杨辉三角(依旧遗留问题)
1 #! usr/bin/env python3 2 #-*- coding :utf-8 -*- 3 print('杨辉三角的generator') 4 def triangles(): 5 6 N ...
- python生成器杨辉三角_python 生成器生成杨辉三角的方法(必看)
用Python写趣味程序感觉屌屌的,停不下来 #生成器生成展示杨辉三角 #原理是在一个2维数组里展示杨辉三角,空的地方用0,输出时,转化为' ' def yang(line): n,leng=0,2* ...
- 用python编写杨辉三角金字塔_用python实现三道简单算法题:杨辉三角,蛇形矩阵,金字塔...
分享几道简单的python打印输出的问题,本质上都是可以将其分解成一个大循环之中有几个小循环. 1.杨辉三角 主要特点: 每个数等于它上方两数之和. 每行数字左右对称,由1开始逐渐变大. 每行端点与结 ...
- python输出杨辉三角啊二维数组_用Python输出一个杨辉三角的例子
这篇文章主要介绍了用Python和erlang输出一个杨辉三角的例子,同时还提供了一个erlang版杨辉三角,需要的朋友可以参考下 关于杨辉三角是什么东西,右转维基百科:杨辉三角 稍微看一下直观一点的 ...
最新文章
- 对List中对象的去重
- 2016 ACM/ICPC Asia Regional Dalian Online
- 计算机网络管理员适用单位,计算机网络管理员软考理论复习题(附答案).(40页)-原创力文档...
- 机器学习数据倾斜的解决方法_机器学习并不总是解决数据问题的方法
- (转)Shell中获取字符串长度的七种方法
- 传Facebook将推出应用中心挑战谷歌搜索地位
- 和为给定数(信息学奥赛一本通-T1244)
- JAVA基础系列:Arrays.binarySearch二分查找
- Android socketnetty实现
- sas macro 入门
- mysql卸载不干净时,如何干净利索的卸载mysql数据库(完整版)
- 元宵节没用智能名片在互联网发贺卡,那就OUT了
- 7-12 编程实现两个分数相加
- ubuntu快捷复制粘贴
- 2023电工杯数学建模A题思路
- python之遍历技巧
- Linux内核源代码概述
- 病毒丨3601lpk劫持病毒分析
- 解放双手!无需注解快速生成API文档,跟SpringBoot绝配!
- 使用A*算法求迷宫最短路径问题