• Python 基础


    作业要求

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

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

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

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

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

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

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

    知识点解析

    • 函数式编程的逻辑和过程: 将项目的要求步骤化,并赋予不同的函数名。主程序调用这些函数。
    def init():                             # 系统初始化(读取所有商品并保存为全局变量)
        return True
    
    
    def login():                            # 登录认证
        pass
    
    
    def register():                         # 新用户注册,第一次登录,输入salary
        pass
    
    
    def show_products():                    # 展示所有商品的序号/名称/单价
        pass
    
    
    def user_choice():                      # 让用户输入选择的商品序号或者'q', 'q'返回就调用shwo_current_shopping_log
        pass
    
    
    def show_current_shopping_log():        # 显示本次购物日志
        pass
    
    
    def balance_enough():                   # 检验余额是否足够
        pass
    
    
    def add_cart():                         # 放入购物车,高亮显示,扣费。并调用日志信息shopping_log()和 show_user_balance()
        pass
    
    
    def shopping_log():                     # 添加到本次消费日志和用户信息的日志中
        pass
    
    
    def save_user():                        # 将用户信息存入文件中去
        pass
    
    
    def show_user_balance():                # 显示当前用户的历史购物日志
        pass
    
    
    def show_shopping_log():                # 显示用户所有历史的消费记录
        pass
    View Code
    • 函数的返回值 return True: 用来检验函数执行是否成功
    • 函数嵌套函数:常用于装饰器。我们知道,函数内定义的变量是局部变量。但是,如果函数内有函数,函数参数值在函数内的有效的。
    • 尽量详细的拆分
    • 调用文件全路径的方法: - OS 模块见笔记: http://www.cnblogs.com/lg100lg100/p/7158222.html 
    import os
    
    BASE_DIR = os.path.dirname(__file__)
    DB_DIR = os.path.join(BASE_DIR,'db') 
    # print(BASE_DIR)
    # print(DB_DIR)
    
    os.path.exist()
    • JSON 模块见笔记: http://www.cnblogs.com/lg100lg100/p/7160951.html 
    • 作业中出现的错误:字段名的命名还是用英语比较好,中文出现错别字,就无法执行程序。

    作业代码:

    #!usr/bin/env python
    # -*- coding:utf-8 -*-
    # Author: Jane Yue
    
    import sys
    import json
    
    open_line = '''
           有机生鲜 多*快*好*省
    ----------------------------------
    a键: 新用户注册
    b键:登陆账户
    q键:退出
    ----------------------------------
    '''
    
    user_menu = ['退出', '购物', '充值', '查询']
    
    
    def save_into_file(db_dict, filename='user_data.json'):
        # 辅助函数:将信息存入文件,默认文件为 user_status.json
        with open(filename, "w", encoding="utf-8") as f:
            json.dump(db_dict, f)
    
    
    def load_from_file(filename='user_data.json'):
        # 辅助函数:读取文件信息,默认文件为 user_status.json
        with open(filename, 'r', encoding="utf-8") as f:
            db_dict = json.load(f)
        return db_dict
    
    
    def openline():
        # 程序开始
        while True:
            print(open_line)
            open_choice = input('请根据菜单选择:').strip()
            if open_choice == "a":
                username = input("用户名:")
                register(username)
            elif open_choice == "b":
                login()
            elif open_choice == "q":
                sys.exit()
            else:
                print("错误信息,重新输入")
                continue
    
    
    def login():
        # 登录认证
        db_dict = load_from_file()                  # python字典格式:{"username":{"密码": "password","历史记录":["商品"], "余额": 000}}
        count = 0
        while count < 3:
            username = input('用户名: ')
            if username in db_dict:
                password = input('密码: ')
                if password == db_dict[username]["密码"]:
                    print("小主,欢迎回来买买买!")
                    core_menu(username)
                else:
                    count += 1
                    print("密码错误,您还有%d机会。" % (3 - count))
                    continue
            else:
                print("用户名不存在,请注册新账户")
                register(username)
                return True
    
    
    def register(username):
        # 注册新账户并存入文件
        db_dict = load_from_file()
    
        while True:
            print("用户名:%s" % username)
            password = input("密码:")
            if len(password.strip()) > 0:
                db_dict[username] = {
                    "密码": "password",
                    "历史纪录": ["商品"],
                    "余额": 000}
                ini_balance = int(input("首次充值额:"))
                db_dict[username]["余额"] = ini_balance
                save_into_file(db_dict)
                print("欢迎第一次登陆,%s" % username)
                core_menu(username)
            else:
                print("请输入密码")
                continue
    
    
    def core_menu(username):
        # 用户登陆后,显示选项及菜单
        print('用户菜单'.center(25, "="))
        for i in user_menu:
            print(user_menu.index(i), i)
    
        while True:
            choice = input('亲,请选择 >>> ')
            if choice == "1":
                shopping(username)
            elif choice == "2":
                topup(username)
            elif choice == "3":
                show_user_balance(username)
            elif choice == "q":
                print('88,亲')
                sys.exit()
            else:
                print('错误信息,请重新选择')
                continue
    
    
    def shopping(username):
        # 购物
        menu_dict = load_from_file("menu.json")
        db_dict = load_from_file()
    
        while True:
            for i in sorted(menu_dict):
                print(i)
            option1 = input('请选择33[001m产品分类33[0m 【b】返回 【任意键】退出').strip()            # 001加粗
            if option1 in menu_dict:
                print('{}清单如下:'.format(option1).rjust(25, '-'))
                for k in menu_dict[option1]:
                    print(k, menu_dict[option1][k])
    
                while True:
                    option2 = input('请选择 33[001m商品33[0m 加入购物车【b】返回 【q键】退出 ').strip()
                    if option2 in menu_dict[option1]:
                        option3_num = input('请输入购买数量').strip()
                        if option3_num.isdigit() and int(option3_num) <= menu_dict[option1][option2]['数量']:
                            num = int(option3_num)
                            price = menu_dict[option1][option2]['单价']
                            cost = num*price
                            balance = db_dict[username]['余额']
                            if cost<=balance:
                                db_dict[username]['余额'] -= cost
                                db_dict[username]['历史记录'].append(option2)                  # 添加字典value值数据???
                                save_into_file(db_dict)
                                menu_dict[option1][option2]['数量'] -= num
                                save_into_file(menu_dict, "menu.json")
                                print("商品已购,您的最新余额为33[34m%d33[0m" % (db_dict[username]['余额']))
                                break
                            else:
                                print('账户余额不足,请充值')
                                core_menu(username)
                        else:
                            print("抱歉,商品数目不足")
                            continue
                    elif option2 == 'b':
                        break
                    elif option2 == 'q':
                        sys.exit()
                    else:
                        print('错误信息,请重新选择')
                        continue
    
            elif option1 == 'b':
                core_menu(username)
            else:
                sys.exit()
    
    
    def topup(username):
        # 充值
        db_dict = load_from_file()
    
        top_up = input('请填写充值金额')
        if top_up.isdigit():
            db_dict[username]["余额"] += int(top_up)
            save_into_file(db_dict)
            show_user_balance(username)
        else:
            print('错误信息,请重新选择')
            core_menu(username)
    
    
    def show_user_balance(username):
        # 显示用户余额
        db_dict = load_from_file()
        print('{},您的当前余额为33[34m{}33[0m'.format(username,
                                                    db_dict[username]['余额']))
        show_shopping_log(username)
    
    
    def show_shopping_log(username):
        # 显示用户所有历史的消费记录
        db_dict = load_from_file()
        shopping_log = db_dict[username]['历史记录']
        if shopping_log == '':
            print("您在本小店没有消费记录")
            core_menu(username)
        else:
            print('历史消费如下:',shopping_log)
    
    
        choice = input('【b键】返回主菜单 【q键】退出')
        if choice == 'q':
            sys.exit()
        else:
            core_menu(username)
    
    
    if __name__ == '__main__':
        openline()
    View Code
  • 相关阅读:
    memset使用技巧
    AcWing 843. n-皇后问题
    【Oracle】从12c开始支持的Oralce新分页方案
    Oracle历年版本发布情况
    【SpringBoot】又写了一份新瓶装旧酒的CRUD程序
    【SpringBoot/Actuator】给SpringBoot程序添加Actuator监控管理
    Top Cybersecurity Companies for 2021
    SNAT、DNAT、MASQUERADE的区别
    Flannel的两种模式解析(VXLAN、host-gw)
    kubelet 配置资源预留的姿势
  • 原文地址:https://www.cnblogs.com/lg100lg100/p/7123722.html
Copyright © 2020-2023  润新知