Python自学之路:购物车程序

作业要求:
1、启动程序后,输入用户名密码登录
2、显示用户余额
3、打印商品列表
4、允许用户根据编号购买商品(卧槽,没有看到,下次更新)
5、用户选择商品后,检测余额是否足够
6、扣除,不够就提醒余额不足
7、扣除,够就扣款,更新余额信息

Python Code

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time    : 2017/8/7 9:45
# @Author  : Shope
# @QQ       :215522879
# @My Blog : http://blog.sina.com.cn/u/2047118510
# @File    : shoping.py
# @Software: PyCharm

# user=list()
# fruit={}
# k=1
# v=1
# i=0
# flag=True
# count=0
# choice,list1=[],[]
# sum1,sum2,sum3=0,0,0
# m,l1=0,0
# with open('message.txt','r') as f:
#     # frist=f.readline()
#     # print(frist[1][0:])
#     for line in f:
#         # frist=f.readline()
#         # print(frist)
#         user.append(line.strip().split())
# print(user)

def fruit_def():
    k = 1
    v = 1
    global fruit
    fruit={}
    # 输出所有商品信息:
    with open('shop.txt', 'r') as f:
        for line in f:
            k, v = line.strip().split()
            fruit[k] = v
    #print(fruit)
     print("商品信息:")
    for k1 in fruit:
        print("%s:%s¥" % (k1, fruit[k1]))

#print(fruit['BitterOrange'])
def choice_def():
    choice, list1 = [], []
    sum1, sum2, sum3 = 0, 0, 0
    m, l1 = 0, 0
    # 购买选择
    while True:
        goods = raw_input("请输入选择商品(N/n退出):")
        if goods == 'n' or goods == 'N':
            # print("欢迎下次使用!")
            break
        else:
            for k1 in fruit:
                if goods == k1:
                    break
            else:
                print("商品不存在!请重新选择")
                continue
        amount = input("请输入购买商品数量:")
        # 判断购物车是否为空,为空的话将购买商品加入购物车
        if len(choice) == 0:
            list1 = [goods, int(fruit[goods]), amount, amount * int(fruit[goods])]
        else:
            # 检测如果商品存在,输入的参数替换之前的参数
            for m in range(len(choice)):
                print(choice[m][0])
                if goods == choice[m][0]:
                    #print(222)#调试使用,看是否循环到这里
                    #print m
                    choice[m][0:] = [goods, int(fruit[goods]), amount, amount * int(fruit[goods])]
                    # 否则的就将新的商品录入list1列表
                else:
                    list1 = [goods, int(fruit[goods]), amount, amount * int(fruit[goods])]
        # 判断商品是否存在,存在就跳过,不存在就添加到购物车
        for m1 in range(len(choice)):
            if goods == choice[m1][0]:
                break
        else:
            choice.append(list1)
        print("已选商品信息:%s,价格:%s,数量:%s,总价:%s" % (goods, int(fruit[goods]), amount, amount * int(fruit[goods])))
    print("你已选择%s种商品" % len(choice))

    # 结算
    if len(choice) > 0:
        print("[商品,单价,数量,总价]")
        for l in choice:
            print(l)
            sum1 = sum1 + l[2]
            sum2 = sum2 + l[2] * l[1]
        print("总量:%s,总价:%s" % (sum1, sum2))
        sum3 = int(bal) - sum2
       # print(sum3)
        exit1 = raw_input("输入Y\y确认交易,输入其他取消交易:")
        if exit1 == 'y' or exit1 == 'Y':
            if sum3 > 0:
                print("你要有可用余额%s" % sum3)
                # 更新用户余额信息
                with open("message.txt", "r+") as f:
                    line1 = f.readlines()
                # 将原来的文件读取出来,写入line1里面
                with open("message.txt", "w+") as f:
                    # 将line1里面的每一行分别赋值给line,for循环
                    for line in line1:
                        if line.find(user) >= 0:
                            # 如果循环到当前用户,执行余额替换,更改余额信息
                            s = line.replace(str(bal), str(sum3))
                            f.writelines(s)
                            continue
                            # continue跳出循环,继续将其余的line写入message.txt文件
                        f.writelines(line)

            else:
                print("金额不足!!!!!!")

    else:
        print("欢迎下次使用!")

