今天学习内容如下:
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 else‘r%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 = ‘‘)
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]))
#
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)
#
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))
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()])
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))
6.递归函数
初识递归
递归的定义——在一个函数里再调用这个函数本身
现在我们已经大概知道刚刚讲的story函数做了什么,就是在一个函数里再调用这个函数本身,这种魔性的使用函数的方式就叫做递归。
刚刚我们就已经写了一个最简单的递归函数。
def
story():
print(‘sdf‘)
story()
story()
递归的最大深度——997
正如你们刚刚看到的,递归函数如果不受到外力的阻止会一直执行下去。但是我们之前已经说过关于函数调用的问题,每一次函数调用都会产生一个属于它自己的名称空间,如果一直调用下去,就会造成名称空间占用太多内存的问题,于是python为了杜绝此类现象,强制的将递归层数控制在了997
我们可以通过这种方式来修改递归的最大深度
import
sys
sys.setrecursionlimit(500)
def foo(n):
print(n)
n += 1
foo(n)
foo(1)
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))
9.阶乘
def
func(n):
if n == 1:
return 1
return n*func(n-1)
print(func(5))
原文:https://www.cnblogs.com/shangchunhong/p/9232402.html
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!