1. #!/usr/bin/env python
  2. import sys
  3. import os
  4. import getpass
  5.  
  6. 商品={
  7. '图书': {
  8. "《Puppet实战》": 39,
  9. "《ZooKeeper分布式过程协同技术详解》":48,
  10. "《代码审计》":42,
  11. "《白帽子讲浏览器安全》":73,
  12. },
  13. '数码家电': {
  14. "Iphone6S":6000,
  15. "MacBookAir":15000,
  16. "DELL-R720":33000,
  17. "索尼PlayStation VR":2600,},
  18. '食品': {
  19. "茉莉花茶":3,
  20. "康师傅红烧牛肉面":3,
  21. "3+2饼干":5.5,
  22. "红牛":7,
  23. },
  24. '生活用品': {
  25. "汰渍洗衣液-550ml":23,
  26. "清风抽纸:300抽/三层":12,
  27. "电神水壶":98,
  28. "六神花露水":19,
  29. }
  30. }
  31. #定义各项初始值
  32. money='account.txt'
  33. logtime=0
  34. afile='afile.txt'
  35. bfile='bfile.txt'
  36. SHOPING=[]
  37.  
  38. #显示余额
  39. def show_money():
  40. with open(money,'r+') as ac:
  41. for line in ac.readlines():
  42. yue = line.strip()
  43. return int(yue)
  44.  
  45. def deny_account(username):
  46. print("This account already locked!")
  47. with open(bfile,'a+') as bf: # 此处最好为a+模式,本人之前使用a模式错误账号无法写入
  48. bf.write(username + '\n')
  49. flag=False
  50. while logtime < 3:
  51. username = input('\033[31;1m请输入用户名:\033[0m')
  52. with open(bfile, 'r') as lock_f:
  53. # 取出黑名单中的用户名与输入的用户名进行匹配
  54. for line in lock_f.readlines():
  55. if len(line) == 0:
  56. continue
  57. if username == line.strip():
  58. sys.exit('\033[32;1m用户 %s 已经被锁定!\033[0m' % username)
  59. # 如果用户名为空重新输入
  60. if len(username) == 0:
  61. print('用户名不能为空,请重新输入')
  62. continue
  63. with open(afile,'r') as af:
  64. for line in af.readlines():
  65. user,pwd = line.strip().split()
  66. if username == user:
  67. password = getpass._raw_input('请输入用户%s的密码:'%username).strip()
  68. if username == user and password == pwd:
  69. print('登陆成功!')
  70. flag=True
  71. break
  72. else:
  73. if logtime<3:
  74. print('密码错误请重新输入!')
  75. logtime+=1
  76. break
  77. else:
  78. if logtime<3:
  79. print('用户不存在!')
  80. logtime += 1
  81. if flag==True:
  82. print('Welcome %s come in TG!' % username)
  83. break
  84. else:
  85. deny_account(username)
  86. if flag==True:
  87. while True:
  88. if show_money() < 0:
  89. name1 = "\033[1;31;1m您的账户余额不足,请尽快充值!"
  90. print(name1.center(50, '-'))
  91. else:
  92. print('*'*50)
  93. 欢迎信息 = '\033[1;31;1m欢迎登录没有小菊花的网上超市!\033[0m'
  94. print(欢迎信息.center(54, '*'))
  95. print('\033[1;32;1m*\033[1m' * 50)
  96. for lei in 商品:
  97. print('\033[1;35;1m%s\033[1m'%lei)
  98. # print('\033[1;35;1m%s\033[1m'%lei)
  99. print('\033[1;32;1m*\033[1m'*50)
  100. 选择类 = input('\033[1;34;1m请选择类目:\033[0m')
  101. #二级流程
  102. for s in 商品[选择类]:
  103. print('\033[1;32;1m-\033[1m' * 50)
  104. print(s)
  105. 选择商品=input('请选择商品:')
  106. n = input('输入数量:')
  107. jiage=商品[选择类][选择商品]
  108. print('\033[1;31;1m本商品单价为:%d¥,本次共计添加%d个,总价为%d*%d=%d¥\033[0m'%(jiage,int(n),jiage,int(n),jiage*int(n)))
  109. SHOPING.extend([jiage*int(n)])
  110. print('\033[1;32;1m-\033[1m' * 50)
  111. xuanze=input('\033[1;31;1m是否继续购物,Y键返回主菜单,N进入购物车结算,请选择!\033[0m')
  112. #进入购物车结算
  113. if xuanze =='N':
  114. print('%s'%SHOPING)
  115. 结算=input('是否结算?Y/N')
  116. if 结算 =='Y':
  117. 余额=show_money()-int(sum(SHOPING))
  118. print(余额)
  119. with open(money, 'w+') as ac:
  120. ac.writelines('%s'%余额)
  121. #break
  122. 继续=input('是否继续购物(Y/N)?退出:N,返回上一级:Y.')
  123. if 继续=='Y':
  124. sys.exc_traceback()
  125. else:
  126. sys.exit()
  127. elif xuanze=='Y':
  128. break
  129. else:
  130. print("您选择的商品不存在!请重新选择!")
  131. break
  132. else:
  133. print("选择的类目不存在!")
  134. continue
  135. break
  136. break

afile.txt内容

carl openstack

helen tianle

lucy hr

kevin usa

bfile.txt内容随意

