#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# @Author: Skyell Wang
# @Time : 2018/5/22 15:50 # 基础要求:
#
# 1、启动程序后,输入用户名密码后,让用户输入工资,然后打印商品列表
#
# 2、允许用户根据商品编号购买商品
#
# 3、用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
#
# 4、可随时退出,退出时,打印已购买商品和余额
#
# 5、在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示
#
#
# 扩展需求:
#
# 1、用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买
#
# 2、允许查询之前的消费记录 import re
# 用户登录程序
flag = True
# 剩余钱数
left_saving = True
current_saving = 0
# 已有账号、密码
account_list = {'xiaopang': '', 'haohao': ''}
username = input('请输入您的用户名:').strip()
lock_name = open('lockname_list.txt', 'r', encoding="utf-8")
for i in lock_name:
lockname = i.strip()
if lockname == username:
print('您的账号已经被锁定!')
break
else:
continue
lock_name.close()
if username != lockname:
password_wrong = 0
while flag:
password = input('请输入密码:').strip()
# 利用列表生成式将账号信息存入列表中
acc_name = [keys for keys in account_list]
if username in acc_name:
# 判断账号、密码是否正确
if account_list[username] == password:
print('欢迎回来!')
flag = False # 判断与之前账号是否一致,如果一致则打印出之前的消费清单
list = open('shopping_list', 'r', encoding="utf-8")
if username in [i for i in list]:
with open('shopping_list', 'r', encoding="utf-8") as list:
print(list.read())
left_saving = False
# 取出文件中已消费后剩余金额,并将余额赋值给saving
with open('shopping_list', 'r', encoding="utf-8") as list:
an = [x for x in list]
bc = re.findall('\d+\d', an[1])
current_saving = bc[0]
list.close()
break
else:
print('密码错误,请重新输入!')
password_wrong += 1
# 密码错误3次,锁定用户
if password_wrong == 3:
print('您的账号已经被锁定!')
lock_name = open('lockname_list.txt', 'a+', encoding="utf-8")
# 将被锁定的账号写入锁定文件中
lock_name.write(username+'\n')
lock_name.close()
else:
print('该账号不存在')
flag = False
break # 购物车程序
product_list=[
('电脑', 1999),
('鼠标', 10),
('游艇', 20),
('美女', 998),
('房子', 8000), ]
if left_saving:
saving = input('请输入您的工资:')
else:
saving = str(current_saving)
shopping_car = []
if saving.isdigit():
saving = int(saving)
while True:
# 打印商品内容
for i, v in enumerate(product_list, 1):
print(i, '>>>>', v) # 引导用户选择商品
choice = input('选择购买商品编号[退出:q]:') # 验证输入是否合法
if choice.isdigit():
choice = int(choice)
if choice > 0 and choice <= len(product_list):
# 将用户选择商品通过choice取出来
p_item = product_list[choice-1] # 如果钱够,用本金saving减去该商品价格,并将该商品加入购物车
if p_item[1] < saving:
saving -= p_item[1] shopping_car.append(p_item) else:
print('\033[1;31;0m')
print('余额不足,还剩%s元'%saving)
print('\033[0m')
print(p_item)
else:
print('编码不存在')
elif choice == 'q':
print('\033[1;34;0m')
print('------------您已经购买如下商品----------------')
print('\033[0m')
# 循环遍历购物车里的商品,购物车存放的是已买商品
buy_list=[i for i in shopping_car]
print(buy_list)
# 将购买物品信息存入文件中
with open('shopping_list','w', encoding = "utf-8") as list:
list.write(str(buy_list)+'\n'+'您还剩:%s元钱' % saving + '\n' + username)
# 高亮显示所剩余额
print('\033[1;34;0m')
print('您还剩:%s元钱' % saving)
print('\033[0m') break
else:
print('invalid input')

