当前位置:首页 > Python教程 > python技巧

我的自学Python之路(第二阶段Day9)

今天学习内容如下:

1.通常C/C++中,"/ " 算术运算符的计算结果是根据参与运算的两边的数据决定的,比如:6 / 3 = 2 ; 6,3都是整数,那么结果也就是整数2;6.0 / 3.0 = 2.0 ; 6.0,3.0是浮点数,那么结果也是浮点数2.0,跟精确的说,只要" / " 两边有一个数是浮点数,那么结果就是浮点数在Python2.2版本以前也是这么规定的,但是,Python的设计者认为这么做不符合Python简单明了的特性,于是乎就在Python2.2以及以后的版本中增加了一个算术运算符" // "来表示整数除法,返回不大于结果的一个最大的整数,而" / " 则单纯的表示浮点数除法,但是,为了折中,所有2.X版本中,也是为了向后兼容,如果要使用" // ",就必须加上一条语句:from __future__ import divisio一看到这句," / "就表示 浮点数除法,返回浮点结果;" // "表示整数除法。但是,预计在Python3.0发布时,就没有这种折中情况了,," / "就一定表示 浮点数除法,返回浮点结果;" // "表示整数除法

2.复习进度条

 

技术分享图片 技术分享图片
                import
                 time

                for i in range(0,101,2):
    time.sleep(0.1)
    char_num = i//2
    per_str = r%s%%  : %sn %(i, * * char_num)     #此处作用是字符串太长换行if i == 100 elser%s%% :%s %(i,**char_num)#
print(per_str,end =‘‘,flush = True)
print(123)
# for i in range(10):
#
#     s = ‘ss%sr‘%i
#     print(s,end = ‘‘)
View Code

 3.内置函数

技术分享图片 技术分享图片
                #
                 exec(‘print(123)‘)
                
#
                 eval(‘print(123)‘)
                
#
                 print(eval(‘1+2+3‘))# 有返回值6
                
#
                 print(exec(‘1+2+3‘))#没有返回值None
                
#
                 exec和eval都可以执行 字符串类型的代码
                
#
                 eval有返回值  —— 有结果的简单计算
                
#
                 exec没有返回值   —— 简单流程控制
                
#
                 eval只能用在你明确知道你要执行的代码是什么
                
#
                 code = ‘‘‘for i in range(10):
                
#
                     print(i*‘*‘)‘‘‘
                
#
                 exec(code)
                #
                 code = ‘for i in range(10):print(i)‘
                
#
                 # compilel = compile(code,‘‘,‘exec‘)
                
#
                 # exec(compile)
                
#
                 exec(code)
                #
                 code = ‘1 + 2 + 3‘
                
#
                 compile2 = compile(code,‘‘,‘eval‘)
                
#
                 print(eval(compile2))
                
#
                 eval(compile2)
                
#
                 print(eval(code))
                #

                #
                 name #执行后name变量有值
                
#
                 "‘pythoner‘"
                #
                 复数 —— complex
                
#
                 实数 : 有理数
                
#
                         无理数
                
#
                 虚数 :虚无缥缈的数
                
#
                 5 + 12j  === 复合的数 === 复数
                
#
                 6 + 15j
                #
                 浮点数(有限循环小数,无限循环小数)  != 小数 :有限循环小数,无限循环小数,无限不循环小数
                
#
                 浮点数
                #
                354.123 = 3.54123*10**2 = 35.4123 * 10
                
#
                 f = 1.781326913750135970
                
#
                 print(f)
                #
                 print(bin(10))
                
#
                 print(oct(10))
                
#
                 print(hex(10))
                #
                 print(abs(-3))
                
#
                 print(divmod(2,3))# div除法 mod取余
                
#
                 print(divmod(3,5))
                #
                 print(round(2.4545))
                
#
                 print(round(2.8546655444,5))
                
#
                 print(pow(2,5))
                
#
                 print(pow(5,4))
                
#
                 print(pow(1,4,1))
                
#
                 print(pow(2,4,2))#前两个数幂运算除以三个数取余
                #
                 ret = sum([1,2,3,4,5,6],10)
                
#
                 print(ret)
                print(min(1,2,3,4))
print(min(1,2,3,4,-3))
print(min(1,2,3,4,-3,key = abs))
print(min([1,2,3,4]))
print(max(1,2,3,4))
print(max(1,2,3,4,-3))
print(max(1,2,3,4,-3,key = abs))
print(max([1,2,3,4]))
View Code
技术分享图片 技术分享图片
                #
                 list = [1,2,3]
                
