一.今日内容总览

1.内置函数补充
repr() 显示出字符串的官方表示形式
chr() arscii码中的字,转换成位置
ord() arscii码中的位置,转换成字
2.递归
自己调用自己
两个口:递归的入口(参数) 和 出口(return)
属性结构的遍历 3.二分法
掐头去尾取中间
查找效率非常高

二.今日内容大纲

1.内置函数(2)

2.递归

3.二分查找

三.今日内容详解

1.内置函数(2)

(1)字符串强转list或者tuple,注意这里是迭代强转

print(list("胡辣汤"))
print(tuple("胡辣汤"))
'''
结果:
['胡', '辣', '汤']
('胡', '辣', '汤')
'''

(2)reversed()

lst = ["河南话", "四川话", "东北", "山东", "上海"]
r = reversed(lst)
print(dir(r))    #证明这个函数是生成器
print(list(r)) # 结果:['上海', '山东', '东北', '四川话', '河南话']

(3)

huiwen = "上2自来水来自海上" #加上2的目的是为了测试
s = huiwen[::-1]
print(s)
# 结果: 上海自来水来自海上 it = reversed(huiwen) # 返回的是迭代器
print(it)
#结果: <reversed object at 0x000002E1CA867208> s = ""
for el in it:
s += el
print(s)
#结果:上海自来水来自海上 #结果:
#上海自来水来自2上
#<reversed object at 0x00000172783A74E0>
#上海自来水来自2上

(4)slice

lst = ["河南话", "四川话", "东北", "山东", "上海"]
s = slice(3,5) # 切片. 麻烦
print(lst[s]) #结果:['山东', '上海']
s = slice(3,) # 切片. 麻烦
print(lst[s])
#结果:['河南话', '四川话', '东北'] s = slice(3,4) # 切片. 麻烦
print(lst[s])
#结果:['山东']

(5)

格式化输出中的f和format
s = "我叫{name}, 我来自{home}, 我喜欢干{hobby}".format(name="周杰伦", home="台湾", hobby="唱歌")
print(s)
name = "周杰伦"
home="台湾"
hobby="唱歌"
print(f"我叫{name}, 我来自{home}, 我喜欢干{hobby}")

(6)

center()

s = "门神"
s1 = s.center(20)
print(s1)
'''结果: 门神 '''

(7)

print(format("门神", "^20"))    #门神在中间
print(format("门神", "<20")) #门神在左边
print(format("门神", ">20")) #门神在右边
'''结果: 门神 '''
'''结果:门神 '''
'''结果: 门神'''

(8)

print(format(3, 'b'))  # ⼆二进制  binary  0b11
print(format(65, 'c')) # 转换成unicode字符 ascii
print(format(11, 'o')) # ⼋八进制 0o 13
print(format(11, 'x')) # ⼗六进制(⼩写字⺟)
print(format(11, 'X')) # ⼗六进制(⼤写字⺟) print(format(11, 'd')) # ⼗十进制
print(format(11, 'n')) # 和d⼀样
print(format(11)) # 和d⼀样 '''
结果:
11
A
13
b
B
11
11
11
'''

(9)

print(format(123456789, 'e')) # 科学计数法. 默认保留6位小数  表示大的数据
print(format(123456789, '.2e')) # 科学计数法. 保留2位小数(e⼩写)
print(format(123456789, '0.2E')) # 科学计数法. 保留2位⼩数(E⼤写)
'''
结果:
1.234568e+08
1.23e+08
1.23E+08
'''
# 浮点计数法
print(format(1.23456789, 'f')) # 浮点数计数法. 保留6位⼩数
print(format(1.23456789, '0.2f')) # ⼩浮点数计数法. 保留2位⼩数
print(format(1, '0.10f')) # ⼩浮点数计数法. 保留10位⼩数
print(format(1.23456789e+10000, 'F')) # ⼩浮点数计数法.
'''
结果:
1.234568
1.23
1.0000000000
INF #无穷大的意思
'''

(10)

a = 0b11 # 数字3
print(type(a))
print(a)
'''
结果:
<class 'int'>
3
'''
print(ord("中")) #
print(chr(20014))
'''
结果:
20013

