zoukankan      html  css  js  c++  java
  • 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()
     
     
  • 相关阅读:
    yii2.0 composer安装
    php composer包管理器
    Eclipse-selenium环境搭建
    JMeter-分布式
    Jmeter-接口压力测试
    Jmeter-操作Mysql
    Jmeter参数化-关联参数
    Jmeter参数化-从文件中读取参数(CSV Data Set Config)
    Jmeter参数化-用户参数
    Jmeter-文件上传
  • 原文地址:https://www.cnblogs.com/jailly/p/6734397.html
Copyright © 2011-2022 走看看