一 内置函数
1. revserd 翻转,返回的是迭代器
# 将 s 倒置
s = '不是上海自来水来自海上'
# 方法一
print(s[::-1])
# 方法二
s1 = reversed(s)
i = ''
for el in s1:
i +=el
print(i)
2.slice 切片
lis = ['nishi','woshi','shuia','benjim']
s = slice(1,3)
print(lis[s])
3.formate
# 格式化输出
s = "我叫{name},我想去{adress},我喜欢{hobby}.".format(name='zhangmeng',adress='上海',hobby='dance')
print(s)
# 字符串
print(format('test', '<20')) # 左对齐
print(format('test', '>20')) # 右对齐
print(format('test', '^20')) # 居中
# 数值
print(format(3, 'b')) # 二进制
print(format(97, 'c')) # 转换成unicode字符
print(format(11, 'd')) # 十进制
print(format(11, 'o')) # 八进制
print(format(11, 'x')) # 十六进制(小写字母)
print(format(11, 'X')) # 十六进制(大写字母)
print(format(11, 'n')) # 和d一样
print(format(11)) # 和d一样
# 浮点数
print(format(123456789, 'e')) # 科学计数法. 默认保留6位小数
print(format(123456789, '0.2e')) # 科学计数法. 保留2位小数(小写)
print(format(123456789, '0.2E')) # 科学计数法. 保留2位小数(大写)
print(format(1.23456789, 'f')) # 小数点计数法. 保留6位小数
print(format(1.23456789, '0.2f')) # 小数点计数法. 保留2位小数
print(format(1.23456789, '0.10f')) # 小数点计数法. 保留10位小数
print(format(1.23456789e+10000, 'F')) # 小数点计数法.
4. type() 返回类型 ord() 输入字符找字符编码的位置 chr() 输入位置找出对应的字符 ascii()判断给出的信息是否是ascii
for i in range(65536):
print(chr(i), end="")
二. 递归
函数自己调用自己,递归的入口(参数) 和 出口(return)
语法:
def func():
print('我是递归')
func()
func() # 官方显示最多到1000.但不会跑到1000,实际到998
# 树形结构的遍历
import os
def func(lujing, n):
lis = os.listdir(lujing) # 打开文件夹,列出文件夹内的所有文件名
for el in lis: # el 为文件的名字
# 还原文件路径
path = os.path.join(lujing,el)
if os.path.isdir(path):# 判断路径是否是文件夹
print('*' * n,el) # 显示文件夹的名字
func(path, n+1) # 再来一次
else:
print('/t'*n,el) # 显示文件
func('f:/a', 0)
import os
def func(lujing, n):
lis = os.listdir(lujing ) # 打开文件夹,列出文件夹内的所有文件名
for el in lis: # el为文件名
# 还原文件的路径
path = os.path.join(lujing, el)
if os.path.isdir(path): # 判断路径是否是文件夹
print('*'* n, el) # 显示文件夹名称
func(path, n+1) # 再来一次
else:
with open(path,mode='wb') as f: # 打开文件,都写入内容
f.write(b'123456')
print('/t'*n, el) # 显示文件
func('F:/a',0)
三. 二分法
掐头结尾取中间,查找效率非常高,二分法查找的主要作用就是查找元素
# 二分法查找
lst = [1,4,6,7,9,21,23,45,67,87,65,43,89]
n = int(input('请输入一个数:'))
lst = sorted(lst)
# print(lst)
left = 0
right = len(lst)-1
while left <= right:
mid = (left + right)//2
if n > lst[mid]:
left = mid+1
elif n < lst[mid]:
right = mid -1
else:
print("存在")
break
else:
print('不存在')
# 递归 切割列表
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])
else:
print("找到了")
return
else:
print("没找到")
return
n = int(input('请输入你要查找的数:'))
lst = [1,4,6,7,9,21,23,45,67,87,65,43,89]
func(n,lst)
# 递归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)
else:
print('找到了')
return mid # 难点
else:
print('找不到')
return -1
n = int(input('请输入你要查找的数:'))
lst = [13,45,56,67,78,57,89,101]
ret = func(n,lst,0,len(lst)-1)
print(ret)
# 最快的查找方法
lst = [13,45,56,57,67,78,89,101]
# 找出最大的数
new_lst = []
for i in range(99):
new_lst.append(0)
for i in lst:
new_lst[i] = 1
i = int(input('请输入你要找的数据:'))
if new_lst[i] == 0:
print('不存在')
else:
print('存在')