python之路day9_我的自学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.复习进度条

importtimefor i in range(0,101,2):

time.sleep(0.1)

char_num= i//2per_str= '\r%s%% : %s\n' %(i, '*' * char_num)\ #此处\作用是字符串太长换行

if i == 100 else '\r%s%% :%s' %(i,'*'*char_num)# print(per_str,end ='',flush =True)print(123)#for i in range(10):#

#s = 'ss%s\r'%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= 'egg'

print('你好%r'%name)

name= 'egg'

print('你好%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的定义来产生期望的结果。

deffunc():return 'ss'*ifor 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函数做了什么,就是在一个函数里再调用这个函数本身,这种魔性的使用函数的方式就叫做递归。

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

defstory():print('sdf')

story()

story()

View Code

递归的最大深度——997

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

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

importsys

sys.setrecursionlimit(500)deffoo(n):print(n)

n+= 1foo(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]deffind(l,aim):

mid_index= len(l)//2

if l[mid_index]

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 elseend

mid_index= (end -start)//2+startif start <=end:if l[mid_index] aim:return find(l, aim, start=start, end=mid_index-1)else:returnmid_indexelse:print('找不到')

l= [1,2,3,4,5,6,7,8,9]

t= find(l,5)print(t)#print(l.index(4))

升级版二分法

8.菲波那切数列

deffib(n):if n == 1 or n == 2:return 1

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

View Code

9.阶乘

deffunc(n):if n == 1:return 1

return n*func(n-1)print(func(5))

View Code

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值