python练习加作业01
目录:
- 元素分类
- 选择商品,加入购物车
- 用户交互,显示省市县三级联动的选择
- 文件操作
- 用户登陆
1、元素分类
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # Author:Shu Yang Wang 4 5 ''' 6 元素分类 7 有如下值集合 v1 = [11,22,33,44,55,66,77,88,99,90], 8 将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。 9 即: {'k1': 大于66的所有值, 'k2': 小于66的所有值} 10 ''' 11 12 #定义初始变量 13 v1 = [11,22,33,44,55,66,77,88,99,90] 14 v2 = {'k1':[], 'k2':[]} 15 16 #for循环v1列表 17 for item in v1: 18 #大于 19 if item > 66: 20 #list添加 21 v2['k1'].append(item) 22 #小于 23 elif item < 66: 24 v2['k2'].append(item) 25 #等于 26 else: 27 print('item【%s】 既不大于,也不小于66' % item) 28 29 print('dict_v2: %s' % v2 )
2、选择商品,加入购物车
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # Author:Shu Yang Wang 4 5 ''' 6 要求用户输入总资产,例如:2000 7 显示商品列表,让用户根据序号选择商品,加入购物车 8 购买,如果商品总额大于总资产,提示账户余额不足,否则,购买成功。 9 ''' 10 11 goods = [ 12 {"name": "电脑", "price": 1999}, 13 {"name": "鼠标", "price": 10}, 14 {"name": "游艇", "price": 20}, 15 {"name": "美女", "price": 998} 16 ] 17 #循环标记 18 while_flag = False 19 #购物车 20 shop_car_list =[] 21 22 while not while_flag: 23 #输入总资产金额 24 total_assets = input('请输出购买资金:') 25 #判断input是否是一个数字 26 if total_assets.isdigit(): 27 total_assets = int(total_assets) 28 else: 29 print('输入的不是一个有效的数字,请重新输入!') 30 continue 31 #进入商品列表,正常使用enumerate()加信号,因为联系字典和列表,就不加了 32 while not while_flag: 33 shop_num_list = [] 34 #打印商品列表 35 for item in range(0,len(goods)): 36 #转成str方便与input做判断 37 shop_num_list.append(str(item)) 38 print('编号:%s 名称:%s 价格:%s' % (str(item), goods[item]['name'],goods[item]['price'])) 39 40 #用户输入 41 user_choose = input('请输入物品编号(q退出):') 42 43 #退出 44 if user_choose == 'q': 45 print('再见') 46 while_flag = True 47 break 48 49 #先判断判断是否在商品列表中 50 if user_choose in shop_num_list: 51 user_choose = int(user_choose) 52 53 #进行金额计算 54 if total_assets > goods[user_choose]['price']: 55 total_assets -= goods[user_choose]['price'] 56 shop_car_list.append([goods[user_choose]['name'],goods[user_choose]['price']]) 57 print('您一共购买了%s' % shop_car_list) 58 else: 59 print('您的余额%s, 不足以购买%s此商品' % (total_assets, goods[user_choose]['name'])) 60 else: 61 print('不在商品列表内,请重新输入!') 62 continue
3、用户交互,显示省市县三级联动的选择
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # Author:Shu Yang Wang 4 5 ''' 6 用户交互,显示省市县三级联动的选择 7 ''' 8 9 #定义变量字典 10 menu = { 11 "北京":{ 12 "海淀":["花园桥","中关村","五路居"], 13 "西城":["三里河","西直门", "军博"], 14 }, 15 "河北省":{ 16 "石家庄市":['长安区','桥西区','新华区'], 17 "唐山市":['路北区','路南区','古冶区'], 18 "保定市":['竞秀区','莲池区','满城区'] 19 }, 20 "吉林省":{ 21 "长春市":['南关区','朝阳区','绿园区'], 22 "吉林市":['船营区','龙潭区','昌邑区'], 23 "松原市":['宁江区','乾安县','长岭县'] 24 }, 25 "黑龙江省":{ 26 "哈尔滨市":['道里区','南岗区','道外区'], 27 "佳木斯市":['向阳区','前进区','东风区'], 28 "牡丹江市":['东安区','阳明区','爱民区'] 29 } 30 31 } 32 #定义循环 33 while_flag = False 34 while not while_flag: 35 while not while_flag: 36 #一级目录打印 37 first_list = [] 38 for item in enumerate(menu.keys()): 39 first_list.append(item[1]) 40 print(item[0], item[1]) 41 42 43 user_choose_first = input('请输入选择编号(q退出):') 44 45 #退出 46 if user_choose_first == 'q': 47 while_flag = True 48 break 49 50 #检查输入是否正确 51 elif user_choose_first.isdigit() and int(user_choose_first) in range(len(first_list)): 52 while not while_flag: 53 user_choose_city = menu[first_list[int(user_choose_first)]] 54 second_list = [] 55 # 判断有没有下一级目录 56 if user_choose_city: 57 #二级目录打印 58 for item in enumerate(user_choose_city): 59 second_list.append(item[1]) 60 print(item[0],item[1]) 61 else: 62 print('没有下一层了') 63 continue 64 65 user_choose_second = input('请输入选择编号(b上一层):') 66 67 # 退出 68 if user_choose_second == 'b': 69 break 70 elif user_choose_second == 'q': 71 while_flag = True 72 break 73 74 # 检查输入是否正确 75 elif user_choose_second.isdigit() and int(user_choose_second) in range(len(second_list)): 76 user_choose_area = menu[first_list[int(user_choose_first)]][second_list[int(user_choose_second)]] 77 while not while_flag: 78 79 third_list = [] 80 #判断有没有下一级目录 81 if user_choose_area: 82 # 三级目录打印 83 for item in enumerate(user_choose_area): 84 second_list.append(item[1]) 85 print(item[0], item[1]) 86 print('%s没有下一层了' % item[1]) 87 88 user_choose_third = input('请输入选择编号(b上一层):') 89 90 # 退出 91 if user_choose_third == 'b': 92 break 93 elif user_choose_third == 'q': 94 while_flag = True 95 break 96 else: 97 print('没有下一层了') 98 break 99 100 else: 101 print('请输入正确的编号')
4、文件操作
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # Author:Shu Yang Wang 4 5 ''' 6 登录示例 7 1. 打开并读取文件内容 8 2. 格式化,列表中嵌套字典 9 3. 列表中嵌套的字典 10 4. 重新写入文件 11 ''' 12 13 #1. 打开并读取文件内容 14 f1 = open('db', 'r') 15 data = f1.read() 16 f1.close() 17 18 # 2. 格式化,列表中嵌套字典 19 print(data) 20 user_info_list = [] 21 user_str_list = data.split('\n') 22 for item in user_str_list: 23 temp = item.split('|') 24 v = { 25 'name': temp[0], 26 'pwd': temp[1], 27 'times': temp[2] 28 } 29 user_info_list.append(v) 30 user_info_list[1]['times'] = 3 31 print(user_info_list) 32 33 #3. 列表中嵌套的字典 34 user_info_write = '' 35 for item_write in user_info_list: 36 temp_write = '%s|%s|%s\n'%(item_write['name'], item_write['pwd'], item_write['times']) 37 user_info_write = '%s%s' %(user_info_write,temp_write) 38 print(user_info_write) 39 40 #4. 打开并读取文件内容 41 f2 = open('db', 'w') 42 f2.write(user_info_write) 43 f2.close()
5、用户登陆
a.流程图

