python实现杨辉三角
刚刚学python,原来用c++,Java很轻松实现的杨辉三角,现在用python实现,代码是少了,理解起来却不容易啊。
这里主要用到的Python的生成器。
我们都知道Python有列表解析功能,根据表达式可以自动生成列表,如:
# 这样就得到了0-9这几个数的平方
my_list = [x**2 for x in range(10)]
print(my_list) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
print(type(my_list)) # <class 'list'>
但是列表的大小受内存的限制,如果我们能记录产生数据的算法,那么就不用构造完整的列表,只需要边循环边产生数据。
下面就来创建一个简单的生成器:
# 创建一个简单的生成器
gen = (x * x for x in range(10))
print(type(gen)) # <class 'generator'>
for item in gen:
print(item, end=" ") # 0 1 4 9 16 25 36 49 64 81
除了用for遍历生成器对象,还可以用next()函数进行遍历
# 创建一个简单的生成器
gen = (x * x for x in range(10))
print(type(gen)) # <class 'generator'>
print(next(gen)) #
print(next(gen)) #
print(next(gen)) #
print(next(gen)) #
print(next(gen)) #
当没有更多元素用于遍历时,会抛出StopIteration异常
当函数中有yield关键字时,函数会变成生成器:
def gen_func():
n = 1
while True:
yield n * 2 - 1 # 程序运行到yield会中断一次,下次再执行时从上次中断位置开始
n += 1 f = gen_func()
print(type(f)) # <class 'generator'>
n = 1 # 控制打印次数
for item in f:
print(item, end=" ") #1 3 5 7 9 11 13 15 17
n += 1
if n == 10:
break
生成器和函数的执行流程不一样。函数是顺序执行,遇到return语句或最后一行语句时返回。生成器是在每次调用next()时候执行,遇到yield语句时返回,当再次调用next()时,从上次返回的yield语句处继续执行。
下面来实现杨辉三角:
思路是初始化第一行的元素列表,依次生成下一行的元素列表
def triangle():
line = [1] # 第一行就一个元素1
while True:
yield line
# 生成下一行,表达式为 : [1] + 上一行的两个元素之和 + [1]
line = [1] + [line[i] + line[i + 1] for i in range(len(line) - 1)] + [1] n = 0 # 控制输出行数
for item in triangle():
print(item)
n += 1
if n % 10 == 0:
break
python实现杨辉三角的更多相关文章
- 利用python打印杨辉三角
用python打印杨辉三角 介绍 杨辉三角,是初高中时候的一个数列,其核心思想就是说生成一个数列,该数列中的每一个元素,都是之前一个数列中,同样位置的元素和前一个元素的和. 正好在python中,也就 ...
- python 实现杨辉三角(依旧遗留问题)
1 #! usr/bin/env python3 #-*- coding :utf-8 -*- print('杨辉三角的generator') def triangles(): N=[1] while ...
- Python之杨辉三角算法实现
学习了廖雪峰的官方网站的python一些基础,里面有个题目,就是让写出杨辉三角的实现,然后我就花了时间实现了一把.思路也很简单,就是收尾插入0,然后逐层按照杨辉三角的算法去求和实现杨辉三角. 附属代码 ...
- python输出杨辉三角
使用python列表,展示杨辉三角 # !/usr/bin/env python # -*- coding:utf-8 -*- # Author:Hiuhung Wan yanghui = [] fo ...
- Python实现杨辉三角,超详细!
巧妙实现杨辉三角代码 def triangles(): N=[1] #初始化为[1],杨辉三角的每一行为一个list while True: yield N #yield 实现记录功能,没有下一个ne ...
- python的杨辉三角
# # / \ # # / \ / \ # # / \ / \ / \ # # / \ / \ / \ / \ # # / \ / \ / \ / \ / \ # # ---------------- ...
- 用python实现杨辉三角
def yanghui(lines): currentlst,lastlst,n=[],[],1 if lines<1: return while n<=lines: lastlst=cu ...
- python 生成器生成杨辉三角
用Python写趣味程序感觉屌屌的,停不下来 #生成器生成展示杨辉三角 #原理是在一个2维数组里展示杨辉三角,空的地方用0,输出时,转化为' ' def yang(line): n,leng=0,2* ...
- 【Python初级】由生成杨辉三角代码所思考的一些问题
杨辉三角定义如下: 1 / \ 1 1 / \ / \ 1 2 1 / \ / \ / \ 1 3 3 1 / \ / \ / \ / \ 1 4 6 4 1 / \ / \ / \ / \ / \ ...
随机推荐
- Confluence 6 配置站点主页面
主面板(dashboard)是你站点的默认主页,但是你也可以选择使用一个空间的主页为网站访问的首页面. 针对你的 Confluence 站点主要是为用户进行阅读而不是创建内容的话,这样的配置就显得非 ...
- ( linker command failed with exit code 1) 错误解决方案 项目使用的是pod
targets -> build settings -> architectures -> build active architecture only -> debug 改成 ...
- libopencv_highgui.so.2.4.9:对‘TIFFReadRGBAStrip@LIBTIFF_4.0’未定义的引用
make之前加上sudo su重新make即可 http://blog.csdn.net/cfyzcc/article/details/52981467
- Django Rest Framework(2)
目录 一.认证 二.权限 三.限制访问频率 四.总结 一.认证(补充的一个点) 认证请求头 #!/usr/bin/env python # -*- coding:utf-8 -*- from rest ...
- jmeter 获取数据库表数据作为参数
jmeter - 获取数据库表数据作为参数 在jmeter中使用数据库表数据首先需要设置数据库连接,然后在创建JDBC取样器 1.创建配置元件 JDBC Connection Configuratio ...
- jmeter BeanShell实例-----两个变量之间的断言对比
jmeter BeanShell实例-----两个变量之间的断言对比 在jmeter的中,断言没法对两个变量的进行对比后判断,只能使用Bean Shell断言来进行,总是有人来问怎么写呢.这里写一个简 ...
- Django实现注册页面_头像上传
Django实现注册页面_头像上传 Django实现注册页面_头像上传 1.urls.py 配置路由 from django.conf.urls import url from django.cont ...
- UIDebuggingInformationOverlay 调试
https://archimboldi.me/posts/%E7%BF%BB%E8%AF%91-uidebugginginformationoverlay.html http://ryanipete. ...
- linux dig 命令使用方法
ref:https://www.imooc.com/article/26971?block_id=tuijian_wz dig 命令主要用来从 DNS 域名服务器查询主机地址信息. 查询单个域名的 D ...
- 最短路径算法之Dijkstra算法
参考:<大话数据结构> 这是一个按照路径长度递增的次序产生最短路径的算法.它并不是一次求出源点到目标点的最短路径,而是一步步求出它们之间顶点的最短路径,过程中都是基于已经求出的最短路径的基 ...