'''
购物车程序
需求:
1.启动程序后,让用户输入工资,然后打印商品列表
2.允许用户根据商品编号购买商品
3.用户选择商品后,检查余额是否够,够就直接扣款,不够就提醒
4.用户可一直购买商品,也可随时退出,退出时,打印已购买商品和余额
'''
#商品列表
products_list = [['Iphone8', 6888], ['MacPro', 14800], ['小米6', 2499], ['Coffee', 31], ['Book', 80], ['Nike Shoes', 799]] print("欢迎来到中关村手机城!".center(50, "*"))
#充值
while True:
salary = input("请输入您的工资: ").strip()
if salary.isdigit():
salary = int(salary)
print("恭喜您充值成功! 您的账号余额为: %d元." % salary)
break
else:
print("输入有误! 请重新输入您正确的工资.") #总消费金额
consume_total = 0
#购买商品
shopping_cart = {}
while True:
#显示商品信息
print("中关村手机城商品信息".center(50, "*"))
print("商品序号\t商品名称\t商品价格")
for ind, products in enumerate(products_list):
print("%d\t\t\t%s\t\t%d" % (ind, products[0], products[1]))
print("Q\t\t\t退出") #用户选择商品编号
user_choice = input("请输入您要购买的商品编号: ").strip()
if user_choice.isdigit():
user_choice = int(user_choice)
#添加购物车并结算
if user_choice >= 0 and user_choice < len(products_list):
#余额足
if salary - consume_total - products_list[user_choice][1] >= 0:
shopping_name = products_list[user_choice][0]
shopping_price = products_list[user_choice][1]
#判断商品是否已买过
if user_choice in shopping_cart:
shopping_cart[user_choice][2] += 1
else:
shopping_cart[user_choice] = [shopping_name, shopping_price, 1]
consume_total += shopping_price
print("恭喜您!成功购买商品: %s,本次消费: %d元. 总消费: %d元. 账号余额: %d元." % (shopping_name, shopping_price, consume_total, salary - consume_total))
#余额不足
else:
print("余额不足! 已消费: %d元. 账号余额: %d元." % (consume_total, salary - consume_total))
else:
print("商品不存在! 请重新选择.")
elif user_choice.upper() == "Q":
break
else:
print("商品不存在! 请重新选择.") #判断购物车是否为空
if shopping_cart != {}:
print("您已购买的商品信息".center(50, "*"))
print("商品编号\t商品名称\t商品单价\t商品数量")
for id, cars in shopping_cart.items():
print("%d\t\t\t%s\t\t%d\t\t\t%d" % (id, cars[0], cars[1], cars[2]))
print("总消费: %d元, 账号余额: %d 元" % (consume_total, salary - consume_total)) print("欢迎下次光临!".center(50, "*")) ------------------------------------------------------------购物车---------------------------------------------------------- '''
购物车
1, 用户先给自己的账号充钱: 比如先充3000元.
2, 页面显示 序号 + 商品名称 + 商品价格, 如:
1 电脑 1999
2 鼠标 10
...
n 购物车结算
3, 用户输入选择的商品序号,然后打印商品名称及商品价格,并将此商品,添加到购物车,用户还可继续添加商品.
4, 如果用户输入的商品序号有误, 则提示输入有误, 并重新输入.
5, 用户输入n为购物车结算, 依次显示用户购物车里面的商品, 数量及单价, 若充值的钱数不足, 则让用户删除某商品,
直至可以购买, 若充值的钱数充足, 则可以直接购买.
6, 用户输入Q或者q退出程序.
7, 退出程序之后, 依次显示用户购买的商品, 数量, 单价, 以及此次消费多少钱, 账号余额多少.
'''
products_list = [("电脑", 1999), ("鼠标", 10), ("键盘", 30), ("音响", 888), ("耳机", 66)]
shopping_cart = {}
print("--------------------欢迎来到北京中关村电脑城!--------------------") #用户充值
while True:
money = input("请输入您要充值的金额: ").strip()
if money.isdigit():
money = int(money)
print("恭喜您,成功充值: %d元. 账号余额为: %d元!"%(money, money))
break
else:
print("输入有误,请重新输入") Flag = True
while Flag:
# 显示商品
print("商品信息列表".center(50, "-"))
print("序号\t商品名称\t商品价格")
for ind, products in enumerate(products_list):
print("%d\t\t%s\t\t%d" % (ind, products[0], products[1]))
print("n\t\t购物车结算") #提示用户输入
user_choice = input("请输入您要购买的商品序号(退出请输入Q或q): ").strip()
if user_choice.isdigit():
user_choice = int(user_choice)
#添加购物车
if user_choice >= 0 and user_choice < len(products_list):
cart_list = products_list[user_choice]
if user_choice in shopping_cart:
shopping_cart[user_choice][2] += 1
else:
shopping_cart[user_choice] = [cart_list[0], cart_list[1], 1]
print("商品: %s 单价: %d元,已成功添加到您的购物车!"%(cart_list[0], cart_list[1]))
#商品序号输入错误
else:
print("输入有误,请重新正确的商品序号")
#用户结算
elif user_choice.upper() == "N":
while True:
#判断购物车内是否有商品
if shopping_cart == {}:
print("无法结算,购物车现在空空如也,请选择您要购买的商品序号!")
break #显示用户购物车里面的商品
consume = 0
print("您购物车内的商品信息".center(50, "-"))
print("商品序号\t商品名称\t商品数量\t商品单价")
for ind, cars in shopping_cart.items():
print("%d\t\t\t%s\t\t%d\t\t\t%d"%(ind, cars[0], cars[2], cars[1]))
consume += cars[1]*cars[2]
print("商品总价: %s"%consume) #账户余额足
if money - consume >= 0:
print("恭喜您购买成功! 此次共消费: %d元, 账号余额: %d元."%(consume, money-consume))
Flag = False
break
#账号余额不足
else:
del_choice = input("账号余额不足,你还缺%d元,请选择您要移除购物车内的商品序号: "%(consume-money)).strip()
if del_choice.isdigit():
del_choice = int(del_choice)
if del_choice in shopping_cart:
del_name = shopping_cart[del_choice][0]
shopping_cart[del_choice][2] -= 1
if shopping_cart[del_choice][2] == 0:
del shopping_cart[del_choice]
print("成功从购物车移除一件商品: %s!"%del_name)
else:
print("输入有误,请重新输入要是移除的商品序号!")
else:
print("输入有误,请重新输入要是移除的商品序号!")
#退出
elif user_choice.upper() == "Q":
break
else:
print("输入有误,请重新输入")
print("欢迎下次光临!".center(50, "-"))

