Python学习day02
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python学习day02相关的知识,希望对你有一定的参考价值。
#常量(也就是定义后不会再改变的变量),在定义时变量名为大写表明这是个常量。
一、pyc文件
pyc 是由py文件经过编译后二进制文件,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码,是由python 的虚 拟机来执行的。pyc的内容,是跟python的版本相关的,不同版本编译后的pyc文件是不同的,2.5编译的pyc文件,2.4版本的 python是无法执行的。pyc文件也是可以反编译的,不同版本编译后的pyc文件是不同。
二、字符串方法
字符串长度获取:len(str) 字母处理: 全部大写:str.upper() 全部小写:str.lower() 大小写互换:str.swapcase() 首字母大写,其余小写:str.capitalize() 首字母大写:str.title() 字符串去空格及去指定字符: 去两边空格:str.strip() 去左空格:str.lstrip() 去右空格:str.rstrip() 去两边指定的字符:str.strip(‘指定字符‘),相应的也有lstrip,rstrip 字符串判断相关: 是否以start开头:str.startswith(‘start‘) 是否以end结尾:str.endswith(‘end‘) 是否全为字母或数字:str.isalnum() 是否全字母:str.isalpha() 是否全数字:str.isdigit() 是否全小写:str.islower() 是否全大写:str.isupper() 字符串替换相关: 替换old为new:str.replace(‘old‘,‘new‘) #默认全替换 替换指定次数的old为new:str.replace(‘old‘,‘new‘,替换次数) 字符串搜索相关: 搜索指定字符串,没有返回-1:str.find(‘t‘) 指定起始位置搜索:str.find(‘t‘,start) 指定起始及结束位置搜索:str.find(‘t‘,start,end) 从右边开始查找:str.rfind(‘t‘) 搜索到多少个指定字符串:str.count(‘t‘) 上面所有方法都可用index代替,不同的是使用index查找不到会抛异常,而find返回-1 str.center(width[, fillchar]): width -- 这是字符串的总宽度。 fillchar -- 这是填充符,不填默认是空格。 str.capitalize(): capitalize()方法返回字符串的一个副本,只有它的第一个字母大写。 join方法: join 方法用于连接字符串数组 例: s = [‘a‘, ‘b‘, ‘c‘, ‘d‘] print ‘‘.join(s) print ‘-‘.join(s)
三、列表方法
与字符串的索引一样,列表索引从0开始。列表可以进行截取、组合等。 使用下标索引来访问列表中的值,同样也可以使用方括号的形式截取字符,具体如下 list1 = [‘aaaaaa‘, ‘bbbbbb‘, 1992, 2016]; list2 = [1, 2, 3, 4, 5,]; print "list1[0]: ", list1[0] print "list2[1:5]: ", list2[1:5] 列表操作包含以下函数: 1、cmp(list1, list2):比较两个列表的元素 2、len(list):列表元素个数 3、max(list):返回列表元素最大值 4、min(list):返回列表元素最小值 5、list(seq):将元组转换为列表 列表操作包含以下方法: 1、list.append(obj):在列表末尾添加新的对象 2、list.count(obj):统计某个元素在列表中出现的次数 3、list.extend(seq):在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) 4、list.index(obj):从列表中找出某个值第一个匹配项的索引位置 5、list.insert(index, obj):将对象插入列表 6、list.pop(obj=list[-1]):移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 7、list.remove(obj):移除列表中某个值的第一个匹配项 8、list.reverse():反向列表中元素 9、list.sort([func]):对原列表进行排序
四、字典方法
1、如何访问字典中的值? adict[key] 形式返回键key对应的值value,如果key不在字典中会引发一个KeyError。 2、如何检查key是否在字典中? a、has_key()方法 形如:adict.haskey(‘name‘) 有–>True,无–>False b、in 、not in 形如:‘name‘ in adict 有–>True,无–>False 3、如何更新字典? a、添加一个数据项(新元素)或键值对 adict[new_key] = value 形式添加一个项 b、更新一个数据项(元素)或键值对 adict[old_key] = new_value c、删除一个数据项(元素)或键值对 del adict[key] 删除键key的项 / del adict 删除整个字典 adict.pop(key) 删除键key的项并返回key对应的 value值 相关函数: len() 返回字典的长度 hash() 返回对象的哈希值,可以用来判断一个对象能否用来作为字典的键 dict() 函数,用来创建字典 字典的方法 1、adict.keys() 返回一个包含字典所有KEY的列表; 2、adict.values() 返回一个包含字典所有value的列表; 3、adict.items() 返回一个包含所有(键,值)元祖的列表; 4、adict.clear() 删除字典中的所有项或元素; 5、adict.copy() 返回一个字典浅拷贝的副本; 6、adict.fromkeys(seq, val=None) 创建并返回一个新字典,以seq中的元素做该字典的键,val做该字典中所有键对应的初始值(默认为None); 7、adict.get(key, default = None) 返回字典中key对应的值,若key不存在字典中,则返回default的值(default默认为None); 8、adict.has_key(key) 如果key在字典中,返回True,否则返回False。 现在用 in 、 not in; 9、adict.iteritems()、adict.iterkeys()、adict.itervalues() 与它们对应的非迭代方法一样,不同的是它们返回一个迭代子,而不是一个列表; 10、adict.pop(key[,default]) 和get方法相似。如果字典中存在key,删除并返回key对应的vuale;如果key不存在,且没有给出default的值,则引发keyerror异常; 11、adict.setdefault(key, default=None) 和set()方法相似,但如果字典中不存在Key键,由 adict[key] = default 为它赋值; 12、adict.update(bdict) 将字典bdict的键值对添加到字典adict中。
五、作业
#!/usr/bin/env python # _*_ conding:utf-8_*_ import os,json,time # user_info_file文件为用户密码及身份信息文件 if os.path.exists("user_info_file"): #如果存在不做任何操作 pass else: #否则创建该文件 user_info_dict = {} #定义用户信息字典 最终格式{用户名:[密码,身份证信息]} user_info_dict = json.dumps(user_info_dict) #将用户信息字典转化为json类型,以便写入文件 user_info_file = open("user_info_file", ‘w‘) user_info_file.write(user_info_dict) #将空字典写入用户信息文件中 user_info_file.close() #读取用户信息文件,将所有用户信息放在user_pass_all列表中 user_info_file = open("user_info_file", ‘r‘) user_info_all = user_info_file.read() user_info_file.close() user_info_all = json.loads(user_info_all) #将json类型转换为Python原始类型 #locked_user.txt文件为锁定用户文件。用户输入三次错误的密码后将会被锁定,锁定的用户保存在locked_user.txt文件中。 if os.path.exists("locked_user_file"): #如果存在不做任何操作 pass else: #否则创建该文件 locked_user_dict = {} #定义锁用户字典 最终格式{用户名:输入密码次数} locked_user_dict = json.dumps(locked_user_dict) #将锁用户字典转化为json类型,以便写入文件 locked_user_file = open("locked_user_file", ‘w‘) locked_user_file.write(locked_user_dict) locked_user_file.close() #读取用户锁定文件,将被锁定的用户放在locked_user_all列表中 locked_user_file = open("locked_user_file", ‘r‘) locked_user_all = locked_user_file.read() locked_user_file.close() locked_user_all = json.loads(locked_user_all) #将json类型转换为Python原始类型 # shop_car_file文件为用户购物车信息文件 if os.path.exists("shop_car_file"): #如果存在不做任何操作 pass else: #否则创建该文件 shop_car_dict = {} #定义购物车信息字典 #最终格式{user1:[[商品,数量,单价,总价,购买时间],[...]],user2:{商品:[[数量,单价,总价,购买时间][...]]}} shop_car_dict = json.dumps(shop_car_dict) #将购物车字典转化为json类型,以便写入文件 shop_car_file = open("shop_car_file", ‘w‘) shop_car_file.write(shop_car_dict) #将空字典写入用户信息文件中 shop_car_file.close() #读取购物车文件,将所有购物车文件信息放在user_pass_all列表中 shop_car_file = open("shop_car_file", ‘r‘) shop_car_all = shop_car_file.read() shop_car_file.close() shop_car_all = json.loads(shop_car_all) #将json类型转换为Python原始类型 # user_salary_file文件为用户余额信息文件 if os.path.exists("user_salary_file"): #如果存在不做任何操作 pass else: #否则创建该文件 user_salary_dict = {} #定义用户余额信息字典 最终格式{用户名:余额,用户名:余额} user_salary_dict = json.dumps(user_salary_dict) #将用户余额字典转化为json类型,以便写入文件 user_salary_file = open("user_salary_file", ‘w‘) user_salary_file.write(user_salary_dict) #将空字典写入用户信息文件中 user_salary_file.close() #读取用户余额信息文件,将所有用户余额信息放在user_pass_all列表中 user_salary_file = open("user_salary_file", ‘r‘) user_salary_all = user_salary_file.read() user_salary_file.close() user_salary_all = json.loads(user_salary_all) #将json类型转换为Python原始类型 #writefile函数是将数据写到文件中永久保存 def writefile(File,Dict): fwrite = open(File,‘w‘) #打开文件 json.dump(Dict,fwrite) #读取文件内容到字典中 fwrite.close() #关闭文件 #定义退出函数,退出时打印用户已购买商品信息及余额信息 def input_q(): if user not in list(shop_car_all.keys()): print("你没有购买过任何商品") else: print(‘您已购买以下商品‘.center(100,‘-‘)) print("\t","{:<10}".format(‘商品名‘),"{:<10}".format(‘件数‘),"{:<10}".format(‘单价‘), "{:<10}".format(‘总价‘),"{:<10}".format(‘购买时间‘)) #格式化输出抬头 for num,item in enumerate(range(len(shop_car_all[user]))): shop_time = time.gmtime(int(shop_car_all[user][num][4])) shop_time = time.strftime("%Y-%m-%d %X",shop_time) #将购买时间转化为可视化时间 print("{:<4}".format(num+1),"{:<10}".format(shop_car_all[user][num][0]), "{:<10}".format(shop_car_all[user][num][1]),"{:<10}".format(shop_car_all[user][num][2]), "{:<10}".format(shop_car_all[user][num][3]),"{:<10}".format(shop_time)) #格式化输出已购买商品信息 print(‘您的余额为:%d元‘%user_salary_all[user]) print(‘欢迎下次光临‘.center(100,‘-‘)) exit() #定义显示已购买商品信息函数,打印用户已购买商品信息及余额信息 def input_c(): if user not in list(shop_car_all.keys()): print("你没有购买过任何商品") else: print(‘您已购买以下商品‘.center(100,‘-‘)) print("\t","{:<10}".format(‘商品名‘),"{:<10}".format(‘件数‘),"{:<10}".format(‘单价‘), "{:<10}".format(‘总价‘),"{:<10}".format(‘购买时间‘)) #格式化输出抬头 for num,item in enumerate(range(len(shop_car_all[user]))): shop_time = time.gmtime(int(shop_car_all[user][num][4])) shop_time = time.strftime("%Y-%m-%d %X",shop_time) #将购买时间转化为可视化时间 print("{:<4}".format(num+1),"{:<10}".format(shop_car_all[user][num][0]), "{:<10}".format(shop_car_all[user][num][1]),"{:<10}".format(shop_car_all[user][num][2]), "{:<10}".format(shop_car_all[user][num][3]),"{:<10}".format(shop_time)) #格式化输出已购买商品信息 print(‘您的余额为:%d元‘%user_salary_all[user]) #定义充值函数 def input_j(): while True: recharge = input("请输入充值金额:") if recharge.isdigit(): #判断用户输入是否为数字 recharge = int(recharge) user_salary_all[user] += recharge #将充值后的金额写到用户余额字典中 writefile("user_salary_file",user_salary_all) #将更新后的信息写到用户余额文件中 print("充值成功,你的余额为:%s元" %user_salary_all[user]) break else: print("你的输入有误,请重新输入") continue login_value = 0 #该值为登录结果值,该值有0和1两个结果,若值为0不进行购买程序,若为1代表继续下面的购买程序 exit_flag = False while not exit_flag: action = [‘登录‘,‘注册‘,‘申诉‘,‘更改密码‘,‘退出‘] for select in enumerate(action,1): print(select[0],‘.‘,select[1]) #输出有哪些动作选项 user_select = input("请输入你要选择的动作编号:") if user_select.isdigit(): user_select = int(user_select) if user_select > 5 or user_select < 1: #判断用户输入是否合法 print("你的输入有误,请重新输入") continue if user_select == 1: #若为1,进行下方的登录程序 while not exit_flag: print("你只有三次输入密码的机会,若三次密码都错误,该用户将被锁定!") user = input("请输入用户名: ") passwd = input("请输入密码: ") if user not in list(user_info_all.keys()): #判断用户是否存在 print("该用户名不存在,请重新选择") break elif user in list(locked_user_all.keys()) and locked_user_all[user] == 3: #如果用户在列表中,说明用户为锁定用户 print("该用户被锁定,请申诉") break elif passwd != user_info_all[user][0]: #判断用户密码是否正确 if user in locked_user_all.keys(): #如果用户之前有过输入密码错误记录 locked_user_all[user] += 1 writefile("locked_user_file",locked_user_all) #将更新后的信息写入锁用户文件中 if locked_user_all[user] == 3: #如果该用户密码输入错误次数等于3 print("该用户名已输错密码三次,被锁定,如有需要,请申诉") break else: print("密码错误,请重新输入[该用户名已输错密码%d次,输错三次该用户名将被锁定]:" % locked_user_all[user]) else: #如果用户之前没有过输入密码错误记录 locked_user_all.update({user:1}) #将该用户添加到锁用户列表中,次数为1 writefile("locked_user_file",locked_user_all) #将更新后的信息写入到锁用户文件中 print("密码错误,请重新输入[该用户名已输错密码%d次,输错三次该用户名将被锁定]:" % locked_user_all[user]) else: print("欢迎访问") login_value = 1 #说明用户登录成功,将login_value的值改为1 exit_flag = True #退出程序 if user_select == 2: #若为2,说明用户要申请账号 while not exit_flag: new_user = input("请输入用户名: ") new_passwd_one = input("请输入密码: ") new_passwd_two = input("请再次输入密码: ") user_id_info = input("请输入你的身份证号码(方便申诉):") if new_user in list(user_info_all.keys()): #如果用户输入的用户名已存在 print("该用户名已存在,请重新输入") continue elif new_passwd_one != new_passwd_two: #如果用户输入的两次密码不一致 print("第一次和第二次密码不一样,请重新输入") continue elif not user_id_info.isdigit(): #如果用户输入的身份证号码不为数字 print("请输入正确的身份证号码信息") continue elif new_passwd_one == new_passwd_two: #如果用户输入的两次密码一致 user_info_all.update({new_user:[new_passwd_one,user_id_info]}) #将新注册的用户名及密码加入到用户密码字典中 writefile("user_info_file", user_info_all) #将更新的信息写入到用户信息文件中 print("恭喜,注册成功") break if user_select == 3: #若为3,说明用户要申诉 while not exit_flag: appeal_user = input("请输入需要申诉的用户名:") #该变量为用户申诉的用户名 if appeal_user not in list(user_info_all.keys()): #如果用户输入的用户名不在用户信息字典中 print("用户名不存在,请重新选择") break elif appeal_user not in list(locked_user_all.keys()) or locked_user_all[appeal_user] < 3: #若果用户名不在锁用户字典中或 print("该用户名未被锁定,请重新选择") #用户名输入密码错误的次数小于3 break elif locked_user_all[appeal_user] == 3: #如果用户名输入密码错误的此物为3 appeal_id = input("请输入该用户的身份证号码:") if appeal_id == user_info_all[appeal_user][1]: #判断用户输入的身份证号码是否正确 del locked_user_all[appeal_user] #若正确,在锁用户字典中删除该条记录 writefile("locked_user_file",locked_user_all) #将更新后的信息写入到锁用户文件中 new_passwd = input("申诉成功,请输入新密码:") user_info_all[appeal_user][0] = new_passwd writefile("user_info_file",user_info_all) #将用户的新密码写入到用户信息文件中 print("密码修改成功") break else: print("身份证号码输入错误") break if user_select == 4: #若用户输入4,表明用户要改密码 change_pass_user = input("请输入用户名:") #该变量为用户需要改密码的用户名 if change_pass_user not in list(user_info_all.keys()): #如果用户名不在在用户信息字典中 print("用户名不存在,请重新选择") else: change_pass_id = input("请输入身份证号码:") if change_pass_id == user_info_all[change_pass_user][1]: #若果用户输入的身份证号码正确 while True: change_pass_one = input("请输入新密码:") change_pass_two = input("请再次输入新密码:") if change_pass_one == change_pass_two: #如果两次密码一致 user_info_all[change_pass_user][0] = change_pass_one #更改用户密码 writefile("user_info_file",user_info_all) #将更改的信息写入到用户信息问价中 print("恭喜,密码修改成功") break else: print("两次密码输入不一样,请重新输入") continue else: print("身份证号码错误") if user_select == 5: #若用户输入5,代表退出程序 exit_flag = True else: print("你的输入有误,请重新输入") continue if login_value == 0: #如果登录结果值为0,结束程序 exit() if user not in list(user_salary_all.keys()): #如果用户不在用户余额字典中 while True: salary = input(‘输入你的工资: ‘) #让用户输入工资 if salary.isdigit(): #判断用户输入是否为数字 salary = int(salary) #是的话转换数据类型为数字 user_salary_all[user] = salary #在用户余额字典中添加一对键值对 writefile("user_salary_file",user_salary_all) #将更新后的信息写入到用户余额文件中 break elif salary == ‘q‘: #若用户输入为‘q‘,退出程序 exit() else: print("无效的数据类型") #否则提示无效的数据类型 continue # 定义商品字典 product_dict = {"手机": [(‘锤子手机‘,2500),(‘苹果6s‘,6000),(‘华为‘,3000),(‘小米‘,1500),(‘Vivo‘,3000),(‘oppo‘,3000),(‘Nokia‘,300),(‘摩托罗拉‘,150)], "家电": [("微波炉",300),("冰箱",3000),("洗衣机",1200)] } exit_flag = False while not exit_flag: while not exit_flag: print(‘祝你购物愉快,以下为商品类别列表‘.center(100,‘-‘)) counter = 1 format_dict = {} #该字典存放编号及商品类别信息,方便用户输入编号系统知道用户选择的商品类别 for i in list(list(product_dict.keys())): print(‘{0}. {1}‘.format(counter,i)) format_dict[counter] = i #将同一等级的地区信息及改地区的编号记录到字典中方便后面调用 counter += 1 choice_one = input("请输入你想买的商品类别的编号(输入‘q‘退出,输入‘c‘检查购物车中的商品及余额,输入‘j‘充值):") if choice_one.isdigit(): #判断用户输入的是否为数字 choice_one = int(choice_one) if choice_one not in list(format_dict.keys()): #如果用户输入的数字不在编号商品类别字典中 print("你的输入有误,请重新输入") continue else: #如果用户输入正确 product_list = product_dict[format_dict[choice_one]] #该变量为二级商品信息 break elif choice_one == ‘q‘: #如果用户输入‘q‘,调用退出函数 input_q() elif choice_one == ‘c‘: #如果用户输入‘c‘,调用显示余额及已购商品信息函数 input_c() elif choice_one == ‘j‘: #如果用户输入‘j‘,调用充值函数 input_j() else: print("你的输入有误,请重新输入") while True: print(‘祝你购物愉快,以下为商品列表‘.center(100,‘-‘)) 以上是关于Python学习day02的主要内容,如果未能解决你的问题,请参考以下文章