第二天的关于学习的python
1、讲了模块
import os
import sys
os.path
sys.argv #输入参数
2、讲了导入模块
3、讲了 pyc
就是python 编译后的
而检查机制就是 刚编译的文件时间和编译后的文件进行比较,从而对新编译的内容重新载入!
3、python 数据类型
int float bloon
4、数据运算
+ - * / %取余数 **
5、关于bytes新类
a="CCC"
b = bytes(a,encoding="utf-8")
print(b)
就是 a 于 utf-8的形式转入 二进制形式
当然也可以 b"str" encode 编译
如二进制转换成 string a.decode 解译
六、关于列表
1 #-*- coding:utf-8 -*- 2 __author__ = 'andylin' 3 __date__ = '2017/7/7 17:31' 4 5 #列表的案例 6 namelist = ['phone','watch','cat','dog','python','yy'] 7 # 0 1 2 3 4 5 8 # -6 -5 -4 -3 -2 -1 9 #切片: 取多个元素 10 print(namelist[0:3]) #表示取 0,1,2 而3不包括在内 11 print(namelist[:3:2]) #表示取 0 1 2 ,隔2取一个 12 print(namelist[:-1]) #表示除最后一个外,其他都取出来 13 print(namelist[-4:-1]) #表示取出-4、-3、-2等 14 print(namelist[2:]) #表示从2开始输入所有 15 16 #追加 17 namelist.append('andylin') 18 print(namelist) #追加到后面 19 20 #插入 21 namelist.insert(3,'andylinss') 22 print(namelist) #在3的前面插入 andylinss 23 24 #修改 25 namelist[2] = 'www' 26 print(namelist) #直接输入就改变了 27 28 #删除 29 del namelist[2] 30 print(namelist) #删除key为2的值 31 namelist.pop(2) #也是删除操作 32 33 #扩展 34 hao = ['3','4','5'] 35 namelist.extend(hao) #加入 36 37 #拷贝 38 name = namelist.copy() #只是浅拷贝 39 print(name) 40 41 #统计 42 print(name.count('watch')) #表示这个watch出现的次数 43 44 #排序或倒序 45 namelist.sort() #这种是强制把namelist都改变了 46 print(namelist) 47 namelist.reverse() 48 print(namelist) 49 print(sorted(namelist)) #不进行强制改变的 50 print(namelist) 51 52 #获取下标 53 print(namelist.index('3')) #可以取得下标
七、关于元组
练习
#-*- coding:utf-8 -*- __author__ = 'andylin' __date__ = '2017/7/7 11:11' """ 题为 先进行输入自己的金额 然后再进行购买物品 """ shopprotion=[ ('phone',5000), ('watch',1200), ('book',100), ('bike',700), ('python',88) ] storange = [] while True: momery= input("请输入你现在身上的钱有(人民币):") if momery.isdigit(): momery = int(momery) story = momery while True: for key,vale in enumerate(shopprotion): print(key,vale) choise = input("请选择你要购买的商品:") if choise.isdigit(): choise = int(choise) if choise < len(shopprotion): story -=shopprotion[choise][1] if story < 0: story +=shopprotion[choise][1] print("不好意思,你现在的余额为:",story ) else: storange.append(shopprotion[choise][0]) else: print("你输入的商品有误,请重新输入!") elif choise == 'q': print("购物的商口:%s,还剩%s" % (storange,story)) print("退出购买商品!") break else: print("你输入的商品有误,请重新输入!") elif momery == 'q': if len(storange) > 0: print("你购物买的商口", storange) try: print("剩下的钱", story) except: pass print("欢迎下次光临!") break else: print("你输入有误,请重新再来!")
八、关于字符串常用操作
1 print("ali li".count('l')) #查找含有l字母的个数 2 print("ali li".capitalize()) #把第一个字母变成大写 3 print("ali Li".casefold()) #效果与lower非常类似 4 print('ß'.lower()) #'ß' 汉语和英语大小写没问题 5 print('ß'.casefold()) #'ss' 其他语言的大小写 6 print("ali Li".center(50,"#")) #其实就是填充 字符串居中 7 print("ali Li".encode('utf-8')) #从字符串转为 二进制编码 8 print("ali Li".endswith("i")) #判断是否与 i 结尾,返回 True and False 9 print("ali\tLi\ta".expandtabs(20)) # tab 符号('\t')转为空格, tab 符号('\t')默认的空格数是 8。 10 print("ali Li".find('e')) #从左边开始找到第一个,则就进行输出key, 找不到则输出-1 11 print('{name} Al li {age}'.format(age=18,name='ali')) #输出对应的格式 12 13 class Default(dict): 14 def __missing___(self,key): 15 return key 16 print("{name} was ali Li ".format_map(Default(name='Guido'))) #需要输入的必须是字典形式 17 18 print('ali li'.ljust(50,'#')) #表示在字符串里50个字符中,剩下的用 # 填充 19 print('ali li'.ljust(2,'#')) #如果小于2就不会进行任何动作了 20 21 print(' \nali li '.lstrip()) #只删除左边的空格和换行符 22 23 nao = 'ali li' 24 trantab = nao.maketrans('abc','123') 25 print(nao.translate(trantab)) #就是需要进行在 里面进行替换操作 26 27 print("ali li".partition('l')) #第一个为分隔符左边的子串,第二个为分隔符本身,第三个为分隔符右边的子串 28 print(type("ali li".partition('l'))) #注意是字符串,而空格不属于字符串, 转变为字典型类型 29 30 print("ali li".replace('ali','abc')) #就是替换想要替换的字符串 31 print("ali li".rfind('i')) # 返回字符串最后一次出现的位置(从右向左查询),如果没有匹配项则返回-1。 32 print("ali li".rindex('l')) #返回子字符串 str 在字符串中最后出现的位置,如果没有匹配的字符串会报异常,你可以指定可选参数 33 print("ali li".rjust(50,'#')) #左边开始填充 34 print("ali li".rpartition('l')) #问题是有空格以后的都成为一个字符. 35 print(" ali li ".rsplit()) #这个是从右至左进行字符串分隔,后变成list 36 print(" ali li ".rstrip()) #表示删除右边的空格与换行。 37 38 print("ali li".split()) #从左到右进行分隔,不包括本身 39 print("ali li".startswith('i')) #是否以i进行开头 40 print("ali\n li\rss".splitlines()) #按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。 41 print(" ali li\n".strip()) #表示删除左右两边的空格和换行符 42 print("ali Li".swapcase()) #方法用于对字符串的大小写字母进行转换。 #原大写的转成小写,原小写的转成大写 43 print("ali Li".title()) #方法返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle()) 44 print("ali Li".upper()) #全部换成大写 45 print("ali Li".zfill(20)) #方法返回指定长度的字符串,原字符串右对齐,前面填充0。 十六进制有用
九、关于字典
#-*- coding:utf-8 -*- __author__ = 'andylin' __date__ = '2017/7/8 8:33' dictlist = { 'python':'auto', 'c++':'machine', 'dangdang':'book', 'jd':'shop', 'good':'world', 'd':'a' } """ 字典是无序的 key是唯一的 """ #添加 dictlist['baidu'] = 'search' print(dictlist) #表示搜索 #删除 del dictlist['d'] print(dictlist) dictlist.pop('good') print(dictlist) #删除动作 dictlist.popitem() #随机删除一个 print("#################") print(dictlist) #修改 dictlist['jd'] = 'hello world' print(dictlist) #修改 b = { 'jd':'买产品', 1:2, } dictlist.update(b) print(dictlist) #表示有的就更新,没有的就添加 #查找 print(dictlist.get('baidu')) #找到了就返回对应的value值 print(dictlist.get('hello')) #没找到返回None print('jd' in dictlist) #判断jd key是否存在 #其他 dictlist.pop('jd') print(dictlist.setdefault('jd','京东')) #表示如果没有就使用默认的值 print(dictlist) c = dictlist.fromkeys([6,7,8],'test') print(c) c=dictlist.fromkeys([6,7,8],[1,{"name":'who'},444]) print(c) c[7][1]['name'] = 'baidu' print(c) #既然全部都改了, 有点像潜伏制 for i in dictlist: #最好选择这项 print(i) for k,v in dictlist.items(): print(k,v)
关于三级菜单的练习
#-*- coding:utf-8 -*- __author__ = 'andylin' __date__ = '2017/7/8 17:19' """ 三级菜单实例化的问题 """ areadict = { '广东':{ '广州':{ '天河':'美食城', '番禺':'长隆' }, '深圳':{ '福田':'政府', '南山':'科技园' } }, '海南':{ '海口':{ '龙华':'万绿园', '美兰':'美食' }, '三亚':{ '吉阳':'美丽', '天涯':'海边' } } } exec_for_return = True while exec_for_return: for choise1 in areadict: print(choise1) choisenow = input('输入选择省>>>') if choisenow in areadict: for choise2 in areadict[choisenow]: print(choise2) choisenow2 = input('输入选择市>>>') if choisenow2 in areadict[choisenow]: for choise3 in areadict[choisenow][choisenow2]: print(choise3) choisenow3 = input('输入选择区镇>>>') if choisenow3 in areadict[choisenow][choisenow2]: print(areadict[choisenow][choisenow2][choisenow3]) choisenow4 = input('输入选择(q退出)>>>') if choisenow4 == 'q': print('结束!') exec_for_return = False else: pass elif choisenow2 == 'q': print('结束!') exec_for_return = False else: pass elif choisenow == 'q': print('结束!') exec_for_return = False else: pass
十、集合
#-*- coding:utf-8 -*- __author__ = 'andylin' __date__ = '2017/7/8 20:18' a = set([1,2,3,4,5]) print(a) b = set([3,4,5,6,7,8]) print(b) print(a.union(b)) #表示并集 print(a|b) #表示并集 print("##########a & b ########") print(a.intersection(b))#表示交集 print(a & b) #表示交集 print("############a^b################") print(a.symmetric_difference(b)) #去除相同的 print(a ^ b) #去除相同的 print(a.difference(b)) #表示剔除b中的所有 print(a-b) #求差集(项在a中,但不在b中) #添加 a.add(9) print(a) a.update([22,33]) #可以看到其参数是 *other 形式,表示为list print(a) #删除 a.remove(9) print(a) #表示长度 print(len(a)) print(1 in a ) #表示 1是否为a的元素 print(a.issuperset([1,2,3])) # a >=[1,2,3] 表示为list形式 print(a.copy()) #浅复制 print(a.clear()) #表示清除所有
十、函数
def abc(): print("AAAA") abc() #简单调用 def a(ab): print(ab) a('dd') #参数调用 def b(*ab): print(type(ab)) for i in ab: print(i) a=[1,2,3,4,5,6] b(*a) #说明这个是tuple类型,但前面必须要带个* def d(a,b='1'): print(a,b) d('a','c') #就是默认参数的要写在后面 def d(a,b='1',**dict): print(a,b) for i in dict: print(i,dict[i]) d('a','c',ab='ccc') #字典形式 import sys def abcd(a): print(a) if a == 8: sys.exit() return abcd(a*2) abcd(2) #递归
递归特性:
1、必须有一个明确的结束条件
2、每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3、递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回
栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)