python写购物车小程序的更多相关文章

  1. python编写购物车小程序

     #练习#程序购物车#启动程序后,让用户输入工资,  然后打印商品列表,允许用户根据商品编号购买商品用户选择商品后 #检测余额是否够,够就直接扣款,不够就提醒可随时退出,退出时,打印已购买商品和余额  ...

  2. python 练习购物车小程序

    # -*- coding:utf-8 -*- shp = [ ['iphone',5000], ['offee',35], ['shoes',800] ] pric_list = [] e = int ...

  3. python基础—购物车小程序练习

    要求:顾客可以根据商品编号购买工资允许内的商品,购买完成后,打印购买列表. def main(): salary = input("what is your salary ?") ...

  4. python 购物车小程序

    python 购物车小程序 功能要求:1.启动程序后,输入用户名密码后,让用户输入工资,然后打印商品列表2.允许用户根据商品编号购买商品3.用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒4. ...

  5. [作业] Python入门基础---购物车小程序

    1.购物车小程序: 1.1用户输入工资取60% 1.2打印输出商品菜单 1.3由用户输入数字选择 #__author:Mifen #date: 2018/11/27 # 购物车程序 #把工资作为账户的 ...

  6. 【Python精华】100个Python练手小程序

    100个Python练手小程序,学习python的很好的资料,覆盖了python中的每一部分,可以边学习边练习,更容易掌握python. [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同 ...

  7. python3 购物车小程序,余额写入文件保存

    python3 购物车小程序,余额写入文件保存 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Hiuhung Wan goods = ( ...

  8. Day2:购物车小程序

    一.购物车小程序第一版 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Hiuhung Wan product_list = [ (&quo ...

  9. 整理了适合新手的20个Python练手小程序

    100个Python练手小程序,学习python的很好的资料,覆盖了python中的每一部分,可以边学习边练习,更容易掌握python. 本文附带基础视频教程:私信回复[基础]就可以获取的 [程序1] ...

随机推荐

  1. Spring Boot 2.X(一):入门篇

    什么是 Spring Boot Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程.该框架遵循"约定优于配置& ...

  2. Python调用 Openstack 主要服务(keystone,nova,glance,neutron,heat)

    由于Openstack更新很快,现在准备搭建基于Queen版本的Openstack,Queen版本要求keystone版本为V3,所以之前大多数接口都不能用了,百度了一下都没有比较新的实例,官方文档又 ...

  3. 从0开始学FreeRTOS-1

    我们知道,(单核)单片机某一时刻只能干一件事,会造成单片机资源的浪费,而且还有可能响应不够及时,所以,在比较庞大的程序或者是要求实时性比较高的情况下,我们可以移植操作系统.因为这种情况下操作系统比裸机 ...

  4. 杂谈:开发人员如何进行复杂业务的学习?让boss刮目相看

    一点小拙见,欢迎指正 一.概述 大型复杂的软件系统,是有许多人共同协作完成的,有些产品的业务是很复杂的,其在需求文档,及开发规范上都做得很好,不然维护的人越多,没有文档和规范去限制,岂不更加乱套. 如 ...

  5. Bitset改进你的程序质量

    1:Bitset介绍 BitSet 是用于存储二进制位和对二进制进行操作的 Java 数据结构, 此类实现了一个按需增长的位向量.位 set 的每个组件都有一个 boolean 值.用非负的整数将 B ...

  6. .net工作流引擎ccflow开发平台属性功能的隐藏显示介绍

    关键字: 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 表单引擎 工作流功能说明  工作流设计 工作流快速开发平台   业务流程管理   bpm工作流系统  java工 ...

  7. (已解决)STM32L151使用串口发送数据第一字节为FE问题!

    最近学习到串口发送数据时遇到一个问题:第一个字节总是FE,后面才是对的数据. 最终解决的方法是: 讲GPIO复用的操作放到GPIO配置之前! 体现在代码中就是: //打开GPIO时钟 RCC_AHBP ...

  8. 关于git提交

    16年申请注册的git账号,除了需要找一些有用的demo时会逛一下,其实一直没拿起来真实用过. 好了,说一下今天下午呕心沥血弄出来的东西,其实就是简单的用git小黑窗口推文件夹上去,本人较笨,会按照我 ...

  9. Python网络爬虫——Appuim+夜神模拟器爬取得到APP课程数据

    一.背景介绍 随着生产力和经济社会的发展,温饱问题基本解决,人们开始追求更高层次的精神文明,开始愿意为知识和内容付费.从2016年开始,内容付费渐渐成为时尚. 罗辑思维创始人罗振宇全力打造" ...

  10. Azure DevOps 替换 appsettings 解决方案

    之前发布了 <.Net Core DevOps -免费用Azure四步实现自动化发布(CI/CD)>之后,有很多朋友私信我说如何替换 appsettings 里面的 ConnectionS ...