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:强烈推荐,在函数体之前,编写函数的文档字符 ...
随机推荐
- Flutter tab切换保持页面状态的两种方法
当通过底部tabBar将页面在"首页"和"分类"之间进行切换的时候,每一次进入页面的时候该页面的数据都会重新加载.那么如何让页面保持原来的状态,而不是每次都要重 ...
- Jmeter:随机类函数
一.__Random 功能介绍:计算范围内的随机数 ${__Random(参数 1,参数 2,参数 3)} 参数 1:开始数字,包括在内 参数 2:结束数字,包括在内 参数 3:注册变量名称 二._ ...
- 001. html篇之《基础内容》
html基础内容 1. 什么是html Hypertext Markup Language 超文本标记语言 2. 基本结构 <!DOCTYPE html> <!-- 此为html5的 ...
- java异常信息打印
如果你不仅想在日志中查看异常信息,也想把异常信息保存起来作为数据查看,那么你可以这样做 public void printException(Exception e) { ByteArrayOutpu ...
- [转]C#中的自定义事件和EventHandler的使用
自定义事件: 这里主要模拟刷银行卡,手机提示刷卡信息的过程. 声明一个委托类型 public delegate void DelMethod(string bankName,decimal d ...
- php框架之odp-环境部署安装
一.安装配置 1.安装很简单,创建安装目录,然后在linux上使用wget命令从获取地址下载,然后解压,最后在安装目录下执行bin/odp_install即可. 例如:(只是举例,请安装最新的版本) ...
- uniapp全局黑白
page{filter: grayscale(100%); } .uni-tabbar__item{filter: grayscale(100%); }
- mi
小米耳机页面 <style> * { margin: 0; padding: 0; } body { width: 1226px; background-color: #f5f5f5; m ...
- 微信小程序级联选择器省市区选择器部分安卓手机兼容的问题:无法只选省份,必须选择到市
代码片段: 1 <view class="item"> 2 <view class="i-name"><text class=&q ...
- 接口设置ip跨域
// 允许跨域请求的地址'allowUrls' => [ 'http://localhost:8080', 'http://192.168.2.224', 'http://192.168.2.2 ...