• python作业:购物车(第二周)


    一.作业需求:

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

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

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

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

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

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

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

    二.购物车用户信息:

    {'name': {'password': '10000'}, 'cx': {'123': '725.0'}, 'even': {'qw': '1560'}, 'cv1': {'1': 100.5}}
    以字典形式存储用户名,密码,余额

    三.历史购物信息:

    {'name': [['iphone', 5800], ['bike', 800]], 'cx': [['iphone', 5800], ['apple', 5],  ['apple', 5], ['book', 75]]}
    以字典形式,对应用户名和历史购物记录

    四.流程图:

     

    五.代码:(python3.6,mac环境):

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 # Author: Even
     4 
     5 set = False    # 设置set 当输入为q就可以退出
     6 file = open('购物车用户信息存档','r+',encoding='utf-8')    # 读取购物车用户信息文件
     7 f = str(file.read())    # 将文件内容转化成字符串
     8 for line in f:    # 逐行读取
     9     file_str = str(f)
    10 data= eval(file_str)    # 将字符串转换为字典data
    11 name = input("请输入姓名:")    # 提示输入用户名
    12 password = input("请输入密码:")    # 提示输入密码
    13 while True:
    14     if name in data:    # 用户名在字典data
    15         if password in data[name]:    # 密码如果能对应用户名,就欢迎登录
    16             salay = float(data[name][password])
    17             print('''33[32;1m欢迎登录,当前余额为%s33[0m'''%salay)
    18             break
    19         else:    # 否则密码输入错误,提示重新输入
    20             password = input("密码输入错误,请重新输入:")
    21             continue
    22     else:    # 否则判断为首次登录,将用户名,密码,工资存到用户信息文件中
    23         password_salay = {}
    24         salay_str = input("欢迎首次登录,请输入你的工资:")    # 输入工资数
    25         salay = float(salay_str)    # 将输入的字符串转换为数字
    26         password_salay[password] = salay    # 将工资对应到密码
    27         data[name] = password_salay    # 将密码-工资对对应到用户名
    28         file.seek(0)    # 文件的读取移到开头
    29         file.write(str(data))    # 写入新的字典信息
    30         file.tell()    # 返回当前位置
    31         break
    32 
    33 
    34 list = [    # 购物清单
    35     ["iphone",5800],
    36     ["bike",800],
    37     ["macbook",17500],
    38     ["book",75],
    39     ["apple",5]
    40 ]
    41 
    42 file_list_r = open('历史购买记录','r+',encoding='utf-8')    # 读取历史购买记录文件
    43 f_list_r = str(file_list_r.read())
    44 shoppinglist_dict = eval(f_list_r)    # 将历史记录信息转换为字典
    45 if name not in shoppinglist_dict:    # 如果首次登录,会没有历史记录
    46     shoppinglist_dict[name] = []    # 首次登录历史记录留空
    47 shoppinglist = shoppinglist_dict[name]    # 不是首次登录,将之前历史记录赋值到变量
    48 shoppinglist_now = []    # 本次购物记录留空
    49 choose = input("
    是否需要查询历史购物记录(y/n):")    # 询问是否需要查询历史记录
    50 if choose == 'y':    # 选y,输出历史购物记录
    51     print("
    
    -----------历史购物记录------------")
    52     print(shoppinglist)
    53     print("--------------结束---------------
    
    ")
    54 
    55 while not set:    # 购物车开始
    56     print('-----------商品清单------------')    # 输出商品清单
    57     for index,item in enumerate(list,1):
    58         print(index,item)
    59     print("-------------结束--------------")
    60     number = input("请输入想购买的商品编号:")    # 输入商品编号
    61     if number == "q":    # 当输入为q,退出,打印本次购物清单
    62         set = True
    63         data[name][password] = str(salay)    # 将字符串的工资给到对应用户名下的密码-工资对中
    64         file.seek(0)
    65         file.write(str(data))    # 将用户信息写入购物车用户信息存档中
    66         file.tell()
    67         print("------------购物清单------------")    # 打印购物清单,提示余额
    68         print(shoppinglist_now)
    69         print("您的余额为:",salay)
    70         print("-------------结束--------------")
    71         shoppinglist.extend(shoppinglist_now)    # 将本次购物记录追加到购物记录列表中
    72         shoppinglist_dict[name] = shoppinglist    # 购物列表与用户名做对应
    73         file_list_r.seek(0)
    74         file_list_r.write(str(shoppinglist_dict))    # 写入字符串的购物历史记录
    75         file_list_r.tell()
    76     elif number.isdigit() == False:    # 校验输入是否为整数
    77         print("33[31;1m输入不是编号内容,请重新输入33[0m")
    78     elif int(number)>int(len(list)) or int(number)<= 0:    # 如果输入值不在清单中,提示报错
    79         print("33[31;1m您所购买的商品不在清单中33[0m")
    80     else:
    81         number_buy = int(number)-1
    82         if list[number_buy][1]<(salay):    # 如果余额够,提示成功购买,显示余额
    83             salay = salay - int(list[number_buy][1])
    84             msg = '''
    85                             33[32;1m您已将%s加入购物车中
    86                             余额为%d33[0m
    87                             ''' % (list[number_buy][0],salay)
    88             print(msg)
    89             shoppinglist_now.append(list[number_buy])    # 本次购物信息加到本次购买记录中
    90         else:
    91             print("33[31;1m您已没有余额可以购买33[0m")    # 否则提示余额不足
    View Code
  • 相关阅读:
    with原理__enter__、__exit__
    os模块walk方法
    restful规范简要概述
    python全栈开发day113-DBUtils(pymysql数据连接池)、Request管理上下文分析
    关于word2016中图片和正文编号自动更新的方法
    秋招
    GIL(全局解释器锁)
    多任务:进程、线程、协程对比
    多任务:协程
    进程和线程的对比
  • 原文地址:https://www.cnblogs.com/bg0131/p/6430943.html
Copyright © 2020-2023  润新知