购物车的编写对于我这种不是很精通函数的小白来说,简直太难了。各种坑,各种无奈啊!不过总算也是写出来了!
不多说,直接上代码!
#!/usr/bin/env python
#用户名 sanjiang
#密码 sanjiang123
import sys
import collections
#定义一个计数器
A = 0
first = True
while first:
login_user = input('请输入你的用户名: ').strip()
#读取用户文件user.txt,用来判断输入的用户是否存在
f_user = open('user.txt','r+')
user_list=f_user.read().split()
#读取锁定文件local_file,用来判断输入的用户是否锁定
lock = open('local_file','a+')
lock_file = lock.read().split()
#判断用户是否锁定
if login_user in lock_file:
print('------------------------------------------------\n'
'对不起,你输入的账号已被锁定,请用其他账号登录\n')
continue
#判断用户是否存在
elif login_user not in user_list:
print('------------------------------------------------\n'
'对不起,你输入的用户不存在,请重新输入。\n')
continue
while True:
login_pwd = input('请输入你的密码: ').strip()
#判断密码是否正确
if login_pwd == user_list[ user_list.index(login_user) + 1]:
print('------------------------------------------------\n'
'亲爱的%s,\n'%login_user)
first = False
break
else:
A +=1
a = 3 - A
if A ==3:
print('------------------------------------------------\n'
'对不起,你输入的次数已经超过三次,账号已被锁定\n')
#往锁定文件中添加输入的用户
lock.write('%s\n'%login_user)
#关闭两个文件
lock.close()
f_user.close()
first = True #定义一个变量用来跳出二层循环
break
print('------------------------------------------------\n '
'对不起,你输入的密码错误,请重新输入。您还有%s次机会\n'%a)
#如果跳出第一层循环定义了跳出二层循环变量,那么就跳出第二层循环
print('''
__________________________________________________
| |
| 欢迎登陆三江水果购物商城 |
|_________________________________________________|
''') # 定义一个本地字典
dic = {}
#!定义一个跳出循环的变量
flag1 = True
while flag1:
#!请求输入一个购物预算
num1 = input('请输入您的购物预算: ')
#!判断输入的是否为空或者是否为字符串
if len(num1)==0 or num1 =='0' or num1.isdigit() is False:
print('\033[36;1m对不起,你输入的有误,请重新输入\033[0m')
continue
else:
pass
#!定义一个跳出循环的变量
flag2 = True
while flag2:
#!交互式询问要做什么选项
num = input('''三江,你想要做什么呢? 你的预算为%s元
1:购买水果
2:购物车
3:修改购物预算
4:老板个人简历
5.退出程序
:'''%num1)
#!定义退出程序
if num =='5':
sys.exit()
#!显示老板简历信息
if num == '4':
print('''
notice:
吴三江是一个非常的帅的一个小伙子,很有潜力的孩子,虽然现在有点穷,但是请莫欺少年穷。 ''')
#!返回上一个循环
if num =='3':
flag2 = False
#!进入购买水果的界面
if num == '1':
#!定义一个字典并把字典转换成列表
local_dic= {'芒果':'7','桃李':'8','龙眼':'9','苹果':'9','香蕉':'5','葡萄':'8','蓝莓':'7','凤梨':'7','柚子':'3','橘子':'6',
}
list1 =list(local_dic)
list2 = list(local_dic.values())
print('编号\t\t','种类\t\t','单价\t\t')
flag3 = True
while flag3:
#!展示水果的商品列表
for i in range(len(list1)):
print( 'num.%s \t\t %s \t\t %s元/斤' %(i,list1[i],list2[i]))
num2 = input('\033[36;1m请输入你要购买的商品序号(返回上一层请按q): ')
#!定义退出这个循环
if num2 =='q':
break
#!判断是否输入的是字符串
if num2.isdigit() is False:
print('\033[36;1m你输入的有误,请重新输入:\033[0m ')
continue
if len(num2)!=0 and int(num2)<len(list1):
#!交互式显示购买水果的过程
num3 = input('您要购买的商品是%s,单价为%s元/斤,确定要购买么(y/n?): '%(list1[int(num2)],list2[int(num2)]))
if num3 =='n':
continue
elif num3 =='y':
num4 = input('\033[36;1m请输入你要购买的商品数量:\033[0m')
if num4.isdigit()is False:
print('\033[36;1m对不起,你输入的有误,请重新输入。\033[0m')
continue
num5 = input('您要购买的商品是%s,单价为%s元/斤,数量为%s,总价为%s,确定加入购物车么(y/n?):'%(list1[int(num2)],list2[int(num2)],int(num4),int(num4)*int(list2[int(num2)])))
if num5 =='y':
dic_list = list(dic)
dic_list2 = list(dic.values())
#!如果购买的商品不在购物车中,那么购买数量就是指定的数量
if list1[int(num2)] not in dic_list:
dic[list1[int(num2)]]=int(num4)
break
#!如果购买的商品在购物车中,那么购买的数量就是之前的商品数量加上这次的商品数量
else:
dic[list1[int(num2)]]=int(num4)+dic_list2[int(dic_list.index(list1[int(num2)]))] elif num5=='n':
continue
else:
print('\033[36;1m你输入的有误,请重新输入: \033[0m')
continue
else:
print('\033[36;1m你输入的有误,请重新输入: \033[0m')
continue
else:
print('\033[36;1m你输入的有误,请重新输入: \033[0m')
#!进入购物车
if num == '2':
print('''购物车
编号 商品 单价 数量 总价\t''')
#!再次重复定义一个字典,和列表,用来调用
local_dic= {'芒果':'7','桃李':'8','龙眼':'9','苹果':'9','香蕉':'5','葡萄':'8','蓝莓':'7','凤梨':'7','柚子':'3','橘子':'6',
}
dic_list1 = list(dic)
dic_list2 = list(dic.values())
#!显示出购物车里面的商品列表
for i in range(len(dic_list1)):
print('''
%s %s %s %s %s\t'''%(i,dic_list1[i],local_dic[dic_list1[i]],dic_list2[i],int(dic_list2[i])*int(local_dic[dic_list1[i]])))
#!求所有商品的总金额
a = 0
for i in range(len(dic_list1)):
a = a + int(dic_list2[i])*int(local_dic[dic_list1[i]])
b = a
flag4 = True
while flag4:
num6 = input('结算:t | 退出:q | 删除订单 :d | 修改订单 :z\n请输入你的操作指令:')
if num6 =='q':
flag4 =False
elif num6 =='t':
num7= input('你购买水果的总金额为%s,确定要结算么?(y/n)'%b,)
if num7 =='y':
#!如果预算小于结算的总金额,那么提示重新购买
if int(num1)<int(b):
print('对不起,超出了你的预算,请重新购买。')
flag4 = False
#!如果预算大于结算的总金额,那么会提示距离预算还有多少钱可以用
elif int(num1)>int(b):
c = int(num1)-int(b)
#!结算完可以继续购物,也可以选择离开
num8 = input('距离你的预算还有%s元,你还可以去买些水果哦,要离开还是继续购物?q:离开,购物:g'%c)
if num8 =='q':
flag4=False
elif num8 =='g':
continue
else:
print('对不起。你输入的有误')
elif num6 =='d':
print('学艺不精,暂时不支持此功能,')
elif num6 =='z':
print('学艺不精,暂时不支持此功能,')
else:
print('对不起。你输入的有误')
continue
效果展示。
python之购物车的编写(熬夜撸代码中。。。)的更多相关文章
-
吴裕雄--天生自然python学习笔记:编写网络爬虫代码获取指定网站的图片
我们经常会在网上搜索井下载图片,然而一张一张地下载就太麻烦了,本案例 就是通过网络爬虫技术, 一次性下载该网站所有的图片并保存 . 网站图片下载并保存 将指定网站的 .jpg 和 .png 格式的图片 ...
-
编写高质量代码--改善python程序的建议(六)
原文发表在我的博客主页,转载请注明出处! 建议二十八:区别对待可变对象和不可变对象 python中一切皆对象,每一个对象都有一个唯一的标识符(id()).类型(type())以及值,对象根据其值能否修 ...
-
编写高质量代码--改善python程序的建议(八)
原文发表在我的博客主页,转载请注明出处! 建议四十一:一般情况下使用ElementTree解析XML python中解析XML文件最广为人知的两个模块是xml.dom.minidom和xml.sax, ...
-
《编写高质量代码:改善Python程序的91个建议》读后感
编写高质量代码:改善Python程序的91个建议 http://book.douban.com/subject/25910544/ 1.(建议16)is 用于判断两个对象的id是否相等,==才是判断 ...
-
编写高质量代码改善python程序91个建议学习01
编写高质量代码改善python程序91个建议学习 第一章 建议1:理解pythonic的相关概念 狭隘的理解:它是高级动态的脚本编程语言,拥有很多强大的库,是解释从上往下执行的 特点: 美胜丑,显胜隐 ...
-
基于gulp编写的一个简单实用的前端开发环境好了,安装完Gulp后,接下来是你大展身手的时候了,在你自己的电脑上面随便哪个地方建一个目录,打开命令行,然后进入创建好的目录里面,开始撸代码,关于生成的json文件请点击这里https://docs.npmjs.com/files/package.json,打开的速度看你的网速了注意:以下是为了演示 ,我建的一个目录结构,你自己可以根据项目需求自己建目
自从Node.js出现以来,基于其的前端开发的工具框架也越来越多了,从Grunt到Gulp再到现在很火的WebPack,所有的这些新的东西的出现都极大的解放了我们在前端领域的开发,作为一个在前端领域里 ...
-
使用python制作ArcGIS插件(2)代码编写
使用python制作ArcGIS插件(2)代码编写 by 李远祥 上一章节已经介绍了如何去搭建AddIn的界面,接下来要实现具体的功能,则到了具体的编程环节.由于使用的是python语言进行编程,则开 ...
-
Python学习(一):编写购物车
1.购物车流程图: 2.代码实现: #!/usr/bin/env python #coding=utf-8 ChoiceOne =''' 1.查看余额 2.购物 3.退出 ''' ChoiceTwo ...
-
Python 工匠:编写条件分支代码的技巧
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由鹅厂优文发表于云+社区专栏 作者:朱雷 | 腾讯IEG高级工程师 『Python 工匠』是什么? 我一直觉得编程某种意义是一门『手艺』 ...
随机推荐
-
报表开发工具Finereport移动端app js接口列表【全】
应用报表工具Finereport的开发人员会发现其移动端app 同样也推出了很多js接口,那这些接口到底有多少,其移动端又有哪些地方支持调用js,这些接口具体又该如何调用呢.根据我平时的开发经验,给大 ...
-
Html标签第一课
<p>段落标签</p> <h1>字体标签,1到6,越来越小</h1>.....<h6></h6><h>标签自动换行 ...
-
PHP Redis 全部操作方法
Classes and methods Usage Class Redis Class RedisException Predefined constants Class Redis Descript ...
-
Backup: Date and Time in Perl6
时间 Date #Operators ==, <, <= , >, >=, !=, eq, lt, le # Methods $date = Date.new(YEAR, MO ...
-
N皇后问题2
Description Examine the checkerboard below and note that the six checkers are arranged on the board ...
-
HTTP层 &mdash;&mdash; 请求
1.访问请求实例 要通过依赖注入获取当前 HTTP 请求实例,需要在控制器的构造函数或方法中对 Illuminate\Http\Request 类进行类型提示,这样当前请求实例会被服务容器自动注入: ...
-
perl学习(9) 实例:取出操作时间最长的100个记录
需求描述: 日志记录了一次操作的时间,即server端接收包到发送结果到client端的时间,取出操作时间最长的100个记录. 日志信息片段: [2013-09-13 15:23:50,445.500 ...
-
利用反射动态从程序集dll执行方法和属性
程序结构: //获取程序集 Assembly asb = Assembly.LoadFrom(path);//path为程序集的物理路径 //获取程序集下面的Student类 Type documen ...
-
【BZOJ1216】操作系统(堆,模拟)
[BZOJ1216]操作系统(堆,模拟) 题面 题目描述 写一个程序来模拟操作系统的进程调度.假设该系统只有一个CPU,每一个进程的到达时间,执行时间和运行优先级都是已知的.其中运行优先级用自然数表示 ...
-
【Android Studio安装部署系列】四十二、Android Studio使用Eclipse中的keystore为App签名
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 从eclipse迁移到AndroidStudio,要用原Eclipse的签名文件,这样才能保证转到AndroidStudio后更新的 ...