学习链接:

http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014317799226173f45ce40636141b6abc8424e12b5fb27000

生成器的东西不是很难,主要注意下list的里面listwy[-1]表示list的最后一个元素

然后是习题比较难,我一开始摸不着头脑

练习

杨辉三角定义如下:

          1
/ \
1 1
/ \ / \
1 2 1
/ \ / \ / \
1 3 3 1
/ \ / \ / \ / \
1 4 6 4 1
/ \ / \ / \ / \ / \
1 5 10 10 5 1

把每一行看做一个list,试写一个generator,不断输出下一行的list:

# -*- coding: utf-8 -*-

def triangles():
# 期待输出:
# [1]
# [1, 1]
# [1, 2, 1]
# [1, 3, 3, 1]
# [1, 4, 6, 4, 1]
# [1, 5, 10, 10, 5, 1]
# [1, 6, 15, 20, 15, 6, 1]
# [1, 7, 21, 35, 35, 21, 7, 1]
# [1, 8, 28, 56, 70, 56, 28, 8, 1]
# [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
n = 0
results = []
for t in triangles():
print(t)
results.append(t)
n = n + 1
if n == 10:
break
if results == [
[1],
[1, 1],
[1, 2, 1],
[1, 3, 3, 1],
[1, 4, 6, 4, 1],
[1, 5, 10, 10, 5, 1],
[1, 6, 15, 20, 15, 6, 1],
[1, 7, 21, 35, 35, 21, 7, 1],
[1, 8, 28, 56, 70, 56, 28, 8, 1],
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
]:
print('测试通过!')
else:
print('测试失败!')

然后在参考了一些博客之后,找到了一个相对我能理解的,并之后自己写出来的一个方法:

def triangles():
templist=[]
mylist=[1]
while True:
yield mylist mylist.append(0)
for n in range(len(mylist)):
templist.append(mylist[n]+mylist[n-1])
mylist=templist
templist=[];

自己去用笔算一下,

然后注意下 range函数的作用:

range[5]=[0,1,2,3,4]

然后就知道该怎么样了

4/19 跟新:

因为昨天晚上研友着急回去,发现了上面代码的bug,但是来不及更改了,今天早上更改下:

如果用上面的代码来写,会出现这样的情况:

然后,我们输出下result:

[[1, 0], [1, 1, 0], [1, 2, 1, 0], [1, 3, 3, 1, 0], [1, 4, 6, 4, 1, 0], [1, 5, 10, 10, 5, 1, 0], [1, 6, 15, 20, 15, 6, 1, 0], [1, 7, 21, 35, 35, 21, 7, 1, 0], [1, 8, 28, 56, 70, 56, 28, 8, 1, 0], [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]]

可以发现,除了最后一个,所有的前面都加了个0

当时,想了好久都没想到原因,最后baidu到是python引用传递的问题,顺便找到了一个网站:

http://www.pythontutor.com/visualize.html#mode=edit

这是个可视化python网站,我们可以看见,在mylist添加0之前,各个引用的指向:

可以看见mylist和result[0]指向的是同一个位置

然后mylist.append了后:

然后,mylist直接指向templist:

这就是,为什么有前面有0的原因。

所以,我们只需要在mylist指向templist之前将这个0给pop出去就行了,测试通过代码如下:

def triangles():
templist=[]
mylist=[]
while True:
yield mylist
mylist.append()
for n in range(len(mylist)):
templist.append(mylist[n]+mylist[n-])
mylist.pop(-)
mylist=templist
templist=[]; n =
results = []
for t in triangles():
print(t)
results.append(t)
# print(results,"dfg")
n = n +
if n == :
break
if results == [
[],
[, ],
[, , ],
[, , , ],
[, , , , ],
[, , , , , ],
[, , , , , , ],
[, , , , , , , ],
[, , , , , , , , ],
[, , , , , , , , , ]
]:
print('测试通过!')
else:
print('测试失败!')

