python练习_module012购物车

购物车练习

一、需求:


1、启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表

2、允许用户根据商品编号购买商品

3、用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒

4、可随时退出,退出时,打印已购买商品和余额

5、在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示

6、用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买

7、允许查询之前的消费记录


二、实现需求:

- 达成7项作业需求
- 自动去除用户输入前后的空格
- 简单修饰商品列表,购物车列表
- 用户输入 s 显示消费记录后,程序暂停。可输入任意键,按回车继续

 

三、代码

  1. 生成包含 账号信息 的pickle文件


 1 import  pickle
 2 
 3 acc = {
 4     'Jailly':
 5         {'pwd':'123',
 6          'salary':None,
 7          'shopping cart':[]},
 8     'Lily':
 9         {'pwd':'abc',
10          'salary':None,
11         'shopping cart':[]}
12 }
13 
14 with open('acc.pkl','wb') as f:
15     pickle.dump(acc,f)

  2. 主程序

  1 #! /usr/bin/env python3
  2 # -*- encoding:utf-8 -*-
  3 # Author:Jailly
  4 
  5 import pickle,getpass
  6 
  7 # 用户登陆
  8 def login():
  9     count = 0
 10     while count < 3:
 11         name_input = input('用户名:').strip()
 12         pwd_input = getpass.getpass('密码:')
 13 
 14         if name_input in acc:
 15             if acc[name_input]['pwd'] == pwd_input:
 16                 return name_input
 17             else:
 18                 print('\033[1;31m密码错误\033[0m')
 19                 count += 1
 20         else:
 21             print('\033[1;31m您输入的用户名不存在,请重新输入\033[0m')
 22     else:
 23         print('错误次数太多,程序关闭...')
 24         exit()
 25 
 26 
 27 # 欢迎信息 & 判断是否第一次登陆
 28 def welcome(name_input):
 29     if acc[name_input]['salary']:
 30         salary = acc[name_input]['salary']
 31         print('欢迎,%s'%name_input)
 32         print('您的当前余额为\033[1;31m%d\033[0m,愿您购物愉快~' % salary)
 33     else:
 34         print('欢迎,%s' % name_input)
 35         salary = input('请输入您的工资:').strip()
 36 
 37         # 工资输入并判断输入是否正确
 38         while 1:
 39             if salary.isdigit() and int(salary) >= 0:
 40                 salary = int(salary)
 41 
 42                 break
 43             else:
 44                 salary = input('工资必须为正整数,请重新输入:')
 45     return salary
 46 
 47 # 消费记录
 48 def show_recode(sc,salary):
 49     print('-' * 51)
 50     print('|', 'shopping cart'.center(47, ' '), '|')
 51     print('-' * 51)
 52     for i in sc:
 53         print('|', i[0].center(22, ' '), '|', str(i[1]).center(22, ' '), '|')
 54         print('-' * 51)
 55     print('|',('您的余额为%d' % salary).center(42,' '),'|')
 56     print('-' * 51)
 57 
 58 # 选购商品
 59 def shopping(name_input,salary):
 60     sc = acc[name_input]['shopping cart']
 61 
 62     while 1:
 63         print(' Product List '.center(50,'-'))
 64         for k,v in enumerate(product_list):
 65             print(('| %s. %s'%(k,v)).ljust(48,' '),'|')
 66         print('-'*50)
 67 
 68         choice = input('请输入您想要购买的商品编号:').strip()
 69         if choice.isdigit():
 70             choice = int(choice)
 71             if 0 < choice < len(product_list):
 72                 p_item = product_list[choice]
 73                 salary -= p_item[1]
 74                 sc.append(p_item)
 75                 print('您刚购买了\033[;31m%s\033[0m,当前账户余额为\033[1;31m%d\033[0m'%(str(p_item),salary))
 76             else:
 77                 print('抱歉,没有找到您选择的商品')
 78 
 79         elif choice == 's':
 80             show_recode(sc,salary)
 81             input('输入回车键继续...')
 82 
 83         elif choice == 'q':
 84             show_recode(sc,salary)
 85 
 86             acc[name_input]['salary'] = salary
 87             acc[name_input]['shopping cart'] = sc
 88             with open('acc.pkl','wb') as f:
 89                 pickle.dump(acc,f)
 90 
 91             print('感谢您的支持,再见~')
 92             exit()
 93 
 94         else:
 95             print('\033[1;31m请输入正确的商品编号\033[0m')
 96 
 97 # 主程序
 98 def main():
 99     name_input = login()
100     salary = welcome(name_input)
101     shopping(name_input,salary)
102 
103 if __name__ == '__main__':
104     product_list = [
105         ('IPhone', 5000),
106         ('Mac Pro', 12000),
107         ('xbox360', 2500),
108         ('PlayStation3', 2000),
109         ('bike', 1000),
110         ('kindle', 150)
111     ]
112 
113     with open('acc.pkl', 'rb') as f:
114         acc = pickle.load(f)
115 
116     main()
 
 
原文地址:https://www.cnblogs.com/jailly/p/6734397.html