#
                 l = list.reverse()
                
#
                 print(l)
                
#
                 # print(list)
                #
                 list = [1,2,3]
                
#
                 l = reversed(list)
                
#
                 print(l)
                
#
                 print(l.__next__())
                #
                 l = [1,2,3,4,4,5,8]
                
#
                 s = slice(1,7,2)
                
#
                 print(s)
                
#
                 print(l[s])
                
#
                 print(l[1:7:2])
                #
                 print(format(‘test‘, ‘<10‘))
                
#
                 print(format(‘test‘, ‘>40‘))
                
#
                 print(format(‘test‘, ‘^40‘))
                #
                 网络编程 只能传二进制
                
#
                 照片和视频也是以二进制存储
                
#
                 html网页爬取到的也是编码
                #
                 b_array = bytearray(‘你好‘,encoding = ‘utf-8‘)
                
#
                 print(b_array)
                
#
                 print(b_array[0])
                
#
                 b_array[1]=255
                
#
                 print(b_array)
                #
                 print(ord(‘a‘))
                
#
                 print(ord(‘1‘))
                
#
                 print(chr(97))
                
#
                 print(ord(‘好‘))
                print(repr(1))
print(str(1))
print(repr(1))
print(str(1))
name = eggprint(你好%r%name)

name = eggprint(你好%s%name)
View Code

 

技术分享图片 技术分享图片
                #
                 print(all([‘a‘,‘‘,‘e‘]))
                
#
                 print(all([‘a‘,‘e‘]))
                
#
                 print(all([‘‘,‘e‘]))
                
#
#
                 print(any([‘a‘,‘‘,‘e‘]))
                
#
                 print(any([‘a‘,‘e‘]))
                
#
                 print(any([0,‘e‘]))
                
#

                #
                 l = [1,2,3,4]
                
#
                 s = [1,2,3,4]
                
#
                 m = [1,2,3,[4,5]]
                
#
                 n = {1:2,3:4}
                
#
                 for i in zip(l,s,m,n):
                
#
                     print(i)
                
#

                #
                 def func(x):
                
#
                     # return x % 2 == 1
                
#
                     if x > 10:
                
#
                         return x
                
#
                 ret = filter(func,[1,23,4,5])
                
#
                 print(ret)
                
#
                 for i in ret:
                
#
                     print(i)
                #
                 def is_not_empty(s):
                
#
                     return s and len(s.strip()) > 0
                
#
                 ret = filter(is_not_empty, [‘test‘, None, ‘‘, ‘str‘, ‘  ‘, ‘END‘])
                
#
                 print(ret)
                
#
                 for i in ret:
                
#
                     print(i)
                #
                 filter 执行了filter之后的结果集合 <= 执行之前的个数
                #
                filter只管筛选,不会改变原来的值
                
#
                 map 执行前后元素个数不变
                #
                 值可能发生改变
                
#
                 from math import sqrt
                
#
                 def func(num):
                
#
                     res = sqrt(num)
                
#
                     return res % 1 == 0
                
#
                 ret = filter(func,range(1,101))
                
#
                 for i in ret:
                
#
                     print(i)
                #
                 ret = map(abs,[12,-3,4,5])
                
#
                 print(ret)
                
#
                 for i in ret:
                
#
                     print(i)
                #
                 l = [1,23,4,-5,-6,6]
                
#
                 # print(l.sort(key = abs)) # 在原列表的基础上进行排序
                
#
                 # print(l)
                
#
#
                 print(sorted(l,key = abs,reverse = True))# 生成了一个新列表 不改变原列表 占内存
                
#
                 print(l)
                

l = [, 2,34,dfsdsdffsd]
print(sorted(l,key = len))
View Code

4.匿名函数

 

技术分享图片 技术分享图片
                #
                 def add(x,y):
                
#
                     return x+y
                
#
                 add = lambda x,y:x+y
                
#
                 print(add(1,2))
                
#
#
                 dic = {‘key1‘:1,‘key2‘:20,‘key3‘:3}
                
#
                 print(max(dic,key = lambda a:dic[a]))
                #
                两道练习题目
                
#
                 1.下面程序的输出结果是:
                
#
                 d = lambda p:p*2
                
#
                 t = lambda p:p*3
                
#
                 x = 2
                
#
                 x = d(x)
                
#
                 x = t(x)
                
#
                 x = d(x)
                
#
                 print(x)
                