Python(四)生成器 和 杨辉三角的更多相关文章

  1. python 生成器生成杨辉三角

    用Python写趣味程序感觉屌屌的,停不下来 #生成器生成展示杨辉三角 #原理是在一个2维数组里展示杨辉三角,空的地方用0,输出时,转化为' ' def yang(line): n,leng=0,2* ...

  2. 用python生成器实现杨辉三角

    先看杨辉三角的形态: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 上学的时候大多是用c语言的两层for循环在实现,现在我们尝试用生成器来实现. 先说思路:我 ...

  3. python生成器实现杨辉三角

    def triangels(): """ 杨辉三角 """ lst = [1] n_count = 2 # 下一行列表长度 while Tr ...

  4. 经典问题(c++/python)素数、杨辉三角(金字塔型)、统计单词数、简单计算器、密码安全程度、凯撒密码加密、汉诺塔 (python课设实验实例)-- biaobiao88

    [编写程序,输人一个大于2的自然数,然后输出小于该数字的所有素数组成的列表.]所谓素数,是指除了1和自身之外没有其他因数的自然数,最小的素数是2,后面依次是3.5.7.11.13... c++代码: ...

  5. C语言小程序(四)、杨辉三角

    输入要显示的杨辉三角的行数,会打印出金字塔型的杨辉三角,不过行数太多的话,效果不太好,可以再调整一下格式控制. #include <stdio.h> #include <stdlib ...

  6. Python使用函数实现杨辉三角

    运行效果: 可在函数中指定阶层数,输出对应的杨辉三角 源代码如下: 1 # -*-coding:utf-8 -*- 2 ''' 3 chapter4_do.py 4 函数yanghui(n)用于输出n ...

  7. Python生成器实现杨辉三角打印

    def triangles(): c = [1] while 1: yield c a,b=[0]+c,c+[0] c=[a[i]+b[i] for i in range(len(a))] n = 0 ...

  8. 杨辉三角的Python实现

      杨辉三角的Python实现 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 Python生成器实现杨辉三角: # python def yanghui_tr ...

  9. python输出杨辉三角

    使用python列表,展示杨辉三角 # !/usr/bin/env python # -*- coding:utf-8 -*- # Author:Hiuhung Wan yanghui = [] fo ...

随机推荐

  1. 移动端安卓IOS对接H5项目遇到的坑

    最近做一个H5项目 退出的时候需要调用原生的弹框退出, 之前以为很简单,直接ajax调用后端退出接口即可.后来发现数据拿不到,因为状态用的是cookie存储, 后来想到ajax 传参数请求,后来还是拿 ...

  2. 原来window 也可以使用pthreads

    https://blog.csdn.net/clever101/article/details/101029850

  3. json_encode中文不转义问题

    //php5.3之后才有这个参数,这样存入数据库中的中文json数据就不会转义,也能被正确解析1JSON_UNESCAPED_UNICODE(中文不转为unicode ,对应的数字 256) JSON ...

  4. WPF MVVM 键盘按键事件绑定

    <TextBox Text="{Binding LoginName}" Height="35" Canvas.Left="306" T ...

  5. 【转载】Java嵌入Pig编程

    转自:https://wiki.apache.org/pig/EmbeddedPig Embedding Pig In Java Programs Sometimes you want more co ...

  6. 劳动人民万岁(拒绝惰性)------- 浅谈迭代对象(Iterable) 迭代器(Iterator)

    一.前戏 问题:如果一次抓取所有城市天气 再显示,显示第一个城市气温时有很高的延时,并且很浪费储存空间 解决方案:以“用时访问”策略,并且能把说有城市气温封装到一个对象里,可用for一句进行迭代 二. ...

  7. pandas 数据可视化之折线图

    官网地址:https://openpyxl.readthedocs.io/en/stable/charts/line.html#id1 openpyxl+pandas # coding=utf-8 i ...

  8. js的全局变量与var关键字

    var a = '1'; 如果定义在函数外,就是全局变量.如果定义在函数内,就不是全局变量,只能在函数内调用. 但是:如果在函数内定义变量,没有加var关键字,默认表示该变量是全局的.

  9. thinkphp中 model(模型)的使用

    首先:有三个数据表 现在用命令行建立它们的模型 php think make:model admin/Class php think make:model index/Teacher

  10. Qt5 error LNK2019 无法解析的外部符号的解决办法

    今天在使用Qt Create 4.5.2时遇到一个莫名其妙的问题: 在原有工程里添加一个新类(有界面的),在调用的mainwindow.cpp中添加#include "a.h",然 ...