需求:

写一个管理商品的程序,商品文件格式在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. nodeJs 写个爬虫小玩意

    内容 起一个服务,爬某个网站的数据(我这里爬了个夕阳红游戏交易网站的数据),页面看到我要爬的内容 代码 1 //引入内置的http包 2 var http = require('http'); 3 c ...

  2. 性能测试-Jmeter无图型界面运行模式

    1.Jmeter进入帮助中心 1.在机器内安装jmeter的安装bin目录内直接输入cmd,会打开dos命令行 2.再cmd里输入,jmeter --help可以查看参数说明 2.Jmeter参数说明 ...

  3. Android Studio Gradle 输出信息乱码

    Android Studio Gradle 输出信息出现乱码 如下: > Task :app:compileDebugJavaWithJavacע: ijЩ�����ļ�ʹ�û����ѹ�ʱ�� ...

  4. [转]md Typora旧版免费安装包(多平台版本)

    typora旧版免费安装包: 链接:https://pan.baidu.com/s/1pIqeO2nTJ9_s16IZj6z3sA?pwd=gut4 提取码:gut4 v1.0以上的版本都要收费了,我 ...

  5. ctfshow web入门 命令执行 web58-71

    都是 POST传递参数 执行 eval() 函数 web58 if(isset($_POST['c'])){ $c= $_POST['c']; eval($c); }else{ highlight_f ...

  6. maven jar包新版本检测工具推荐

    为什么需要 经常使用maven来构建项目的朋友,应该遇到过类似这样的情况:项目通过maven引入了很多jar包,随着时间推移,这些jar包都有了更优的新版本出来,想升级,但又觉得很繁琐.主要是因为两方 ...

  7. C#消息泵探索(一)

    ​消息泵 消息泵,又叫消息循环. 消息循环使用一个图形化用户界面下Microsoft Windows.具有GUI的Windows 程序是由事件驱动的.Windows为每个创建窗口的线程维护一个单独的消 ...

  8. 2022年JMUCTF WP

    2022年JMUCTF WP crypto 2,Are you ok Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. ...

  9. springboot 集成poi导出word(一)

    使用ruoyi-前后端分离版本,根据word模板导出,包含表格和图片. 一.创建模板 列表使用{{}},文本使用[] 二.引入依赖 <!-- excel工具 --> <depende ...

  10. git的基本操作(一)

    pwd: 显示当前所在的目录路径 ls: 列出当前目录的所有文件 touch: 新建一个文件 rm:删除一个文件 mkdir:新建一个目录 rm -r:删除一个目录 mv:移动一个文件到另一个文件中 ...