Python实现的一些常见简单问题(持续更新)
提纲:
1.汉诺塔
2.找到某个范围内的所有质数
3.杨辉三角
4.用闭包实现一个计数器,调用一次计数器加1
5.将类构造成可迭代对象,实现斐波那契数列
......
1.汉诺塔(汉诺塔)
用递归函数实现汉诺塔(A、B、C柱,要将圆盘从A柱移到C柱,且排列顺序不变)
思想:不管A柱有多少个圆盘(假设n个),我们可以将看成将上面的(n-1)个圆盘看成一个整体,那么问题就变得非常简单:
1)将上面的(n-1)个圆盘实现从A柱全部移动到B柱
2)把最后一个圆盘从A柱移到C柱
3)将刚刚移到B柱的(n-1)个圆盘从B柱全部移动到C柱。
这就是整个的过程,那么我们可以看到,上述1)和3)其实也是一次汉诺塔的完整过程,只不过是圆盘数目不同。因此,这里利用递归函数就能快速简单地解决问题。
代码如下;
def move(n,a,b,c):
'''
n:圆盘数
a,b,c分别代表三个柱子
'''
if n == 1:
print(a, '-->', c)
else:
move(n-1,a,c,b)
print(a, '-->', c)
move(n-1,b,a,c) if __name__ == '__main__':
move(3,'A','B','C')
# 输出:
# A --> C
# A --> B
# C --> B
# A --> C
# B --> A
# B --> C
# A --> C
2.找到某个范围内的所有质数(质数)
有的语言中实现质数需要用到循环,对于每一个数去判断是不是质数。然而,质数是一个无限的序列,当判断的范围非常大的时候,程序运行占用内存较大。在Python中生成器可以按照某种计算规则推算出列表的后续元素不需要建立一个完整的列表,是一种一边循环一边计算的机制能节省内存。
用生成器找到某个范围内的所有质数:
#构造一个从3开始的奇数序列:
def _odd_iter():
n = 1
while True:
n = n + 2
yield n #筛选函数,返回的是True/False,这里x是从it中依次取所有元素
def _not_divisible(n):
return lambda x: x % n > 0 #定义一个生成器,不断返回下一个素数
def primes():
yield 2
it = _odd_iter()#初始序列
while True:
n = next(it)
yield n
it = list(filter(_not_divisible, it))#把it中不满足要求的元素filter掉,注意_not_divisible函数会将it中的每一个元素作为参数进行判断 #因为primes也是生成器,即一个无限序列,因此调用时要设置一个退出循环的条件
# 打印100以内的素数:
for n in primes():
if n < 100:
print(n)
else:
break
3.杨辉三角(杨辉三角)
#用生成器实现输出杨辉三角 def triangles():
lis = [1]
i = 0
while i < 10:
yield lis
lis = iter(lis)
i += 1 def iter(list):
# 上一次迭代的list
i = 1
next_list = [1]
while i < len(list):
next_list.append(list[i-1] + list[i])
i += 1
next_list.append(1)
return next_list 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('测试失败!')
4.用闭包实现一个计数器,调用一次计数器加1
#用闭包实现一个计数器,调用一次计数器加1 def counter():
cnt = 1
def c():
nonlocal cnt
x = cnt
cnt += 1
return x
return c counter1 = counter()
print(counter1())#
print(counter1())#
print(counter1())#
print(counter1())#
print(counter1())#
5.将类构造成可迭代对象,实现斐波那契数列
#迭代器协议:对象必须提供__next__方法
#用__iter__来实现迭代器协议的对象
#要使一个类成为可迭代对象,就要定义这两个方法
class Fib:
def __init__(self):
self._a = 1#起始的两个值
self._b = 1 def __iter__(self):
return self def __next__(self):
self._a, self._b = self._b, self._a + self._b
return self._a
f=Fib()
print(next(f))#
print(next(f))#
print(next(f))#
print(next(f))#
print(next(f))#
# print('==================================')
# for i in f:
# print(i)#这里会从8之后的13开始迭代,因此迭代器只能遍历一次
Python实现的一些常见简单问题(持续更新)的更多相关文章
- python爬虫的一个常见简单js反爬
python爬虫的一个常见简单js反爬 我们在写爬虫是遇到最多的应该就是js反爬了,今天分享一个比较常见的js反爬,这个我已经在多个网站上见到过了. 我把js反爬分为参数由js加密生成和js生成coo ...
- Python语言上机题实现方法(持续更新...)
Python语言上机题实现方法(持续更新...) 1.[字符串循环左移]给定一个字符串S,要求把S的前k个字符移动到S的尾部,如把字符串"abcdef"前面的2个字符'a'.'b' ...
- Python常用组件、命令大总结(持续更新)
Python开发常用组件.命令(干货) 持续更新中-关注公众号"轻松学编程"了解更多. 1.生成6位数字随机验证码 import random import string def ...
- Android源码编译常见错误(持续更新)
本文为个人工作中处理遇到的编译问题做个小结,后续遇到新的问题,持续更新. No such file or directory: 1. 检查路径是否有问题,文件是否存在,若文件存在且路径没问题 2. 检 ...
- [Python] Python学习笔记之常用模块总结[持续更新...]
作为一种极其简单的编程语言,Python目前成为了最炙手可热的几种语言之一.它不仅简单易学,而且它还为用户提供了各种各样的模块,功能强大,无所不能.有利必有弊,学习Python同样有困扰,其中之一就是 ...
- pycharm编辑器简单配置-- 持续更新完善
目录 python解释器安装.多版本共存等 给pycharm编辑器选择python解释器版本 配置pip仓库地址 方式一:直接修改文件配置 方式二:pycharm配置 方式三:通过临时指定pip仓库地 ...
- javascript/jquery 常见功能实现(持续更新...)
1. input 只能输入整数数字和字母 $(document).on('keyup','#no',function(){ var val = $.trim($(this).val()); if(va ...
- Python全栈学习_作业集锦(持续更新)
python基础 day1 python初识 . 计算机基础(cpu,内存,硬盘,操作系统) . Python出生于应用 . python发展史 . 编程语言分类 . python优缺点 . pyth ...
- hadoop常见算法(持续更新)
1. 对以下数据进行排序,根据收入减去支出得到最后结余从大到小排序 账号 收入 支出 日期 zhangsan@163.com 6000 0 2014-02-20 lisi@163.com 2000 0 ...
随机推荐
- zabbix 支持的主要监控方式
zabbix 支持的主要监控方式 一.zabbix支持的主要监控方式: zabbix主要Agent,Trapper,SNMP,JMX,IPMI这几种监控方式,本文章主要通过监控理论和实际操作测试等方式 ...
- asp.net ashx处理程序中switch case的替代方案总结
目录 1.用委托字典代替switch...case; 2.利用反射替代switch...case: 3.比较两种方案 4.其他方案 4.说明 5.参考 在开发 asp.net 项目中,通常使用一般处理 ...
- 自定义SWT控件一之自定义单选下拉框
一.自定义下拉控件 自定义的下拉框,是自定义样式的,其中的下拉框使用的是独立的window,非复选框的下拉框双击单机其它区域或选择完之后,独立window构成的下拉框会自动消失. package co ...
- WPF 打开网页
1.利用浏览器打开using System.Diagnostics; Process proc = new System.Diagnostics.Process(); proc.StartInfo.F ...
- ceph 初始化函数解析
global_pre_init 预初始化函数,解析ceph.conf配置文件, 初始化定义global_context 和 config的全局变量. 全局预初始化函数 CINIT_FLAG_UNPRI ...
- rgw main
说明关闭标准的错误输出,而使用标准输出替换.这是因为FCGX 将信息输出到了STDOUT. 参数: 默认参数 –debug-rgw 和 –keystring , 如果 argv 中具备输入参数, 则通 ...
- ride.py在运行python3.×版本后导致无法运行及解决办法
最近一直在自学python自动化,网上看到rf框架挺适合初学自动化测试,于是通过虫师的搭建了rf框架, 但是在使用过程中遇到了一个问题,在网上没有找到明确解决办法于是想到记录一下 之前为了搭建rf框架 ...
- java随笔之接口
/* * 接口大致上可以分为:哑接口,抽象接口,接口类 * 哑接口:就是public,protected(注意protect有包权限,只有本包才开放接口)方法 * 抽象接口:就是哑接口变为抽象方法,在 ...
- 基于tp3.2的腾讯云短信验证码的实现
新手小白在公司要完成短信验证码注册功能,最初由于没有经验,网上的教程又不是很全,便参考着官方API文档,进行开发 直接进入正题:使用composer下载腾讯云短信接口(记得添加依赖).在项目目录下新建 ...
- (16)ASP.NET Core 通用主机(HostBuilder)
1.前言 ASP.NET Core应用程序可以配置和启动主机(Host).主机负责应用程序启动和生命周期管理.通用主机用于无法处理HTTP请求的应用程序.通用主机的用途是将HTTP管道从Web主机AP ...