脱产班第一次大作业-购物商城

完成一个商城购物车的程序。

商品信息在文件存储的,存储形式:

name  price
电脑  1999
鼠标  10
游艇  20
美女  998
.......

要求:

  • 用户先给自己的账户充钱:比如先充3000元。
  • 读取商品信息文件将文件中的数据转化成下面的格式:
goods = [{"name": "电脑", "price": 1999},
         {"name": "鼠标", "price": 10},
         {"name": "游艇", "price": 20},
         {"name": "美女", "price": 998}, ...]
  • 页面显示 序号 + 商品名称 + 商品价格,如:
1 电脑 1999 
2 鼠标 10
…
n 购物车结算
q或者Q退出程序。
  • 用户输入选择的商品序号,然后打印商品名称及商品价格,并将此商品,添加到购物车,用户还可继续添加商品。
  • 如果用户输入的商品序号有误,则提示输入有误,并重新输入。
  • 用户输入n为购物车结算,依次显示用户购物车里面的商品,数量及单价,若充值的钱数不足,则让用户删除某商品,直至可以购买,若充值的钱数充足,则可以直接购买。
  • 用户输入Q或者q退出程序。
  • 退出程序之后,依次显示用户购买的商品,数量,单价,以及此次共消费多少钱,账户余额多少,并将购买信息写入文件。

得分详情

  1. 完成1-3要求为C。
  2. 完成1-4要求为 C+。
  3. 完成1-6要求为B。
  4. 完成全部要求并且没有BUG为A 或者A +。

low obj

#!/usr/bin/env python
# encoding: utf-8
# Author: MeiMeiLong <[email protected]>
# Create Date: 2019-03-08 15:03:44
# Last Modified: 2019-03-08 20:18:38
# Description: 脱产班第一次大作业(文件操作结束)

ShopMenu = 'List.txt'
#读取商品信息文件将文件中的数据转化成下面的格式
ShopMoney = 0
goods = list()
items_dic = dict()
with open(ShopMenu,encoding='utf-8',mode='r') as f:
    menu = f.readline()
    name,price = menu.split()
    for line in f:
        dic = dict()
        dic[name] = dic.get(name,line.split()[0])
        dic[price] = dic.get(price,line.split()[1])
        goods.append(dic)
        items_dic[line.split()[0]] = items_dic.get(line.split()[0],line.split()[1])

ShopCar = dict.fromkeys(items_dic,0)
while 1:
    PocketMoney = input('充点钱吧,大哥:').strip()
    if PocketMoney.isdigit():
        PocketMoney = int(PocketMoney)
        break
    else:
        print('大哥你有钱么d_d.')
        continue

while 1:
    #页面显示 序号 + 商品名称 + 商品价格:
    for num,menu in enumerate(goods):
        print(num+1,menu[name],menu[price])
    else:
        print('n 购物车结算\nq或者Q退出程序。')
    #用户输入选择的商品序号,然后打印商品名称及商品价格,并将此商品,添加到购物车,用户还可继续添加商品。
    select = input('买哪个商品? > ').strip()
    if select.isdigit():
        select = int(select)
        if select in range(1,len(goods)+1):
            print('购物车加入了一个%s' % goods[select-1][name])
            ShopCar[goods[select-1][name]]+=1
        else:
            print('输入有误.')
    #用户输入n为购物车结算,依次显示用户购物车里面的商品,数量及单价,若充值的钱数不足,则让用户删除某商品,直至可以购买,若充值的钱数充足,则可以直接购买。
    elif select.upper() == 'N':
        print('Shop Car'.center(40,'-'))
        for item in ShopCar:
            if items_dic[item] != 0:
                print('商品名称:%s 商品数量:%s 商品价格:%s' % (item,ShopCar[item],items_dic[item]))
            ShopMoney +=ShopCar[item] * int(items_dic[item])
        else:
            print('当前你口袋里的钱:%s,购物车的钱钱:%s' % (PocketMoney,ShopMoney))
            if ShopMoney <= PocketMoney:
                print('有钱人啊,直接清空购物车了。')
                print('\n你此次购物情况:')
                for item in ShopCar:
                    if ShopCar[item] != 0:
                        print('买了%s个%s,一个%s元' % (ShopCar[item],item,items_dic[item]))
                else:
                    print('此次消费:%s元,还剩%s元' % (ShopMoney,PocketMoney-ShopMoney))
                break
            else:
                #print(items_dic)#输出商品名称和价格的关系 {'电脑': '1999', '鼠标': '10', '游艇': '20', '美女': '998'}
                print('你木有钱钱啊。\n买不起还选!看看哪个不要了吧:')
                exit_flag = False
                while not exit_flag:
                #while ShopMoney > PocketMoney:
                    for num,menu in enumerate(goods):
                        print('序号:%s,名称:%s,价格:%s,数量:%s' % (num+1,menu[name],menu[price],ShopCar[menu[name]]))
                    print('当前你口袋里的钱:%s,购物车的钱钱:%s' % (PocketMoney,ShopMoney))
                    reduce_item = input('不要哪个商品了? >').strip()
                    if reduce_item.isdigit():
                        reduce_item = int(reduce_item)
                        if reduce_item in range(1,len(goods)+1):
                            if ShopCar[goods[reduce_item-1][name]] <= 0:
                                print('输入正确的削减商品!')
                                continue
                            ShopCar[goods[reduce_item-1][name]]-=1

                            ShopMoney = 0
                            for item in ShopCar:
                                if items_dic[item] != 0:
                                                 #数量           #价格
                                    ShopMoney += ShopCar[item] * int(items_dic[item])
                            if ShopMoney <= PocketMoney:
                                print('当前你口袋里的钱:%s,购物车的钱钱:%s' % (PocketMoney,ShopMoney))
                                if input('你已经可以清空购物车了!是否清空呢(Y/N)?').strip().upper() == 'Y':
                                    exit_flag = True
                            #break
                    else:
                        print('输入有误.')
                print('当前你口袋里的钱:%s,购物车的钱钱:%s\n有钱人啊,直接清空购物车了。' % (PocketMoney,ShopMoney))
                #退出程序之后,依次显示用户购买的商品,数量,单价,以及此次共消费多少钱,账户余额多少,并将购买信息写入文件。
                print('你此次购物情况:')
                for item in ShopCar:
                    if ShopCar[item] != 0:
                        print('买了%s个%s,一个%s元' % (ShopCar[item],item,items_dic[item]))
                else:
                    print('此次消费:%s元,还剩%s元' % (ShopMoney,PocketMoney-ShopMoney))
                    break
                    #===================================================================
    #用户输入Q或者q退出程序。
    elif select.upper() == 'Q':
        print('此次消费:0元,还剩%s元' % PocketMoney)
        break
    else:
        print('输入有误.')

with open('log','w') as f:
    for item in ShopCar:
        if ShopCar[item] != 0:
            f.write('买了%s个%s,一个%s元\n' % (ShopCar[item],item,items_dic[item]))
    f.write('此次消费:%s元,还剩%s元' % (ShopMoney,PocketMoney-ShopMoney))

猜你喜欢

转载自www.cnblogs.com/meilong/p/tuo-chan-ban-di-yi-ci-da-zuo-yegou-wu-shang-cheng.html