#login用户登录:
def main():
    global user
    user = list()
    i = 0
    flag = True
    global bal
    bal=0
    with open('message.txt', 'r') as f:
        while flag == True and i < 3:
            name = raw_input("请输入用户:")
            psd = raw_input("请输入密码:")
            for line in f:
                user, passwd, bal = line.strip().split()
                #bal1=int(bal)
                if name == user and psd == passwd:
                    print("欢迎使用某某某超市系统!!")
                    print("%s账户余额%s¥\n" % (user, bal))
                    flag = False
                    fruit_def()
                    choice_def()
                    break
            if flag == True:
                i += 1
                print("重新输入用户!")
            else:
                break
        if i < 1:
            pass
        else:
            print("失败次数过多,请下次再来!")

if __name__ == '__main__':
    main()

message.txt文件用来记录用户信息

用户、密码、余额

shope 123456 287
alex  654321 6451
eric  111111 10571
S 1 9907

执行情况:

C:\Python27\python.exe F:/python/oldboy12/day2/shoping_homewk.py
请输入用户:shope
请输入密码:123456
欢迎使用某某某超市系统!!
shope账户余额827¥

 商品信息:
BitterOrange:22¥
Gooseberry:6¥
Cranberry:33¥
Avocado:7¥
Walnut:15¥
Papaya(Pawpaw):37¥
Melon:19¥
Loquat:41¥
Tangor:13¥
Sapodilla:43¥
Orange:5¥
Lemon:38¥
Pear:24¥
Blueberry:23¥
Chestnut:27¥
Cumquat:21¥
Honey-dew:14¥
Sugarcane:11¥
FlatPeach:40¥
Rambutan:17¥
CustardApple:8¥
LotusNut:28¥
Peanut:18¥
Olive:12¥
Raspberry:10¥
A:5¥
C:7¥
B:6¥
E:9¥
D:8¥
Foxnut:20¥
Plum:25¥
Water-chestnut:32¥
Strawberry:4¥
Mango:34¥
Blackberry:16¥
Pineapple:3¥
Betelnut:2¥
Apple:1¥
WildPeach:35¥
Bilberry:39¥
WaterCaltrop:29¥
Sorosis:44¥
KiwiFruit:36¥
Grape:42¥
Lichee:26¥
Guava:9¥
Durian:30¥
Longan:31¥
请输入选择商品(N/n退出):A
请输入购买商品数量:100
已选商品信息:A,价格:5,数量:100,总价:500
请输入选择商品(N/n退出):B
请输入购买商品数量:20
已选商品信息:B,价格:6,数量:20,总价:120
请输入选择商品(N/n退出):C
请输入购买商品数量:30
已选商品信息:C,价格:7,数量:30,总价:210
请输入选择商品(N/n退出):D
请输入购买商品数量:20
已选商品信息:D,价格:8,数量:20,总价:160
请输入选择商品(N/n退出):A
请输入购买商品数量:10
已选商品信息:A,价格:5,数量:10,总价:50
请输入选择商品(N/n退出):N
你已选择4种商品
[商品,单价,数量,总价]
['A', 5, 10, 50]
['B', 6, 20, 120]
['C', 7, 30, 210]
['D', 8, 20, 160]
总量:80,总价:540
287
输入Y\y确认交易,输入其他取消交易:Y
你要有可用余额287
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容

  • 需求 额度 15000或自定义 实现购物商城,买东西加入 购物车,调用信用卡接口结账 可以提现,手续费5% 支持多...
    houyizhong阅读 2,014评论 3 2
  • 《非银行支付机构网络支付业务管理办法》条款释义 - 中国支付网 - 中国支付行业第一门户网站2016年7月1日...
    菜菜苔阅读 7,447评论 1 44
  • CREATE TABLE IF NOT EXISTS ecs_order_info (order_id mediu...
    cookie口阅读 15,630评论 0 16
  • 内心和独处,绽放就好;走出去,就不孤单,要陪伴,像收拢的花苞,含颌称是,旁侧的温度,奉之意义。
    M_152阅读 171评论 0 0
  • 1. production环境中去除console信息 去除原因: 发布到生产环境可能会有console函数忘...
    莫莫莫I阅读 225评论 0 0