2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 函数__内置函数(reversed slice format ord chr ascii repr)递归 迭代 二分法

函数__内置函数(reversed slice format ord chr ascii repr)递归 迭代 二分法

时间:2024-02-21 10:24:28

相关推荐

函数__内置函数(reversed slice format ord chr ascii repr)递归 迭代 二分法

一.内置函数。

二.递归

三、二分法。

一.内置函数.

1)reversed() 反转.返回值是个迭代器,打出来需要用list()一下

huiwen = "不是上海自来水来自海上"s = huiwen[::-1]it = reversed(huiwen) # 返回的是迭代器s = ""for el in it: #这样使用拼接的方法,打出来就是一个字符串了.好看s += elprint(s)输出结果为:上海自来水来自海上是不第二种.是迭代打出来的,不咋好看huiwen = "不是上海自来水来自海上"s = huiwen[::-1]it = reversed(huiwen) # 返回的是迭代器print(list(s))输出结果为:['上', '海', '自', '来', '水', '来', '自', '海', '上', '是', '不']

2)slice() 切片,不常用

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

3)format() 格式化输出.该函数可不限参数个数,位置可以不按顺序.

语法:"{}{}".format("参数1","参数2") "{} {}".format("hello", "world") # 不设置指定位置,按默认顺序输出结果为:'hello world'"{0} {1}".format("hello", "world") # 设置指定位置输出结果为:'hello world'"{1} {0} {1}".format("hello", "world") # 设置指定位置输出结果为:'world hello world'

3.1)format() 数字格式化,不常用

print(format("门神", "^20")) #长度20,居中print(format("门神", "<20")) #长度20,居左print(format("门神", ">20")) #长度20,居右

3.2)format() 浮点数

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')) # 小数点计数法.保留了原数字小数点后两位,这个比较好用print(format(1.23456789, '0.10f')) # 小数点计数法. 保留10位小数 print(format(1.23456789e+10000, 'F')) # 小数点计数法

输出结果为:

1.234568e+08

1.23e+08 #此处的"08"意思是1.23被缩小了10**8,e表示科学记数法

1.23E+08

1.234568

1.23 #保留了原来数字的小数点后两位,这个比较好用,直接,明显.

1.2345678900

INF #超界限了,打印不出来,就显示该数为无限

4)ord() 拿字找位置(索引值),返回的是该字符在编码的位置.对应的是unicode码

chr() 拿数找字,返回的是该数在码里面的字,对应的是unicode码,中国字65536个数字位置

5)ascii() 判断是否在ascii码里,在就打印出该参数在ascii里的码区码位.

print(ascii("饕髢"))输出结果为:'\u9955\u9ae2'

6)repr() 将字符串还原为底层C语言认识的合理语法.(python是C语言写的)

\n 换行\t tab 制表符\r 回车\" 双引号\' 单引号\\ \转义

print('你好, 我叫周杰伦.我来自\\n台湾. 我老婆叫昆凌')repr() # 还原字符串最官方的效果print(repr("你好. \\n我叫\周杰伦")) # python接收到内容 交给 repr()翻译,之后交给 cpython,处理完之后才能显示出来题外话:如何原封不动的显示字符串内容,就在这个字符串前面加个rprint(r"\n\t范德萨发生\r\b\ffdsaf") # 原封不动的显示字符串

name = "xiaoli"

print(f"我叫{name},我来自地球") #这里的f是格式化输出的意思,如果是fr就是就是两者的混合体

打印结果:

我叫xiaoli,我来自地球

二.递归.

函数自己调用自己

def func():print("我是递归")func()func() # 递归,官方显示最大为1000次,你永远跑不到1000, 我实测998

下面介绍下用函数递归打印出所有的文间目录

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("\t" * n,el) # 显示文件func("d:/a", 0)

新词解析:

os.path 模块主要用于获取文件的属性。os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表,此列表以字母排序,它不包括 '.' 和'..' 即使它在文件夹中。os.path.join() #把目录和文件名合成一个路径,说白了,就是做拼接的,给出绝对路径os.path.isdir(path) 判断路径是否为目录(就是文件夹),需提供绝对路径os.path.isfile(path) 判断路径是否为文件(文件是某种执行格式),需提供绝对路径目录文件”指的是某些“文件”,“目录”只是定义这些文件存放的位置。文件是有具体内容或用途的,通常电脑有多种不同功用的文件,有可执行文件,数据文件,类或库文件,文本文件,图像文件等等

os.path.join()方法.创建以用户名为txt文件名的例子

import os例子1:dirs = "C:\\register作业" #根目录文件夹名字if not os.path.exists(dirs): #如果改目录下not(没有此文件夹),就可以执行这个ifos.makedirs(dirs) #创建文件夹例子2:lst = os.listdir(dirs)#把此目录下的所有文件或文件夹名字放进一个列表dirs = "C:\\register作业" #此处为根目录 tiwen2=input("输入注册账号:")name=tiwen2+".txt" #以用户名为文件的名字,进行拼接name1 = os.path.join(dirs,name) #拼接出绝对目径f = open(name1,mode="a",encoding="utf-8") #创建指定目录下的文件,且文件名为用户输入的账户f.write(tiwen3) #写入用户输入的密码. f.close()return

三、二分法.

特点:掐头去尾取中间,查找效率很高,但是局限性比较大,必须是有序序列才可以用此方法

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

第二种(需要理解掌握)

def func(n, lst, left, right): # 递归找到什么是可以变的. 什么是不可以变的if left <= right:mid = (left + right) // 2if n > lst[mid]:left = mid + 1return func(n, lst, left, right)elif n < lst[mid]:right = mid - 1return func(n, lst, left, right) # 递归如果有返回值. 所有调用递归的地方必须写returnelse:print("找到了")return mid # 难点else:print("找不到")return -1

第三种(了解下即可)

def func(n, lst):left = 0right = len(lst) - 1if lst != []:mid = (left + right)//2if n > lst[mid]:func(n, lst[mid+1:]) # 改变列表elif n < lst[mid]:func(n, lst[:mid])else:print("找到了")returnelse:print("没找到")returnn = int(input("请输入你要查找的数:"))func(n, [1,3,5,7,12,36,68,79]) # 78

最快的查找(了解即可) 此方法最节省空间和时间的.先创建一个最大值的列表,全部为0,把存在的数据当作这个列表的下标,把对应的小标改成1,最后,用户查找的时候,以输入的值为这个列表的下标,如果该下标对应的值为1,说明存在,否则不存在

lst = [1,3,55,98,37,41,2,5,1,4]new_lst = []for i in range(99):new_lst.append(0)for i in lst:new_lst[i] = 1print(new_lst)i = int(input("输入你要找的数据:"))if new_lst[i]==0:print("不存在")else:print("存在")

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。