'''
for i in range(65536):
print(chr(i), end= " ")
#结果:循环打印出65536个字,不一定全显示,可能只显示一部分

(11)

print(ascii("a")) # 判断出你给的信息是否是ascii
print(ascii("冬瓜"))
#结果:
#'a'
#'\u51ac\u74dc'

(12)

# 转义字符
# \n 换行
# \t tab 制表符
# \r 回车
# \" 双引号
# \' 单引号
# \\ \
print('你好, 我叫周杰伦.我来自\\n台湾. 我老婆叫昆凌') # repr() # 还原字符串最官方的效果
# str:python的字符串
# repr: 所有的字符串 #注意:在这里repr和r的作用是一样的,但是原理是不一样的
print(repr("你好. \\n我叫\周杰伦")) # python -> repr() -> cpython c里面. 报错
#
print(r"\n\t范德萨发生\r\b\ffdsaf") # 原封不动的显示字符串

2.递归

(1)

#函数就是自己调用自己
def func():
print('我是地瓜')
func()
func() #官方最大1000,你永远跑不到1000,我实测998

(2)

while 1:
print("我不是递归")

(3)

#二叉树:完全二叉树
'''
病毒:(不要试)
f=open(path,mode='wb')
f.write(b'1')
'''
#树形结构的遍历

(3-1)

import os
def func(lujing,n): #'d:/a/'
lst=os.listdir(lujing) #打开文件夹,列出该文件夹内的所有文件名
for el in lst: #el是文件的名字,b,c
#还原路径
path=os.path.join(lujing,el) #"d:/a/b"
if os.path.isdir(path): #判断路径是否是目录
print('...'*n,el) #显示文件夹的名字
func(path,n+1) #再来一次
else:
print('...'*n,el) #显示文件
func('D:/a',0)

(3-2)

import os
def func(lujing,n): #'d:/a/'
lst=os.listdir(lujing) #打开文件夹,列出该文件夹内的所有文件名
# print(lst) #最初用来测试的,['b', 'c', '大冬瓜.txt']
for el in lst: #el是文件的名字,b,c
#还原路径
path=os.path.join(lujing,el) #"d:/a/b"
if os.path.isfile(path): #判断路径是否是文件(注意,这里的文件不只是文件夹,还有txt等)
print('...' * n, el) # 显示文件
else:
print('...' * n, el) # 显示文件夹的名字
func(path, n + 1) # 再来一次
func('D:/a',0)

总结:注意上边的红字区别,还有上边注释的理解,反复理解

3.二分查找

(1)

#二分法查找主要的作用就是查找元素
lst=[1,3,5,7,12,36,68,79]
num=int(input('请输入你要查找的元素信息:'))
for el in lst:
if num==el:
print('存在')
break
else:
print('不存在')
len(lst)
#对于计算机,很少的数是无所谓的,但是数以百万&亿计的,就真的有所谓了

(2)

规则,掐头去尾取中间
0 1 2 3 4 5 6 7
lst=[1,3,5,7,12,36,68,79]
n=28
规则,掐头结尾取中间,必须是有序序列 100000000//1亿最多是需要27次比较

(3)
(3-1)

二分法查找 (需要明白和掌握)
lst = [1,3,5,7,12,36,68,79]
n = int(input("请输入一个数"))
left = 0
right = len(lst) - 1
count=0
while left <= right:
mid = (left + right)//2
if n > lst[mid]:
left = mid + 1
elif n < lst[mid]:
right = mid - 1
else:
print("存在")
print(count)
break
count+=1
else:
print("不存在")
print(count)

(3-2)

递归另类想法
def func(n, lst):
left = 0
right = len(lst) - 1
if lst != []:
mid = (left + right)//2
if n > lst[mid]:
func(n, lst[mid+1:]) # 改变列表
elif n < lst[mid]:
func(n, lst[:mid]) #在这里列表取不到最后一个,所以不用减1
else:
print("找到了")
return
else:
print("没找到")
return
n = int(input("请输入你要查找的数:"))
func(n, [1,3,5,7,12,36,68,79]) #

(3-3)

递归2(需要明白和掌握)
def func(n, lst, left, right): # 递归找到什么是可以变的. 什么是不可以变的
if left <= right:
mid = (left + right) // 2
if n > lst[mid]:
left = mid + 1
return func(n, lst, left, right)
elif n < lst[mid]:
right = mid - 1
return func(n, lst, left, right) # 递归如果有返回值. 所有调用递归的地方必须写return
else:
print("找到了")
return mid # 难点
else:
print("找不到")
return -1 #比较牛掰的想法,找不到返回-1
n = int(input("请输入你要查找的数:"))
lst = [1,3,55,98,37,41,2,5,1,4]
ret = func(n, lst, 0, len(lst)-1) #
print(ret)

(4)

哈希寻找消耗内存,二分法不是最快的,只有这种是最快的
最快的查找方式
lst = [1,3,55,98,37,41,2,5,1,4]
print(max(lst)) new_lst = []
for i in range(99):
new_lst.append(0) for i in lst: # 1,3,55,98
new_lst[i] = 1
print(new_lst) while 1:
i = int(input('请输入你要找的数据'))
if new_lst[i] == 0: # 1次
print("不存在")
else:
print("存在")

结果:

98
[0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
请输入你要找的数据98
存在
请输入你要找的数据

巨蟒python全栈开发-第14天 内置函数2 递归 二分查找的更多相关文章

  1. 巨蟒python全栈开发-第13天 内置函数 匿名函数lambda

    一.今日内容总览 1.内置函数(1):并不是每一个内置函数都是那么常用 上菜:内置函数部分//思维导图:https://www.processon.com/view/link/5b4ee15be4b0 ...

  2. 巨蟒python全栈开发-第22天 内置常用模块1

    一.今日主要内容 1.简单了解模块 你写的每一个py文件都是一个模块 数据结构(队列,栈(重点)) 还有一些我们一直在使用的模块 buildins 内置模块.print,input random 主要 ...

  3. 巨蟒python全栈开发-第23天 内置常用模块2

    一.今日主要内容 1.nametuple:(命名元组,本质还是元组) 命名元组=>类似创建了一个类 结构化时间其实是个命名元组 2.os 主要是针对操作系统的 一般用来操作文件系统 os.mak ...

  4. 巨蟒python全栈开发-第24天 内置常用模块3

    一. 1.re模块基础知识 2.python模块&re正则模块 3.实战:re模块&python(链家&电影天堂&豆瓣) 复习:上节课重点(1)sys.path 模块的 ...

  5. python 全栈开发,Day51(常用内置对象,函数,伪数组 arguments,关于DOM的事件操作,DOM介绍)

    昨日内容回顾 1.三种引入方式 1.行内js <div onclick = 'add(3,4)'></div> //声明一个函数 function add(a,b){ } 2. ...

  6. Python全栈开发之4、内置函数、文件操作和递归

    转载请注明出处http://www.cnblogs.com/Wxtrkbc/p/5476760.html 一.内置函数 Python的内置函数有许多,下面的这张图全部列举出来了,然后我会把一些常用的拿 ...

  7. 巨蟒python全栈开发数据库前端6:事件onclick的两种绑定方式&&onblur和onfocus事件&&window.onload解释&&小米商城讲解

    1.回顾上节内容(JavaScript) 一.JavaScript概述 1.ECMAScript和JavaScript的关系 2.ECMAScript的历史 3.JavaScript是一门前后端都可以 ...

  8. 巨蟒python全栈开发-第10天 函数进阶

    一.今日主要内容总览(重点) 1.动态传参(重点) *,** *: 形参:聚合 位置参数*=>元组 关键字**=>字典 实参:打散 列表,字符串,元组=>* 字典=>** 形参 ...

  9. 巨蟒python全栈开发-第19天 核能来袭-反射

    一.今日主要内容 1.isinstance,type,issubclass A.isinstance: 判断你给对象是否是xx类型的. (向上判断) B.type: 返回xxx对象的数据类型 C.is ...

随机推荐

  1. jqchart 使用的几点小技巧

    官网demo地址:http://www.jqchart.com/jquery/chart 简单示例: [javascript] $('#jqChart').jqChart({ title: 'jqCh ...

  2. myeclipse的user library不自动部署到WEB-INF/lib目录下的解决办法

    右键进入项目属性 Properties 点进去 左边 MyEclipse -> Deployment Assembly 右边 Add -> JavaBuild Path Entries - ...

  3. log4j DatePattern 解惑

    og4j.appender.Root=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.Root.File=../logs/bloglog ...

  4. mysql general log 查看mysql 运行历史

    我们有时候须要查看mysql的运行历史,比方我们做sql优化的时候,起码要知道运行的sql是什么.框架通常会帮我们拼装sql,所以在程序中不一定能够打印出sql,这个时候就须要mysql的genera ...

  5. Atitit. IE8.0 显示本地图片预览解决方案 img.src=本地图片路径无效的解决方案

    Atitit. IE8.0 显示本地图片预览解决方案 img.src=本地图片路径无效的解决方案 1. IE8.0 显示本地图片 img.src=本地图片路径无效的解决方案1 1.1. div来完成  ...

  6. [PIC32--IDE]Microchip PIC32开发环境的搭建

    问题描写叙述 PIC32是Microchip推出的32 bit MCU,其内核是MIPS架构的,MIPS也是属于RISC指令集的,好像ARM的指令集还在RISC指令集中做了一些扩充,而MIPS应当是更 ...

  7. oracle表空间中PCTFREE, PCTUSED, INITRANS, MAXTRANX参数的解释

    1. PCTFREE 要形容一个 BLOCK 的运作,我们可以把一个 BLOCK 想成一个水杯.侍者把水倒入放在我们面前的水杯,要多满呢,我们要求他倒 9 分满好了,这时候 PCTFREE 代表着设定 ...

  8. mysql替换成指定字符

    ,,, ), 'XXXX' )-- 隐藏从第四位开始的6个字符,包括第四个字符,替换成X

  9. Jquery学习笔记(8)--京东导航菜单(2)增加弹框

    京东导航,添加中间的弹框栏,使用position定位,放在左侧栏的li标签里面,成为一个整体,保证鼠标在弹框里的时候,弹框不消失: <!DOCTYPE html> <html lan ...

  10. codeforces 825F F. String Compression dp+kmp找字符串的最小循环节

    /** 题目:F. String Compression 链接:http://codeforces.com/problemset/problem/825/F 题意:压缩字符串后求最小长度. 思路: d ...