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()
     
     
  • 相关阅读:
    MongoDB 释放磁盘空间 db.runCommand({repairDatabase: 1 })
    RK 调试笔记
    RK Android7.1 拨号
    RK Android7.1 移植gt9271 TP偏移
    RK Android7.1 定制化 itvbox 盒子Launcher
    RK Android7.1 双屏显示旋转方向
    RK Android7.1 设置 内存条作假
    RK Android7.1 设置 蓝牙 已断开连接
    RK Android7.1 进入Camera2 亮度会增加
    RK 3128 调触摸屏 TP GT9XX
  • 原文地址:https://www.cnblogs.com/jailly/p/6734397.html
Copyright © 2011-2022 走看看