3-2 优化购物车

Posted 不要被骄傲遮蔽了双眼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3-2 优化购物车相关的知识,希望对你有一定的参考价值。

 

 1.需求

1.商品信息存在文件里面
2.已购商品,余额记录,薪水,全部存在文件里面
3.记录上次购物信息,下次不用输入薪水了
4.用户,商家 两个python文件就行

 

2.个人思路

 

 商家入口

商品列表存到文件中,如何存?以什么形式存?

如何读取出来?

修改商品价格

覆盖原来的文件

  

用户接口

已购商品列表放入文件 shopping_cart,

薪水放入文件 salary,

if  薪水文件有数据 
        
        打印文件中的商品列表

else  输入新的薪水


if  salary.isdigit():
        
        执行下一步


        选择的商品追加到shopping_cart

        最后的salary 放到 文件中

  

 3. 个人完整代码

 

商家入口

 商品信息存入还是二维列表,

import json
while True:
    with open("goods.txt","r") as g:
        data = json.load(g)
        for index,item in enumerate(data):
            print(index,item)

        choice = input(">> which goods price  to change :")
        if choice.isdigit():

            if -1 < int(choice) < len(data):
                print(data[int(choice)])
                change_price = input("change it to >")
                data[int(choice)][1] = int(change_price)
                print(\'----change_after---\\n\',data[int(choice)],\'\\n\')
                with open("goods.txt","w") as g:
                    g.write(json.dumps(data))

        elif choice == \'q\':exit()
        else:print("error you enter")

 

goods.txt文件信息!  二维列表存入,读写都是二维列表格式的

 

运行结果

 

用户入口

# coding=utf-8
import json
shopping_cart = []
with open("salary") as f ,open("shopping_cart") as s_c:
# f = open("salary",\'r\')
    user_salary = f.readline()
    shopping_cart_buy = s_c.readlines()
    # print(user_salary)
    # print(shopping_cart_buy)
if user_salary:
    print("\\033[1m你还有¥%s人民币\\033[0m"%user_salary)
    if shopping_cart_buy:
        print("---you had buy --\\n",shopping_cart_buy)
else:
    user_salary = input("your salary is :").strip()

if user_salary.isdigit():
    salary = int(user_salary)
    while True:
        print(\'-----the list ----\')
        with open(\'goods.txt\',\'r\') as g:
            data = json.load(g)
            for index,item in enumerate(data):
                print(index,item)

        choice1 = input(">>>enter your choice :" )
        if choice1.isdigit():
            choice = int(choice1)
            if choice < len(data) and choice >= 0:
                print(\'>>>your choice good is \',data[choice])
                price = data[choice][1]
                if price <= salary:
                    salary -= price
                    shopping_cart.append(data[choice])
                else:
                    print("\\033[1m余额不足,your salary is %s\\033[0m"%salary)
            else: print("\\033[1menter error!!!\\033[0m")
        elif choice1 == \'q\':
            break
        else: print("\\033[1menter error!!!\\033[0m")

    print(\'-----the shopping_cart ----\')
    with open(\'shopping_cart\',\'a+\') as s_c:
        for i in shopping_cart:
            print(i)
            s_c.write(json.dumps(i))
    print(\'---------------------------\\n your salary:\',salary)
    with open(\'salary\',\'w\') as s:
        s.write(json.dumps(salary))
else: print("\\033[1menter error!!!\\033[0m")

 

薪水文件

 

购物车文件

 

商品文件

 

 

运行结果

 

 

4.个人心得

4.1 文件指针问题

文件读取f.readlines(),全部读完的时候,文件指针会到文件末尾,此时如果继续读文件的话,读的数据为0

    for line in goods.readlines():  #按行读取,把文件写到list列表中

        print(line)

        list.append(line.strip().split(\',\'))

  

4.2文件数据读出

如何将数据读入list,或者字典中,然后对其进行操作

list = []

with open(\'goods1.txt\',\'r+\',encoding="utf-8") as goods:

    for line in goods.readlines():  #按行读取,把文件写到list列表中
        list.append(line.strip().split(\',\'))

    for index,item in enumerate(list):
        print(index,item)

    choice = input(">> which goods price  to change :")

 

最后如何把list 按照原来文件的格式保存覆盖到文件中去??  

 

比如,list 最后是一个二维列表

[["apple", 4888],["cake", 55]]

  

 

4.3 json pickle 

序列化和反序列化

	• json,用于字符串 和 python数据类型间进行转换
• pickle,用于python特有的类型 和 python的数据类型间进行转换

  

可以保证文件数据读入写入都是数据的本身格式,二维list,dict,str

数据如何存入文件?不影响其本身的类型,str,list,dict

 

反序列化  json.load(f)

 将文件数据读出来

import json
while True:
    with open("goods.txt","r") as g:

        data = json.load(g)   #文件数据导入,数据的类型不变

        for index,item in enumerate(data):
            print(index,item)

 

运行结果

 

 

序列化

最后data 二维列表的数据存入文件中

 with open("goods.txt","w") as g:
                    g.write(json.dumps(data))

  

将购物车信息,薪水信息,追加到文件中

   with open(\'shopping_cart\',\'a+\') as s_c:
        for i in shopping_cart:
            s_c.write(json.dumps(i))

    with open(\'salary\',\'w\') as s:
        s.write(json.dumps(salary))

  

4.4 错误演示

 程序1

文件 二维列表

 

import json
with open("goods.txt","r") as g:
    data = json.load(g)
    for index,item in enumerate(data):
        print(index,item)

  

 程序2

文件  只是单独的列表放进去,不是二维列表

 

import json
with open("shopping_cart",\'r\') as s_c:
    
    data = json.load(s_c)

    for index,item in enumerate(data):
        print(index,item)

  

 

 

 4.5 数据格式 文件

文件读入和读取,数据的格式是否变化,是否影响文件的改变,还是存在很大的不解!

 

 




以上是关于3-2 优化购物车的主要内容,如果未能解决你的问题,请参考以下文章

使用 C++ 反转句子中的每个单词需要对我的代码片段进行代码优化

如何优化C ++代码的以下片段 - 卷中的零交叉

在一个无序整数数组中,找出连续增长片段最长的一段, 增长步长是1。Example: [3,2,4,5,6,1,9], 最长的是[4,5,6]

从JVM的角度看JAVA代码--代码优化

三级菜单购物车程序(自写,待优化)

如何从 recyclerview 片段传递到另一个 recyclerview 片段