python3 - 商品管理的程序,商品信息都存在一個json串裏面

商品管理的程序,商品信息都存在一個json串裏面
一、查詢商品信息 #校驗商品是否存在
二、新增商品 # #校驗商品是否存在 #校驗價格是否合法
三、修改商品信息 ##校驗商品是否存在
if chice =="1":
query_goods()
elif choice = ="2":
add_goods()git

goods.json:json

{
"iphonex":{
"num":100,
"price":1999.98,
"color":"red"
},
"car":{
"num":100,
"price":9999999,
"color":"black"
}
}iphone

import json
FILE_NAME="goods.json"
def check_goods(name,newGood=None):
    with open(FILE_NAME, "r+", encoding="utf-8") as f:
        goods_dic = json.load(f)
    if newGood:
        goods_dic[name]=newGood.get(name) #don't use setdefault function, because cann't update the origibal valye
       
print(goods_dic)
        with open(FILE_NAME,"w+",encoding="utf-8") as fw:
            json.dump(goods_dic,fw,ensure_ascii=False,indent=4)
    else:
        #with open(FILE_NAME,"r+",encoding="utf-8") as f:
            #goods_dic=json.load(f)
       
if goods_dic.get(name):
            print(name + " 存在!")
            return goods_dic
        else:
            print(name +" 不存在!")
            return False

def check_price(price):
    if price.count(".")==0 and price.isdigit() and int(price)>=0:
        print("price is correct int!")
        return True
    elif price.count(".")==1:
        list=price.split(".")
        left = list[0]
        right=list[1]
        if left.isdigit() and right.isdigit():
            print("price is correct float!")
            return True
    else:
        print("price is illegal!")
        return False

choice = input("please input your choice:"
               " 1. check goods info."
               " 2. add goods info"
               " 3. edit goods info")
if choice =='1':
    goods_name = input("please input the goods name:").strip()
    good_dis=check_goods(goods_name)
    if good_dis:
        print(good_dis.get(goods_name))
elif choice=='2':
    name_add=input("please input the goods name you want to add:").strip()
    if check_goods(name_add):
        print("this goods name exist!")
    else:
        good_add_dic={}
        num = int(input("please input the number:"))
        color=input("please input the color:")
        price = input("please input the price:").strip()
        if check_price(price):
            info_add = {"num": num, "price": price, "color:": color}
            good_add_dic.setdefault(name_add,info_add)
            print("成功添加商品!商品信息爲:"+str(good_add_dic))
            check_goods(name_add,good_add_dic)
        else:
            print("價格輸入不正確!")
elif choice =="3":
    name_edit=input("please input the goods name you want to edit:")
    if check_goods(name_edit):
        goods_edit_dic=check_goods(name_edit) # get the goods dic
       
good_info=goods_edit_dic.get(name_edit) # get the edited good info
       
changeInfo=input("please choose the info you want to change:"
                         "1. num"
                         "2. color"
                         "3. price").strip()
        if changeInfo =='1':
            num1 = int(input("please input the number:"))
            good_info["num"]=num1
        if changeInfo =='2':
            color1 = input("please input the color:")
            good_info["color"]=color1
        if changeInfo =='3':
            price1 = input("please input the price:")
            if check_price(price1):
                good_info["price"]=price1
        goods_edit_dic[name_edit]=good_info # update the edited good info into the dic
       
print(str(goods_edit_dic))
        check_goods(name_edit,goods_edit_dic)
    else:
        print("該商品不存在,沒法編輯修改")
else:
    print("輸入不正確")
函數

運行結果:this

 

總結:spa

1. 首先定義兩個函數,一個用於檢查商品是否存在,一個用於驗證價格是否有效調試

2. 在函數check_goods中,如果須要添加或更新商品時,在更新字典時,須要使用鍵值對更新的方式,不能用setdefault函數,由於 setdefault在key存在時,不會更新value。若是字典中包含有給定鍵,則返回該鍵對應的值,不然返回爲該鍵設置的值。在調試中最開始用的 setdefault方法,最後發現沒有更新到新的值。blog

goods_dic[name]=newGood.get(name) #don't use setdefault function, because cann't update the origibal valye
ip

 3. 在函數check_goods中,查詢時如有該商品時,返回該商品的信息,即返 goods_dic.get(name),這樣在查詢時能夠直接輸出該商品信息,但後面在調試中,發如今新增或更新商品時,也須要返回全部商品信息的字典,因此後來改成返回整個商品的字典,這樣能夠方便這個函數最大化的使用。utf-8

if goods_dic.get(name):
    print(name + " 存在!")
    return goods_dic

4. 在check_price函數中,最開始想使用type() 方法判斷輸入的類型 int,float,str來判斷是否輸入有效,在單獨的函數調用時,能夠輸入int,float,可使用該函數,可是後期調用是要經過鍵盤輸入的方式取得參數值price,而該值類型爲str, 因此在調用函數時老是顯示price is illegal.  因此調試後從新修改該函數。 在編寫時須要注意參數傳遞的方式。

相關文章
相關標籤/搜索