之路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
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
更多推荐
python之路day9
发布评论