首页 > 编程语言 > 详细

python 学习分享-购物车实操篇

时间:2017-02-18 16:44:57      阅读:307      评论:0      收藏:0      [点我收藏+]

程序要求如下:

‘‘‘购物车程序:
启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表
允许用户根据商品编号购买商品
用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
可随时退出,退出时,打印已购买商品和余额
在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示
用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买
允许查询之前的消费记录
‘‘‘

做题的整体思路如下,主要是封装了两个函数,然后调用函数,写到主程序中,写完了所有的代码

‘‘‘考虑到程序需要读取用户名、密码、salary、已购物品、物品列表‘‘‘
‘‘‘创建了三个文件,一个文件存放用户名、密码、salary,为了判断用户是不是第一次登陆,所以在文件中直接写入salary =‘n‘,第二个文本存放物品清单,第三个文件存放用户名、对应的已购物品、及消费时间‘‘‘
‘‘‘创建第一个认证函数,认证用户名、密码,并在成功后,打开第三个文件(已购物品文件),写入到dict中,返回用户字典、已购物品字典、用户名。这里不能用salary是否为n来判断已购文件是否不存在该用户的购物记录。如果用户第一次登陆后输入了salary,但是未购买任何物品,已购清单仍然为空‘‘‘
‘‘‘创建第二个物品列表函数,将物品文件中的内容拿出来,组成一个列表‘‘‘
‘‘‘编写主程序,验证salary是否为n,消费、查询、退出,最后将内容写回文件中,完成‘‘‘

总结

本程序对我这个水平的人来说还是很有难度的,经历了多次改写,更换解题思路,然后又因为对字典、列表、int、str不熟悉,导致写完的程序,各种错误,测试改错又用了很长时间,差不多10多个小时,才完成了这个程序。多练还是有好处的! 

代码部分

‘‘‘购物车程序:
启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表
允许用户根据商品编号购买商品
用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
可随时退出,退出时,打印已购买商品和余额
在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示
用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买
允许查询之前的消费记录
‘‘‘
import time
def user_get():
    user_o = open(user.txt,r)
    user_p_m = {}
    for line in user_o.readlines():
        if not line:
            continue
        line_u = line.strip().split()[0]
        user_p_m[line_u] = {}
        user_p_m[line_u][password]=line.strip().split()[1]
        user_p_m[line_u][money]=line.strip().split()[2]
    user_o.close()
    count = 0
    while 1:
        username = input(input your username:)
        password = input(input your password:)
        if count < 3:
            if user_p_m.get(username) and user_p_m[username][password]==password:
                print(Welcome login!)
                break
            else:
                print(your username or password is wrong)
        else:
            print(you have try so many times,you will exit)
            exit()
        count+=1
    sav_goods_o = open(savegoods.txt, r)
    sav_d = {}
    for line_s in sav_goods_o.readlines():
        if not line_s:
            continue
        line_k = line_s.strip().split()[0]
        line_vg = line_s.strip().split()[1]
        line_vt = line_s.strip().split()[2]
        if not sav_d.get(line_k):
            sav_d[line_k] = []
        sav_d[line_k].append({line_vg: line_vt})
    sav_goods_o.close()
    return username,user_p_m,sav_d
def goods_get():
    goods_o = open(goods.txt, r)
    goods_d = []
    for line in goods_o.readlines():
        if not line:
            continue
        goods_g = line.strip().split()[0]
        goods_m = line.strip().split()[1]
        goods_d.append([goods_g, goods_m])
    goods_o.close()
    return goods_d

username,user_d_m,sav_d = user_get()
goods_d = goods_get()
goods_t = []
while 1:
    if user_d_m[username][money] == n:
        money = input(input your salary:)
        if money.isdigit():
            user_d_m[username][money] = int(money)
        else:
            print(\033[34;1m非法\033[0m字符,请重新输入!)
    else:
        user_d_m[username][money]=int(user_d_m[username][money])
        print(商品列表.center(30,*))
        for i in range(len(goods_d)):
            print(i, goods_d[i][0],   , goods_d[i][1] + )
        print(*.center(35,*))
        goods_num = input(\033[33;1m请输入您需要的商品编号\033[0m\n或者按\033[35;1mh\033[0m查看历史记录,按\033[36;1mq\033[0m键退出程序:)
        if goods_num.isdigit():
            if int(goods_num)  in range(len(goods_d)):
                if user_d_m[username][money]>=int(goods_d[int(goods_num)][1]):
                    time_now=time.strftime(%Y-%m-%d,time.localtime(time.time()))
                    user_d_m[username][money]-=int(goods_d[int(goods_num)][1])
                    if sav_d.get(username):
                        sav_d[username].append({goods_d[int(goods_num)][0]:time_now})
                    else:
                        sav_d[username]=[{goods_d[int(goods_num)][0]:time_now}]
                    goods_t.append(goods_d[int(goods_num)][0])
                    print(您购买了\033[32;1m%s\033[0m,花费\033[31;1m%s\033[0m元%(goods_d[int(goods_num)][0],goods_d[int(goods_num)][1]))
                else:
                    print(余额为\033[31;1m%s\033[0m,不足%(user_d_m[username][money]))
            else:
                print(您输入的编号\033[34;1m有误\033[0m,请重新输入!)
        else:
            if goods_num == h:
                if sav_d.get(username):
                    print(您的购买记录如下:\033[32;1m%s\033[0m %(sav_d[username]))
                else:
                    print(您还未购买任何物品)
            elif goods_num == q:
                if len(goods_t):
                    print(您的余额为\033[31;1m%s\033[0m,您本次购买了\033[32;1m%s\033[0m%(str(user_d_m[username][money]),goods_t))
                else:
                    print(您的余额为\033[31;1m%s\033[0m,您本次未购买任何商品 % (str(user_d_m[username][money])))
                break
            else:
                print(\033[34;1m非法\033[0m字符,请重新输入!)


user_w = open(user.txt,w)
for us_l in user_d_m:
    us_l_w = us_l + + user_d_m[us_l][password]+ +str(user_d_m[us_l][money]) + \n
    user_w.write(us_l_w)
user_w.close()
sav_goods_o = open(savegoods.txt, a)

for goods_save in range(len(goods_t)):
    sa_l_w = username +  + goods_t[goods_save] +  +time_now+ \n
    sav_goods_o.write(sa_l_w)
sav_goods_o.close()
exit()

 

python 学习分享-购物车实操篇

原文:http://www.cnblogs.com/laay/p/6413386.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!