垃圾处理机制
# 垃圾回收机制 # 是python自带的一种自动回收无用内存空间的机制 # 节省内存空间提高运行效率 # 1 引用计数 当变量值被变量名直接连接或者间接连接时,则变量计数加一,当变量计数为零时,则解释器回收内存 # 引用计数分为:直接引用和间接引用 # 直接引用 : x = 10 # 间接引用 : l = [1 ,2,x] ''' ps: l1 = [1 , 2 , x] 与 l2 = [1,2,10] 一样 x = 10 x 中存储的是x的10的内存地址 l1,l2中存取的是列表 [1,2,10]内存地址 x = 10 l = [x] x = 123 print(l) == print([10]) 当列表中存取变量时只存取变量相对应的内存地址而跟变量无关,变量变列表中的值不变. ''' # 但是引用计数存在漏洞 为了修补引用计数的漏洞 产生了 # 2 标记清楚算法 # 容器数据类型的循环引用造成漏洞 例如 l1 = ['alex','lee',l2} l2 = ['alex','lee',l1} 当解除l1 l2 与其对应变量值的绑定关系后 # 其变量值相互关联引用计数算法无法不能回收,我们也无法调用,浪费内存空间.所以有了标记清除法 # 栈区 : 存放变量名称 # 堆区 : 存放变量值 # 开始时扫描 从栈区每个变量名出发往后标记.堆区中没有标记的值就是无法被调取的.清除. # 分代回收(降低引用计数的扫描频率,提高回收效率) # 给变量设置权重值 # 降低.引用计数扫描中一直存在连接的变量扫描频率. input('')
用户交互
# 1、接收用户的输入 # 在Python3:input会将用户输入的所有内容都存成字符串类型 # username = input("请输入您的账号:") # "egon" # print(username, type(username)) # age = input("请输入的你的年龄: ") # age="18" # print(age, type(age)) # age=int(age) # int只能将纯数字的字符串转成整型 # print(age > 16) # int("12345") # int("1234.5") # int("1234abc5") # 在python2中: # raw_input():用法与python3的input一模一样 # input(): 要求用户必须输入一个明确的数据类型,输入的是什么类型,就存成什么类型 # >>> age=input(">>>>>>>>>>>>>>>>>>>>>: ") # >>>>>>>>>>>>>>>>>>>>>: 18 # >>> age,type(age) # (18, <type 'int'>) # >>> # >>> x=input(">>>>>>>>>>>>>>>>>>>>>: ") # >>>>>>>>>>>>>>>>>>>>>: 1.3 # >>> x,type(x) # (1.3, <type 'float'>) # >>> # >>> x=input(">>>>>>>>>>>>>>>>>>>>>: ") # >>>>>>>>>>>>>>>>>>>>>: [1,2,3] # >>> x,type(x) # ([1, 2, 3], <type 'list'>) # >>> # 2。字符串的格式化输出 # 2.1 % # 值按照位置与%s一一对应,少一个不行,多一个也不行 # res="my name is %s my age is %s" %('egon',"18") # res="my name is %s my age is %s" %("18",'egon') # res="my name is %s" %"egon" # print(res) # 以字典的形式传值,打破位置的限制 # res="我的名字是 %(name)s 我的年龄是 %(age)s" %{"age":"18","name":'egon'} # print(res) # %s可以接收任意类型 # print('my age is %s' %18) # print('my age is %s' %[1,23]) # print('my age is %s' %{'a':333}) # print('my age is %d' %18) # %d只能接收int # print('my age is %d' %"18") # 2.2 str.format:兼容性好 # 按照位置传值 # res='我的名字是 {} 我的年龄是 {}'.format('egon',18) # print(res) # res='我的名字是 {0}{0}{0} 我的年龄是 {1}{1}'.format('egon',18) # print(res) # 打破位置的限制,按照key=value传值 # res="我的名字是 {name} 我的年龄是 {age}".format(age=18,name='egon') # print(res) # 了解知识 """ 2.4 填充与格式化 # 先取到值,然后在冒号后设定填充格式:[填充字符][对齐方式][宽度] # *<10:左对齐,总共10个字符,不够的用*号填充 print('{0:*<10}'.format('开始执行')) # 开始执行****** # *>10:右对齐,总共10个字符,不够的用*号填充 print('{0:*>10}'.format('开始执行')) # ******开始执行 # *^10:居中显示,总共10个字符,不够的用*号填充 print('{0:*^10}'.format('开始执行')) # ***开始执行*** 2.5 精度与进制 print('{salary:.3f}'.format(salary=1232132.12351)) #精确到小数点后3位,四舍五入,结果为:1232132.124 print('{0:b}'.format(123)) # 转成二进制,结果为:1111011 print('{0:o}'.format(9)) # 转成八进制,结果为:11 print('{0:x}'.format(15)) # 转成十六进制,结果为:f print('{0:,}'.format(99812939393931)) # 千分位格式化,结果为:99,812,939,393,931 """ # 2.3 f:python3.5以后才推出 x = input('your name: ') y = input('your age: ') res = f'我的名字是{x} 我的年龄是{y}' print(res)
运算符
# 运算符 # 算数运算符 # +,-,*,/,//,**,% # 比较运算符 # >,>=,<,<=,==,!= # 赋值运算符 # = 变量的赋值运算 ''' 增量赋值 例如 a += 1 b -= 1 c *= c d **= 2 e %= 2 f //= 2 g /= 2 ''' # 链式赋值 x = 10 y = x z = y '+++++++++++++++++++++++++' x = y = z = 10 print(id(x),id(y),id(z)) # 交叉赋值 x = 10 y = 20 temp = x x = y y = temp print(x,y) '++++++++++++++++++++' x = 10 y = 20 x,y = y,x print(x,y) # 解压赋值(*****) # 重点 salaries = [111,222,333,444,555,666,777] mon_0 = salaries[0] mon_1 = salaries[1] mon_2 = salaries[2] mon_3 = salaries[3] mon_4 = salaries[4] mon_5 = salaries[5] mon_6 = salaries[6] print(mon_0,mon_1,mon_2,mon_3,mon_4,mon_5,mon_6) '++++++++++++++++++++++++++++++++++++++++++++++++++++' mon_6,mon_5,mon_4,mon_3,mon_2,mon_1,mon_0 = salaries print(mon_0,mon_1,mon_2,mon_3,mon_4,mon_5,mon_6) '++++++++++++++++++++++++++++++++++++++++++++++++' # 只取开头 mon_0,mon_1,*_= salaries print(mon_0,mon_1) # 只取结尾 *_,mon_5,mon_6 =salaries print(mon_5,mon_6) '''众所周知 *代表所有的意思 *讲没有对应关系的值存为列表然后赋值给紧跟其后的变量名 '''
作业
# 1 print('{0:-^36}'.format('in to Egon')) a = '''Name : {} Age : {} Sex : {} Job : {} ''' print(a.format('Egon',22,'male','teachor')) print('{0:-^36}'.format('end')) ''''不熟练待会练习''' # 2 users = {'enon':'永远18岁','lee':'睡你妹起床学习'} user_name = input('输入用户名>>>') if user_name.lower() in users.keys(): password = input('输入密码') if password == users[user_name.lower()]: print('登录成功') else: print('密码错误,请重试') else: print('用户名不存在') # 3 egon_age = 18 temp_age = int(input('猜一下egon的年龄')) if temp_age > egon_age: print('我那么老么,想清楚在说话 啊!') elif temp_age < egon_age: print('哈哈,我看起来这么年轻啊,小嘴抹了蜜') else: print('聪明,帅气如我永远18') # 4 print(10000//30) print(10000%30) # 5 egon = 18 egon += 3 print(egon) # 6 x = y = z = 10 # 7 dsb = 'egon' superman = 'alex' dsb , superman = superman, dsb # 8 name_1 , naem_2,name_3,name_4,name_5,name_6 = ['alex_sb','wusir_sb','oldboy_sb','egon_nb','lxx_nb','tank_nb'] print(name_1 , naem_2,name_3,name_4,name_5,name_6)
选做题
import time user = {'站在远方看童年': '123456', '背着小包袱去旅行': '123456', '梦醒安好': '123456', 'LLK': '123456', 'ZHL': '654321', 'llk':'123456'} fla_user_name = [] with open('.输入错误.txt', mode='r+', encoding='utf-8') as f: f.truncate() while 1: user_name = input('请输入用户名') user_password = input('请输入密码') with open('.锁定时间.txt', mode='r', encoding='utf-8') as f1: if f1: lock_user = {} for i in f1: lis = i.strip().split('_') # print(lis) # print(lis[0]) # print(lis[1],type(lis[1])) lock_user[lis[0]] = lis[1] else: lock_user = {} if user_name in lock_user.keys(): now_time = int(time.time()) star_time = int(lock_user[user_name]) time_long = now_time - star_time if time_long >= 300: with open('.输入错误.txt', mode='r+', encoding='utf-8') as f: for i in f: fla_user_name.append(i.strip()) while user_name in fla_user_name: fla_user_name.remove(user_name) f.seek(0) f.truncate() for i in fla_user_name: f.write(i+' ') with open('.锁定时间.txt', mode='r+', encoding='utf-8') as f: for i in f: lis = i.strip().split('_') lock_user[lis[0]] = lis[1] if user_name in lock_user.keys(): del lock_user[user_name] f.seek(0) f.truncate() for i in lock_user.keys(): f.write(i+'_'+lock_user[i]+' ') if user_name in user.keys() and user_password == user[user_name]: print('登录成功') break else: with open('.输入错误.txt', mode='r+', encoding='utf-8') as f: for i in f: fla_user_name.append(i.strip()) numb = fla_user_name.count(user_name) print('本用户还有%s次机会' % (2 - numb)) else: print('还有%s秒用户%s解锁' % (300 - time_long, user_name)) elif user_name in user.keys() and user_password == user[user_name]: print('登录成功') break else: with open('.输入错误.txt', mode='r+', encoding='utf-8') as f: for i in f: fla_user_name.append(i.strip()) numb = fla_user_name.count(user_name) if numb < 3: with open('.输入错误.txt', mode='a+', encoding='utf-8') as f: f.write(user_name + ' ') # f.seek(0) for i in f: fla_user_name.append(i.strip()) numb = fla_user_name.count(user_name) print('本用户还有%s次机会' % (2-numb)) """"这里写3-numb""" elif numb == 3: with open('.输入错误.txt', mode='a', encoding='utf-8') as f: f.write(user_name + ' ') print('用户已经锁定') star_time = int(time.time()) with open('.锁定时间.txt', mode='a+', encoding='utf-8') as f1: f1.write(user_name + '_' + str(star_time) + ' ') print('本用户锁定五分钟后解锁')