python基础篇 12-函数+文件读写+json练习作业
需求:
写一个管理商品的程序,商品文件格式在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练习作业的更多相关文章
- python 基础篇 11 函数进阶----装饰器
11. 前⽅⾼能-装饰器初识本节主要内容:1. 函数名的运⽤, 第⼀类对象2. 闭包3. 装饰器初识 一:函数名的运用: 函数名是一个变量,但他是一个特殊变量,加上括号可以执行函数. ⼆. 闭包什么是 ...
- Python-Day3 Python基础进阶之集和/文件读写/函数
一.集和 集合是一个无序的,不重复的数据组合,它的主要作用如下: 去重,把一个列表变成集合,就自动去重了 关系测试,测试两组数据之前的交集.差集.并集等关系 1.创建集合 >>> s ...
- python 基础篇 自定义函数
多态 我们可以看到,Python 不用考虑输入的数据类型,而是将其交给具体的代码去判断执行,同样的一个函数(比如这边的相加函数 my_sum()),可以同时应用在整型.列表.字符串等等的操作中. 在编 ...
- python基础篇_003_函数
python中的函数 1.函数的目的 .避免代码冗余 .增强可读性 2.函数的定义与调用 # 定义函数 使用关键字def """ 1.定义函数: def 函数名(): 函 ...
- Python基础篇(初始函数)
Python初始函数: 一.什么是函数 1.我们到目前为止, 已经可以完成一些软件的基础功能了. 那么我们来完成这样一个功 能: 约x: print("拿出手机") print(& ...
- python 基础篇 匿名函数
匿名函数基础 首先,什么是匿名函数呢?以下是匿名函数的格式: lambda argument1, argument2,... argumentN : expression 我们可以看到,匿名函数的关键 ...
- python 基础篇 12 装饰器进阶
本节主要内容:1. 通⽤装饰器回顾2. 函数的有⽤信息3. 带参数的装饰器4. 多个装饰器同时装饰⼀个函数 ⼀. 通⽤装饰器的回顾开闭原则: 对增加功能开放. 对修改代码封闭装饰器的作⽤: 在不改变原 ...
- python 基础篇 10 函数进阶
本节主要内容:1. 函数参数--动态传参2. 名称空间, 局部名称空间, 全局名称空间, 作⽤域, 加载顺序.3. 函数的嵌套4. gloabal, nonlocal关键字 ⼀. 函数参数--动态传参 ...
- python 基础篇 09 函数初识
<<<<<<<<<<<<<<<------------------------------函 ...
- Python基础:12函数细节
一:返回值 当没有显式地返回元素时,Python 会返回一个None.如果函数返回多个对象,python 把他们聚集起来并以一个元组返回. 二:创建函数 1:强烈推荐,在函数体之前,编写函数的文档字符 ...
随机推荐
- nodeJs 写个爬虫小玩意
内容 起一个服务,爬某个网站的数据(我这里爬了个夕阳红游戏交易网站的数据),页面看到我要爬的内容 代码 1 //引入内置的http包 2 var http = require('http'); 3 c ...
- 性能测试-Jmeter无图型界面运行模式
1.Jmeter进入帮助中心 1.在机器内安装jmeter的安装bin目录内直接输入cmd,会打开dos命令行 2.再cmd里输入,jmeter --help可以查看参数说明 2.Jmeter参数说明 ...
- Android Studio Gradle 输出信息乱码
Android Studio Gradle 输出信息出现乱码 如下: > Task :app:compileDebugJavaWithJavacע: ijЩ�����ļ�ʹ�û����ѹ�ʱ�� ...
- [转]md Typora旧版免费安装包(多平台版本)
typora旧版免费安装包: 链接:https://pan.baidu.com/s/1pIqeO2nTJ9_s16IZj6z3sA?pwd=gut4 提取码:gut4 v1.0以上的版本都要收费了,我 ...
- ctfshow web入门 命令执行 web58-71
都是 POST传递参数 执行 eval() 函数 web58 if(isset($_POST['c'])){ $c= $_POST['c']; eval($c); }else{ highlight_f ...
- maven jar包新版本检测工具推荐
为什么需要 经常使用maven来构建项目的朋友,应该遇到过类似这样的情况:项目通过maven引入了很多jar包,随着时间推移,这些jar包都有了更优的新版本出来,想升级,但又觉得很繁琐.主要是因为两方 ...
- C#消息泵探索(一)
消息泵 消息泵,又叫消息循环. 消息循环使用一个图形化用户界面下Microsoft Windows.具有GUI的Windows 程序是由事件驱动的.Windows为每个创建窗口的线程维护一个单独的消 ...
- 2022年JMUCTF WP
2022年JMUCTF WP crypto 2,Are you ok Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. ...
- springboot 集成poi导出word(一)
使用ruoyi-前后端分离版本,根据word模板导出,包含表格和图片. 一.创建模板 列表使用{{}},文本使用[] 二.引入依赖 <!-- excel工具 --> <depende ...
- git的基本操作(一)
pwd: 显示当前所在的目录路径 ls: 列出当前目录的所有文件 touch: 新建一个文件 rm:删除一个文件 mkdir:新建一个目录 rm -r:删除一个目录 mv:移动一个文件到另一个文件中 ...