#
                 2.现有两元组((‘a‘),(‘b‘)),((‘c‘),(‘d‘)),请使用python中匿名函数生成列表[{‘a‘:‘c‘},{‘b‘:‘d‘}]
                #
                 ret = zip((‘a‘,‘b‘),((‘c‘),(‘d‘)))
                
#
                 # def func(x):
                
#
                 #     return {x[0]:x[1]}
                
#
                 res = map(lambda x:{x[0]:x[1]},ret)
                
#
                 # for i in ret:
                
#
                 #     print(i)
                
#
                 print(list(res))
                #
                 3.以下代码的输出是什么?请给出答案并解释。
                
#
                 def multipliers():
                
#
                     return [lambda x:i*x for i in range(4)]
                
#
                 print([m(2) for m in multipliers()])
                
#
                 请修改multipliers的定义来产生期望的结果。
                def
                 func():
    
                return
                
                ss
                *i
for i in range(4):
    func()

print(func())
# def multipliers():
#     return [lambda x:0*x,lambda x:1*x,lambda x:2*x,lambda x:3*x]
# print([m(2) for m in lambda x:0*x,lambda x:1*x,lambda x:2*x,lambda x:3*x])# dic={‘k1‘:10,‘k2‘:100,‘k3‘:30}
# def func(key):
#     return dic[key]
# print(max(dic,key=func))   #根据返回值判断最大值,返回值最大的那个参数是结果
# print(max(dic,key=lambda key:dic[key]))
# max([1,2,3,4,5,-6,-7],key=abs)# ret = map(abs,[-1,2,-3,4])
# for i in ret:
#     print(i)# def func(x):
#     return x**2
# ret = map(func,[-1,2,-3,4])
# for i in ret:
#     print(i)
#
# ret = map(lambda x:x**2,[-1,2,-3,4])# def func(x):
#     return x>10
#
# res = filter(func,[5,8,11,9,15])
# for i in res:
#     print(i)# min max filter map sorted —— lambda# d = lambda p:p*2
# t = lambda p:p*3
# x = 2
# x = d(x) #x = 4
# x = t(x) #x = 12
# x = d(x) #x = 24
# print(x)# ret = zip(((‘a‘),(‘b‘)),((‘c‘),(‘d‘)))
# ret = map(lambda t:{t[0]:t[1]},ret)
# print(list(ret))#现有两元组((‘a‘),(‘b‘)),((‘c‘),(‘d‘)),
# 请使用python中匿名函数生成列表[{‘a‘:‘c‘},{‘b‘:‘d‘}]# max min sorted filter map
# 匿名函数 == 内置函数
# zip
# ret = zip(((‘a‘),(‘b‘)),((‘c‘),(‘d‘)))
# res = map(lambda tup:{tup[0]:tup[1]},ret)
# print(list(res))# def multipliers():
#     return [lambda x:i*x for i in range(4)]
# print([m(2) for m in multipliers()])
View Code

 5.练习题

技术分享图片 技术分享图片
                #
                 3.用map来处理字符串列表,把列表中所有人都变成sb,比方alex_sb