Python培训12期-day2作业-购物车的更多相关文章

  1. python基础day2作业:购物车

    #功能:1.可注册账号2.登录买家账号3.可查询编辑购物车里商品4.可以余额充值5.可提示余额不足6.购物车结算 #使用:1.第一次使用先注册账号填写账号金额2.账号金额信息保存在buyer_acco ...

  2. 智普教育Python培训之Python开发视频教程网络爬虫实战项目

    网络爬虫项目实训:看我如何下载韩寒博客文章Python视频 01.mp4 网络爬虫项目实训:看我如何下载韩寒博客文章Python视频 02.mp4 网络爬虫项目实训:看我如何下载韩寒博客文章Pytho ...

  3. 2015老男孩Python培训第八期视频教程

    2015老男孩Python培训第八期视频教程,希望您通过本教程的学习,能学会常用方法和技巧.教程从基础知识开始讲解一直到后期的案例实战,完全零基础学习,从初学者的角度探讨分析问题,循序渐进由易到难,确 ...

  4. 老男孩python第六期

    01 python s6 day7 上节回顾02 python s6 day7 SNMP使用03 python s6 day7 大型监控架构讲解04 python s6 day7 Redis使用05 ...

  5. python基础一之课后作业:编写登录接口

    1 # Author : Mamba 2 3 #python基础一之课后作业:编写登录接口 4 5 # 输入用户名密码 6 # 认证成功后显示欢迎信息 7 # 用户名3次输入错误后,退出程序 8 # ...

  6. Python全栈学习_day002作业

    Day2作业及默写 1.判断下列逻辑语句的True,False. 1)1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 & ...

  7. 使用 python 查看谁没有交作业

    话说实验报告每天都要查人数,何不用程序实现 使用 python 查看谁没有交作业 version 1.0 程序嘛,肯定是可以改进的.使用该程序的前提是实验报告文件名中包含学号信息.将以上程序放在实验报 ...

  8. 【Python】:简单爬虫作业

    使用Python编写的图片爬虫作业: #coding=utf-8 import urllib import re def getPage(url): #urllib.urlopen(url[, dat ...

  9. 老王Python培训视频教程(价值500元)【基础进阶项目篇 – 完整版】

    老王Python培训视频教程(价值500元)[基础进阶项目篇 – 完整版] 教学大纲python基础篇1-25课时1.虚拟机安装ubuntu开发环境,第一个程序:hello python! (配置开发 ...

随机推荐

  1. [问题2015S03] 复旦高等代数 II(14级)每周一题(第四教学周)

    [问题2015S03]  设 \(g(x)=x^n+a_1x^{n-1}+\cdots+a_{n-1}x+a_n\) 是数域 \(\mathbb{K}\) 上的多项式, \(V\) 是 \(\math ...

  2. 遗传算法在JobShop中的应用研究(part1: 绪论)

    1. 什么是JobShop问题 Job,中文翻译成工件.一个工件又由若干道工序加工完成. resource, 资源.在本文的车间调度中资源指的是机器,每道工序要在某个特定机器上加工. Constrai ...

  3. C++11带来的优雅语法

    C++11带来的优雅语法 自动类型推导 auto auto的自动类型推导,用于从初始化表达式中推断出变量的数据类型.通过auto的自动类型推导,可以简化我们的编程工作; auto是在编译时对变量进行了 ...

  4. 视频播放器之————JW Player参数详解

    JW Player参数详解 1,安装 下载后,你可以得到一个例子,当用文本或HTML编辑器打开的时候,你可以发现swf是用一段短小的 javascript嵌入到页面上的.这个Javascript是Ge ...

  5. 安装 SciPy 和 scikit-learn 升级pip 及pip基本命令表

    安装Scipy和scikit-learn出错,出错记录及当时最终解决办法 问题: 一.使用pip直接安装 直接pip install scipy C:\Users\Plain>pip insta ...

  6. 【转】Linux系统启动过程分析

    [转]Linux系统启动过程分析 转自:http://blog.chinaunix.net/uid-23069658-id-3142047.html 经过对Linux系统有了一定了解和熟悉后,想对其更 ...

  7. MFC编程入门之七(对话框:为对话框添加控件)

    创建对话框资源需要创建对话框模板.修改对话框属性.为对话框添加各种控件等步骤,前面一讲中已经讲了创建对话框模板和修改对话框属性,本节继续讲如何为对话框添加控件.  上一节中创建了一个名为"A ...

  8. 你真的会写单例模式吗-------Java实现

    转载: 你真的会写单例模式吗--Java实现 单例模式可能是代码最少的模式了,但是少不一定意味着简单,想要用好.用对单例模式,还真得费一番脑筋.本文对Java中常见的单例模式写法做了一个总结,如有错漏 ...

  9. AxureRP8实战手册(基础11-20)

    本文目录 基础11. 设置文本框输入为密码 基础12. 设置打开选择文件窗口 基础13. 限制文本框输入字符位数 基础14. 设置文本框提示文字 基础15. 设置文本框回车触发事件 基础16. 设置元 ...

  10. absolute和fixed

    共同点: 改变行内元素的呈现方式,display设置为block:让元素脱离文档流,不占据空间:默认会覆盖到非定位元素上. 不同点: absolute的根元素是相对于static定位以外的第一个父元素 ...