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 )
View Code

 

 

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
View Code

 

 

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('请输入正确的编号')
View Code

 

 

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()
View Code

 

 

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()
View Code

 

 

 

    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将锁定','登陆成功', '不存在']
View Code

    login_user_v2.db

1 wangshuyang|123|0
2 test|123|1
3 test1|123|0
View Code

   d.结果

信息提示:
-----------登陆界面-----------
用户名 : xxx
状态 : ['已锁定','登陆失败,还有%s将锁定','登陆成功', '不存在']等状态信息

 

 

 

    

 

posted @ 2017-04-26 09:06  shuyang  阅读(212)  评论(0)    收藏  举报