b.文件说明:
login_v2.py 为功能实现主程序。
login_main.py 为菜单定义文件,为主程序节省代码量
login_user_v2.db 为文件数据存放位置。
ps.数据类型以'|'为分隔符形式保存:用户名|密码|用户状态
c.代码:
login_v2.py
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # Author:Shu Yang Wang 4 5 6 ''' 7 login运行文件 8 ''' 9 from login_main import login_main, status_code 10 11 #循环标记 12 while_flag = False 13 #打印状态信息标记 14 status_print = False 15 16 #文件名 17 file_name = 'login_user_v2.db' 18 19 #以json方式,读取数据 20 read_f = open(file_name, 'r') 21 data = read_f.read() 22 user_data = [] 23 user_str_list = data.split() 24 for item in user_str_list: 25 temp = item.split('|') 26 v = { 27 'id': temp[0], 28 'pwd': temp[1], 29 'status': temp[2] 30 } 31 user_data.append(v) 32 read_f.close() 33 34 while not while_flag: 35 user_name = input('请输入用户名:') 36 #验证用户名是否为存在 37 for user_info in user_data: 38 if user_name == user_info['id']: 39 if user_info['status'] == "0": 40 #验证密码 41 for j in range(0,3): 42 password = input('请输入密码:') 43 if password == user_info['pwd']: 44 status_print =status_code[2] 45 while_flag = True 46 break 47 else: 48 status_print = status_code[1] % (2 - j) 49 if 2 - j > 0: 50 print(login_main % (user_name, status_print)) 51 else: 52 #写入文件锁定该用户 53 status_print = status_code[0] 54 user_info['status'] = "1" 55 print(login_main % (user_name, status_print)) 56 #并跳出循环,写入文件 57 while_flag = True 58 break 59 else: 60 #锁定用户 61 status_print = status_code[0] 62 63 64 else: 65 #判断用户状态是否存在 66 if status_print: 67 print(login_main % (user_name, status_print)) 68 else: 69 status_print = status_code[3] 70 print(login_main % (user_name, status_print)) 71 72 user_info_write = '' 73 for item_write in user_data: 74 temp_write = '%s|%s|%s\n'%(item_write['id'], item_write['pwd'], item_write['status']) 75 user_info_write = '%s%s' % (user_info_write,temp_write) 76 write_f = open(file_name, 'w') 77 write_f.write(user_info_write) 78 write_f.close()
login_main.py
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # Author:Shu Yang Wang 4 5 ''' 6 login显示界面 7 用户名 : xxx 8 状态 : 锁定\ 登陆成功\ 密码错误,还有n次\不存在 9 ''' 10 11 #登陆状态显示 12 login_main = ''' 13 -----------登陆界面----------- 14 用户名 : %s 15 状态 : %s 16 ''' 17 18 #状态码 19 status_code = ['登陆失败,已锁定,请联系管理员解锁','登陆失败,还有%s将锁定','登陆成功', '不存在']
login_user_v2.db
1 wangshuyang|123|0 2 test|123|1 3 test1|123|0
d.结果
信息提示:
-----------登陆界面-----------
用户名 : xxx
状态 : ['已锁定','登陆失败,还有%s将锁定','登陆成功', '不存在']等状态信息

浙公网安备 33010602011771号