python3 练习题(购物车)的更多相关文章

  1. Python3练习题系列(09)——物以类聚,人以群分

    目标: 用类管理同类事物 解析: 用到“class”的编程语言被称作“Object Oriented Programming(面向对象编程)”语言.首先你需要做出“东西”来,然后你“告诉”这些东西去完 ...

  2. python3 练习题(用函数完成登录注册以及购物车的功能)

    ''' 用函数完成登录注册以及购物车的功能 作业需求: 1,启动程序,用户可选择四个选项:登录,注册,购物,退出. 2,用户注册,用户名不能重复,注册成功之后,用户名密码记录到文件中. 3,用户登录, ...

  3. 【Python3练习题 025】 一个数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同

    [Python练习题 025] 一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同 x = input('请输入任意位数的数字:') if x == x[::-1]: ...

  4. 【Python3练习题 009】 打印出所有的“水仙花数”

    # [Python练习题 009] 打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,# 其各位数字立方和等于该数本身.例如:153是一个“水仙花数”,# 因为153=1的三次方+5的三次方+ ...

  5. # 【Python3练习题 004】输入某年某月某日,判断这一天是这一年的第几天?

    # [Python练习题 004]输入某年某月某日,判断这一天是这一年的第几天? # 思路:先判断是否为闰年,这关系到 2 月份的天数.# 之后再根据月份值把前几个月的天数累积加起来,最后再加上个“日 ...

  6. 【Python3练习题 002】企业发放的奖金根据利润提成

    # [Python练习题 002]企业发放的奖金根据利润提成.# 利润(I)低于或等于10万元时,奖金可提10%:利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分, ...

  7. Python3练习题 001:4个数字求不重复的3位数

    #Python练习题 001:4个数字求不重复的3位数#方法一import itertoolsres = [][res.append(i[0]*100 + i[1]*10 + i[2]) for i ...

  8. python3 练习题 day01

    #练习题:'''1.简述变量命名规范'''#变量名由数字.字母.下划线组成#变量名可以字母和下划线开头,不能以数字开头,并且不能全为数字#变量名不能太长,且要有意义#最好使用驼峰或下划线格式命令#变量 ...

  9. Python3练习题系列(10)——项目骨架构建

    目标: 如何创建<项目“骨架”目录> 包含:项目文件布局.自动化测试代码,模组,以及安装脚本. 由于编写一个Python文件可以作为一个模块,一个带__init__.py的目录算一个包. ...

随机推荐

  1. [PHP] 算法-删除链表中重复的结点的PHP实现

    删除链表中重复的结点: 1.定义两个指针pre和current 2.两个指针同时往后移动,current指针如果与后一个结点值相同,就独自往前走直到没有相等的 3.pre指针next直接指向curre ...

  2. MarkDown常用格式

    常用格式 ** :加粗 <br> : 换行 > :可以用来引用文章,很漂亮. 可以展开的文件夹格式 <details> <summary>框架</sum ...

  3. Java - ConcurrentMap原理

    https://blog.csdn.net/justloveyou_/article/details/72783008 结构是怎样的?segment是什么?hashEntry是什么?默认可并发的大小是 ...

  4. python全局解释器锁(GIL)

    文章作者:卢钧轶(cenalulu) 本文原文地址:http://cenalulu.github.io/python/gil-in-python/ ,对文章做了适当的修改,加入了一些自己的理解. CP ...

  5. 14-补充内容:MySQl创建用户和授权

    [转]14-补充内容:MySQl创建用户和授权 权限管理 我们知道我们的最高权限管理者是root用户,它拥有着最高的权限操作.包括select.update.delete.update.grant等操 ...

  6. 微信小程序日历课表

    最近项目中使用到了日历,在网上找了一些参考,自己改改,先看效果图 wxml <view class="date"> <image class="dire ...

  7. 洛谷P3899 [湖南集训]谈笑风生(线段树合并)

    题意 题目链接 Sol 线段树合并板子题,目前我看到两种写法,分别是这样的. 前一种每次需要新建一个节点,空间是\(O(4nlogn)\) 后者不需要新建,空间是\(O(nlogn)\)(面向数据算空 ...

  8. 2017-10-10 都市传说: "部分"中文出现乱码

    知乎原链, 作者亦本人 事情起源于项目另一开发者在中文Windows下构建时遇到的部分中文出现乱码问题. 当时很不解的是, 为什么会只有部分出现乱码. 第一感觉是, 如果编码转换不正确, 要么全乱码, ...

  9. 元素的class和id问题

    一个元素有且只能有1个id,且全文中此id只能出现在一个元素上   一个元素不能写多次class,比如 <div class="a" class="b"& ...

  10. 组件化和 React

    一,对组件化的理解 1,组件的封装 -视图 -数据 -变化逻辑(数据驱动视图变化) 例: import React, { Component } from 'react'; import List f ...