需求:

写一个管理商品的程序,商品文件格式在a.json里面
提供商品的增删改查功能
choice = input('请输入你的选择:1、查看商品 2、新增商品 3、修改商品 4、删除商品')
#1、查看商品,输入商品名称,print单个商品的信息,价格、数量,输入all,查看所有商品
#2、新增商品,输入商品名称、数量、价格,数量是大于0的整数,价格必须是大于0的数值,
#如果商品存在,无法添加
#3、修改商品,输入商品名称、数量、价格,商品存在才可以修改 数量是大于0的整数,价格必须是大于0的数值,
#4、输入商品名称,如果存在,删除

import json
def read_file(file_name):
with open(file_name,encoding='utf-8') as fr:
return json.load(fr) #返回是字典
def write_file(file_name,content:dict):
with open(file_name,'w',encoding='utf-8') as fw:
json.dump(content,fw,ensure_ascii=False,indent=4) #入参是字典 写入文件是json串 def valid_int(count):
if str(count).isdigit():
if int(count) > 0:
return True
def valid_price(price):
try:
price = float(price) #确保是小数
if price and not str(price).startswith('-'): # 去掉0.0 和负小数 保留正小数
return True
except Exception as e:
print(f"{price}必须是大于0的数") def valid_name(name,product_info:dict):
return True if name in product_info else False def get_product_detail(file_name):
name = input("请输入产品名称:").strip()
if name:
product_info = read_file(file_name)
if name == 'all':
print(product_info)
elif valid_name(name,product_info):
print(product_info.get(name))
else:
print(f"{name}产品不存在!")
else:
print(f"{name}不能为空!")
def add_product(file_name):
name = input("请输入产品名称:").strip()
count = input("请输入产品数量:")
price = input("请输入产品价格:")
if name and count and price:
product_info = read_file(file_name) if not valid_name(name,product_info):
if not valid_int(count):
print(f"{name}产品的数量{count}必须为大于正整数!")
elif not valid_price(price):
print(f"{name}产品的价格{price}必须为大于0的数!")
else:
add_info={name:{'count':count,'price':price}}
product_info.update(add_info)
write_file(file_name,product_info)
print(f"添加产品信息:{add_info}成功!")
else:
print(f"{name}产品已经存在!")
else:
print(f"{name} 、{count}、{price}都不能为空!")
def modify_product(file_name):
name = input("请输入产品名称:").strip()
count = input("请输入产品数量:")
price = input("请输入产品价格:")
if name and count and price:
product_info = read_file(file_name)
if valid_name(name,product_info):
if not valid_int(count):
print(f"{name}产品的数量{count}必须为大于正整数!")
elif not valid_price(price):
print(f"{name}产品的价格{price}必须为大于0的数!")
else:
update_info={name:{'count':count,'price':price}}
product_info.update(update_info)
write_file(file_name,product_info)
print(f"更新产品信息:{product_info}成功!")
else:
print(f"{name}产品不存在!")
else:
print(f"{name} 、{count}、{price}都不能为空!")
def delete_product(file_name):
name = input("请输入产品名称:").strip()
if name:
product_info = read_file(file_name)
if valid_name(name,product_info):
product_info.pop(name)
write_file(file_name,product_info)
print(f"删除产品{name}成功!")
else:
print(f"{name}不存在!")
else:
print(f"{name}不能为空!")

file_name = r'a.json'
choice = input('1、查看商品 2、新增 3、修改 4、删除')
func_map = {'1':get_product_detail,'2':add_product,'3':modify_product,'4':delete_product}
if choice in func_map:
func_map[choice](file_name=file_name)
else:
print("请输入正确的选项!")