name=[alex,wupeiqi,yuanhao,nezha]
# def func(item):
#     return item+‘_sb‘
# ret = map(func,name)   #ret是迭代器
# for i in ret:
#     print(i)
# print(list(ret))# ret = map(lambda item:item+‘_sb‘,name)
# print(list(ret))# 4.用filter函数处理数字列表,将列表中所有的偶数筛选出来
# num = [1,3,5,6,7,8]
# def func(x):
#     if x%2 == 0:
#         return True
# ret = filter(func,num)  #ret是迭代器
# print(list(ret))
#
# ret = filter(lambda x:x%2 == 0,num)
# ret = filter(lambda x:True if x%2 == 0 else False,num)
# print(list(ret))# 5.随意写一个20行以上的文件
# 运行程序,先将内容读到内存中,用列表存储。
# 接收用户输入页码,每页5条,仅输出当页的内容# with open(‘file‘,encoding=‘utf-8‘) as f:
#     l = f.readlines()
# page_num = int(input(‘请输入页码 : ‘))
# pages,mod = divmod(len(l),5) #求有多少页,有没有剩余的行数
# if mod:           # 如果有剩余的行数,那么页数加一
#     pages += 1    # 一共有多少页
# if page_num > pages or page_num <= 0:   #用户输入的页数大于总数或者小于等于0
#     print(‘输入有误‘)
# elif page_num == pages and mod !=0:    #如果用户输入的页码是最后一页,且之前有过剩余行数
#     for i in range(mod):
#         print(l[(page_num-1)*5 +i].strip())  #只输出这一页上剩余的行
# else:
#     for i in range(5):
#         print(l[(page_num-1)*5 +i].strip())  #输出5行# 6.如下,每个小字典的name对应股票名字,shares对应多少股,price对应股票的价格
# portfolio = [
#     {‘name‘: ‘IBM‘, ‘shares‘: 100, ‘price‘: 91.1},
#     {‘name‘: ‘AAPL‘, ‘shares‘: 50, ‘price‘: 543.22},
#     {‘name‘: ‘FB‘, ‘shares‘: 200, ‘price‘: 21.09},
#     {‘name‘: ‘HPQ‘, ‘shares‘: 35, ‘price‘: 31.75},
#     {‘name‘: ‘YHOO‘, ‘shares‘: 45, ‘price‘: 16.35},
#     {‘name‘: ‘ACME‘, ‘shares‘: 75, ‘price‘: 115.65}
# ]# 6.1.计算购买每支股票的总价
# ret = map(lambda dic : {dic[‘name‘]:round(dic[‘shares‘]*dic[‘price‘],2)},portfolio)
# print(list(ret))# 6.2.用filter过滤出,单价大于100的股票有哪些
# ret = filter(lambda dic:True if dic[‘price‘] > 100 else False,portfolio)
# print(list(ret))
# ret = filter(lambda dic:dic[‘price‘] > 100,portfolio)
# print(list(ret))
View Code

6.递归函数

初识递归

递归的定义——在一个函数里再调用这个函数本身

现在我们已经大概知道刚刚讲的story函数做了什么,就是在一个函数里再调用这个函数本身,这种魔性的使用函数的方式就叫做递归。

刚刚我们就已经写了一个最简单的递归函数。

技术分享图片 技术分享图片
                def
                 story():
    
                print(sdf)
    story()
story()
View Code

递归的最大深度——997

正如你们刚刚看到的,递归函数如果不受到外力的阻止会一直执行下去。但是我们之前已经说过关于函数调用的问题,每一次函数调用都会产生一个属于它自己的名称空间,如果一直调用下去,就会造成名称空间占用太多内存的问题,于是python为了杜绝此类现象,强制的将递归层数控制在了997

我们可以通过这种方式来修改递归的最大深度

技术分享图片 技术分享图片
                import
                 sys
sys.setrecursionlimit(500)
def foo(n):
    print(n)
    n += 1
    foo(n)
foo(1)
View Code

7.二分查找算法

# 我们学习的算法 都是过去时
# 了解基础的算法 才能创造出更好的算法
# 不是所有的事情都能套用现成的方法解决的
# 有些时候会用到学过的算法知识来解决新的问题
# 二分查找算法 必须处理有序的列表
# l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
# 5000000 4999998
# 代码实现
技术分享图片 技术分享图片
                #
                 二分查找算法 必须处理有序的列表
l = [1,2,3,4,5,6,7,8,9,10]
def find(l,aim):
    mid_index = len(l)//2
    if l[mid_index] < aim:
        new_1 = l[mid_index+1 :]
        find(new_1,aim)
    elif l[mid_index] > aim:
        new_1 = l[:mid_index]
        find(new_1,aim)
    else:
        print(找到了,mid_index,l[mid_index])

find(l,4)
简单版二分法
技术分享图片 技术分享图片
                def find(l,aim,start = 0,end = None):
    end = len(l) if end is None else end
    mid_index = (end -start)//2+start
    if start <= end:
        if l[mid_index] < aim:
            return find(l,aim,start = mid_index+1,end = end)
        elif l[mid_index] > aim:
            return find(l, aim, start=start, end=mid_index-1)

        else:
            return mid_index
    else:
        print(找不到)
l = [1,2,3,4,5,6,7,8,9]
t = find(l,5)
print(t)
# print(l.index(4))
升级版二分法

 8.菲波那切数列

技术分享图片 技术分享图片
                def
                 fib(n):
    
                if n == 1 or n == 2:
        return 1

    return fib(n-1) + fib(n-2)


print(fib(50))
View Code

9.阶乘

技术分享图片 技术分享图片
                def
                 func(n):
    
                if n == 1:
        return 1
    return n*func(n-1)
print(func(5))
View Code

 

原文:https://www.cnblogs.com/shangchunhong/p/9232402.html


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!