python基础篇 12-函数+文件读写+json练习作业的更多相关文章

  1. python 基础篇 11 函数进阶----装饰器

    11. 前⽅⾼能-装饰器初识本节主要内容:1. 函数名的运⽤, 第⼀类对象2. 闭包3. 装饰器初识 一:函数名的运用: 函数名是一个变量,但他是一个特殊变量,加上括号可以执行函数. ⼆. 闭包什么是 ...

  2. Python-Day3 Python基础进阶之集和/文件读写/函数

    一.集和 集合是一个无序的,不重复的数据组合,它的主要作用如下: 去重,把一个列表变成集合,就自动去重了 关系测试,测试两组数据之前的交集.差集.并集等关系 1.创建集合 >>> s ...

  3. python 基础篇 自定义函数

    多态 我们可以看到,Python 不用考虑输入的数据类型,而是将其交给具体的代码去判断执行,同样的一个函数(比如这边的相加函数 my_sum()),可以同时应用在整型.列表.字符串等等的操作中. 在编 ...

  4. python基础篇_003_函数

    python中的函数 1.函数的目的 .避免代码冗余 .增强可读性 2.函数的定义与调用 # 定义函数 使用关键字def """ 1.定义函数: def 函数名(): 函 ...

  5. Python基础篇(初始函数)

    Python初始函数: 一.什么是函数 1.我们到目前为止, 已经可以完成一些软件的基础功能了. 那么我们来完成这样一个功 能: 约x: print("拿出手机") print(& ...

  6. python 基础篇 匿名函数

    匿名函数基础 首先,什么是匿名函数呢?以下是匿名函数的格式: lambda argument1, argument2,... argumentN : expression 我们可以看到,匿名函数的关键 ...

  7. python 基础篇 12 装饰器进阶

    本节主要内容:1. 通⽤装饰器回顾2. 函数的有⽤信息3. 带参数的装饰器4. 多个装饰器同时装饰⼀个函数 ⼀. 通⽤装饰器的回顾开闭原则: 对增加功能开放. 对修改代码封闭装饰器的作⽤: 在不改变原 ...

  8. python 基础篇 10 函数进阶

    本节主要内容:1. 函数参数--动态传参2. 名称空间, 局部名称空间, 全局名称空间, 作⽤域, 加载顺序.3. 函数的嵌套4. gloabal, nonlocal关键字 ⼀. 函数参数--动态传参 ...

  9. python 基础篇 09 函数初识

    <<<<<<<<<<<<<<<------------------------------函         ...

  10. Python基础:12函数细节

    一:返回值 当没有显式地返回元素时,Python 会返回一个None.如果函数返回多个对象,python 把他们聚集起来并以一个元组返回. 二:创建函数 1:强烈推荐,在函数体之前,编写函数的文档字符 ...

随机推荐

  1. 【转载】rename。给文件批量改名的python脚本

    https://www.bilibili.com/read/cv16146757 确认py版本:2.7, 3.6? 1 import os, sys, re, math, openpyxl, csv ...

  2. parted创建硬盘分区并创建LVM

    基本分区创建分区只有那么大,无法调整大小,写入数据占满时便无法继续,而LVM特点就是可随意扩张大小,避免磁盘占满导致数据丢失. 查看磁盘lsblk 对磁盘进行分区  [root@localhost ~ ...

  3. pytest 之conftest.py是什么

    conftest.py是pytest框架的固定写法:可以把hook和fixture写在这个文件里,就会自动去调用:conftest.py相当于可以编写自己的插件: 也可以理解为pytest特有的本地测 ...

  4. 搭建ubuntu开发环境

    tar -xzvf  VMwareTools-10.0.6-3595377.tar.gz cd  vmware-tools-distrib 再执行:sudo ./vmware-install.pl  ...

  5. CPU 相关知识

    参考:https://blog.csdn.net/andy572633/article/details/46834155 lscpu 查看到部分CPU不在线 CPU(s) 4 On-line CPU( ...

  6. 认识JavaWeb

    JavaWeb Java Web 1.基本概念 1.1.前言 web开发: web,网页的意思 , www.baidu.com 静态web html,css 提供给所有人看的数据始终不会发生变化! 动 ...

  7. java创建对象时内存发生了什么

    Student s = new Student();\ 把Student.class文件加载到内存 在栈内存给s变量开辟一个空间 在堆内存为学生对象申请一个空间 给成员变量进行默认初始化 给成员变量显 ...

  8. WebSocket服务

    package com.sxsoft.admin.Component; import com.alibaba.fastjson.JSON; import io.netty.handler.codec. ...

  9. CDO学习2 CDO 入门教程Tutorial

    #20210117#注:如果需要用cdo对数据进行截取,可参考buguse的几篇博文: 如何利用CDO从数据集中提取数据 CDO条件性选择数据 - 云+社区 - 腾讯云 CDO转换数据集格式 - 云+ ...

  10. yestoday once more

    夏日的光为百叶窗所驯服,褪去了令人刺痛的热烈.yestoday once more~ 耳机里传来那熟悉的旋律,恍惚间仿佛回到了十五年前的那个午后,老式收音机里放着同样的歌曲,对面办公桌旁某个少年正惶恐 ...