老男孩python学习之作业一购物小程序
想学编程由来已久
始终没有个结果,痛心不已
如今再次捡起来,望不负期望,不负岁月
......一万字的废话......
先介绍一下我的自学课程吧
“路飞学城”的《python开发21天必备》
屌丝一个嘛,所以找了免费的课程
课程虽然免费,做的出奇好,佩服,尤其是课间鸡汤,屌的一笔
特别期望可以报个付费的玩玩,那一定乐趣无穷啊
决定学习python,也是因为它和人工智能沾上了,而且入门简单
所以,不要怕


就这,感觉很简单嘛,呵呵大

- 要用到列表的创建,循环,打印列表索引和,为列表添加指定元素
- Input()函数的使用,与用户的交互,判断输入的内容是数字,字符串或者其他
- 变量的赋值和计算
- 操作符的使用,也可以使用格式化操作符
- 循环条件语句,while ,if ,for ,break结束语句
是不是很简单?
做一下吧!?要不再加一个需求,那样才有趣

- l 用户可以选择将购物车里的商品按照已购买列表编码删除任意一个商品
- l 用户可以一直删除,用户不想删除了,可以选择继续购物,退出时,打印购物车商
品列表
赖皮,这分明是两个要求吗?
就这样,我从晚上八点玩到凌晨两点,没搞定,呵呵哒,然后十点起床,十一点半,搞定!
一共用了差不多半天,可能是中间睡了一觉,灵感就来了,大脑真神奇,你要给他时
间,他会给你答案,这中间就是不断地尝试,错误,寻找错误,在尝试,错误,不断地寻
找,不断地修改。我想说的就是,在你到达成功的路上不要放弃,相信你自己,可以做到的。

- 变量的修改,删除指定元素
- 多层循环嵌套(困难在这,难为死小白了,但是灵感来了,就觉得很简单,特别好写)
下面,来看看这个困难到底是什么吧?建议:如果你还没有练习过,在读完这句话之后,先去
尝试自己解决,在十个小时后还不能解决。在来看下面的方案,这样对你才是最大的帮助!
>>确
>>定
>>要
>>看
>>了
>>吗
>>?
>>que
>>ding
>>yao
>>kan
>>le
>>ma
>>?
>>确
>>定
>>要
>>看
>>了
>>吗
>>?
>>que
>>ding
>>yao
>>kan
>>le
>>ma
>>?
>>确
>>定
>>要
>>看
>>了
>>吗
>>?
>>que
>>ding
>>yao
>>kan
>>le
>>ma
>>?
>>are
>>you
>>sure
>>?
>>
>>
>>

最终解决方案:每一层while 循环设立一个flag,在需要结束的同层循环下去设定flag的反值
看了,是不是很简单,能想出来,能实现还是很快乐的。不知道有没有更好的方法,肯定有,但是实力有限了。

1.交互,输入工资(有输入)
1.1.工资输入正确
2.查看商品列表
2.1.交互,选择商品列表编号(有输入)
3.添加商品到购物车
3.1.不要了,退出购物(输入Q退出)
4.交互,选择结账退出/删除商品(有输入)
5.结账退出(输入s退出)
5.1删除商品(输入d)
6.交互,选择删除购物车商品(有输入)
7.1.删除选中的商品
7.2.不删了,退出(输入Q)
8.交互,选择是结账还是继续购买商品(有输入)
9.进入选择商品循环2.1
9.1.结账退出(输入s退出)
6.1.购物车空了,请先购买
7.进入选择商品循环2.1
6.2.输入错误,请重新输入
4.1输入错误
2.2.商品价格大于工资,重新输入
2.3.输入编码不对,如:不在列表中
1.2.工资输入错误,如:不是数字

下面分享出来,我在错误中的学习。有些特别幼稚,有些是新知识,希望可以帮助到你
在错误中学习:
- 好多次错将 == 当做 = 使用,浪费了很多时间;
- 标志位只有两种形态,Ture 和Flase 。错误的将标志位flag=1.这样其实等同于flag=Ture,Flase和Ture是bool类型,而数字1是int类型,浪费了很多时间
- 不知道为什么没有按照自己的想法运行,最好能够把相关代码Debug一下,不要觉得很麻烦,其实这样比你自己一遍遍运行,看代码方便的多,可以省下很多眼力,体力和时间
- shift+Tab 取消缩进(百度到的)
- 循环应该是一个可以完成的闭环,刚开始创建了4个并列的循环,想当然的以为可以通过jump(跳跃)解决问题,然而并不能。
写累了,上代码
100都累的不行,很多重复的代码,如果可以用定义函数,整个代码就会简介很多,写好了,再发上来吧
goods_list = [['中性笔',5],['小米手机',1799],['NIKE鞋',488],['衬衫',277],['表',277],['包',399],['电脑',7999]]
choices_list = [] #定义购物车
flag_m = True
flag = True
flag_2 = True
flag_3 = True
flag_4 = True while flag_m == True:
your_money = input("请输入你的工资>>")
if your_money.isdigit():
your_money= int(your_money) while flag == True:
flag_2 = True #重新确定标志位,开始购物循环
flag_3 = True
flag_4 = True
print('------商品列表------') #打印商品列表
for index, i in enumerate(goods_list):
print(index, i[0], '', i[1])
print('------- END -------')
choice = input('请输入您要购买的商品编号(退出输入q)>>')
if choice.isdigit(): #判断用户输入是不是数字
if 0 <= int(choice) < len(goods_list): #判断是数字,并且数字在列表范围内
if your_money >= goods_list[int(choice)][1]: #判断用户工资的钱够不够买选择的商品
choices_list.append(goods_list[int(choice)]) #加入购物车
your_money =your_money- goods_list[int(choice)][1] #扣款
print('您的余额:',your_money) #显示余额
print('------购物车------')
for index,i in enumerate(choices_list):
print(index, i[0], '', i[1])
else: #钱不够,提示重新选择
print('您的余额不足,请重新选择!')
else: #数字不对,提示重新输入
print('您输入的编号不在列表中,请重新输入。')
elif choice == 'q': #退出购物循环
if len(choices_list) > 0:
print('您的余额:',your_money)
print('------购物车------')
for index, i in enumerate(choices_list):
print(index, i[0], '', i[1])
print('-------- END --------')
while flag_2 == True: #进入结账或者删除商品循环
s = input('结账(s)/去掉几个(d)')
if s == 's':
print('感谢惠顾,欢迎下次再来!')
flag = False #终止所有循环
flag_2 = False
flag_3 = False
flag_4 = False
flag_m = False
elif s == 'd': #进入删除商品循环
while flag_3 == True:
if len(choices_list) > 0:
print('您的余额:', your_money) # 显示余额
print('------购物车------')
for index, i in enumerate(choices_list):
print(index, i[0], '', i[1])
del_choice = input('请输入您不想要的商品的编号(输入q退出)>>')
if del_choice.isdigit():
del_choice = int(del_choice)
if 0 <= del_choice < len(choices_list):
your_money = your_money + choices_list[del_choice][1]
del choices_list[del_choice]
else:
print('您输入的编号不在列表中,请重新输入。')
elif del_choice == 'q': #退出删除商品循环
if len(choices_list) > 0:
print('您的余额:', your_money)
print('------购物车------')
for index, i in enumerate(choices_list):
print(index, i[0], '', i[1])
print('-------- END --------')
while flag_4 == True: #进入结账或者继续购买循环
s_0 = input('结账(s)/继续购买(b)')
if s_0 == 's':
print('感谢惠顾,欢迎下次再来!')
flag = False #终止所有循环
flag_2 = False
flag_3 = False
flag_4 = False
flag_m = False
elif s_0 == 'b': #终止内循环,开始第一层购买循环
flag = True
flag_2 = False
flag_3 = False
flag_4 = False
# break
else:
print('输入错误!')
else:
print('请输入正确的商品列表编号')
else:
print('您的购物车已经空了,请添加商品!')
flag_2 = False
flag_3 = False
break else:
print('输入错误')
else:
print('您没有购物')
print('您的余额:', your_money)
flag_m = False
flag = False
else: #其他输入提示
print('请输入正确的商品列表编号')
else:
print("输入错误!")
老男孩python学习之作业一购物小程序的更多相关文章
- 老男孩python学习之作业二---三级菜单
因为之前花力气完成了购物小程序的作业 现在做这个三级菜单简直是so easy!! 1.显示省级菜单 2.交互,提示用户输入要查看的省份(退出e) 2.1.用户正确输入列表中的省份 3.显示市级菜单 3 ...
- python学习day4--python基础--购物小程序
'''购物小程序:用户启动时先输入工资用户启动程序后打印商品列表允许用户选择购买商品允许用户不断购买各种商品购买时检测余额是否够,如果够直接扣款,否则打印余额不足允许用户主动退出程序,退出时打印已购商 ...
- Python学习day5作业
目录 Python学习day5作业 ATM和购物商城 1. 程序说明 2. 基本流程图 3. 程序测试帐号 4. 程序结构: 5. 程序测试 title: Python学习day5作业 tags: p ...
- 记录Python学习中的几个小问题
记录Python学习中的几个小问题,和C#\JAVA的习惯都不太一样. 1.Django模板中比较两个值是否相等 错误的做法 <option value="{{group.id}}&q ...
- Python 练习冊,每天一个小程序
Python 练习冊,每天一个小程序 说明: Github 原文地址: 点击打开链接 Python 练习冊.每天一个小程序.注:将 Python 换成其它语言,大多数题目也试用 不会出现诸如「 ...
- 20180821 Python学习笔记:如何获取当前程序路径
20180821 Python学习笔记:如何获取当前程序路径 启动的脚本的路径为:D:\WORK\gitbase\ShenzhenHouseInfoCrawler\main.py 当前脚本的路径为:D ...
- 京东购物小程序 | Taro3 项目分包实践
背景 京东购物小程序作为京东小程序业务流量的主要入口,承载着许多的活动和页面,而很多的活动在小程序开展的同时,也会在京东 APP 端进行同步的 H5 端页面的投放.这时候,一个相同的活动,需要同时开发 ...
- Python编写购物小程序
购物车要求: 用户名和密码存放于文件中 启动程序后,先登录,登录成功则让用户输入工资,然后打印商品列表,失败则重新登录,超过三次则退出程序 允许用户根据商品编号购买商品 用户选择商品后,检测余额是否够 ...
- 用python 实现录入学生作业情况的小程序
写一个录入学生作业情况的一个程序 1.查看学生作业情况 2.录入学生作业情况 3.可以让输入3次,需要为空的情况 homeworks = { ‘张流量’: {‘2018.3.22’:”未交”,’201 ...
随机推荐
- MYSQL汇总
一.1.1 MYSQL 一.1.1.1 基础特性 1)性能卓越,服务稳定,很少出现异常宕机: 2)开放源代码且无版权制约,自主性强,使用成本低: 3)历史悠久,社区及用户非常活跃,遇到问题,可快速获得 ...
- 标准mysql(x64) Windows版安装过程
mysql x64不提供安装器,不提供安装器,不提供安装器-- 每次查英文文档有点慢,不够简. 5.7.6以后的64位zip包下载后解压是没有data目录的. 进入解压后的bin目录:(我用的powe ...
- 分享Java开发的利器-Lombok
译注:Lombok是一个很老的项目了,也非常实用,但奇怪的是这么多年来似乎一直不温不火.很多Lombok特性可以参考它的官网介绍哈.兄弟连教育在这里只是简单介绍一下它的基础功能. Lombok是一个旨 ...
- macOS下利用dSYM文件将crash文件中的内存地址转换为可读符号
一.使用流程 Windows下的程序运行崩溃时,往往可以利用pdb文件快速解析出程序崩溃的具体位置,甚至可以对应到源代码的具体行数.macOS下的symbolicatecrash也具备相应的功能.对应 ...
- thinkphp3.2-更改控制器名后找不到相应的表?报1146的错
用tp在做着自己的小系统的时候,明明在刚才还是能好好地查到表的,在Service用了'D'方法连自己数据库的表,只是更改了自己的控制器名,却报错了... 我就纳闷了,虽然我的控制器和Service用的 ...
- C++单例模式的经典实现(Singleton)
C++单例经典实现 本文主要介绍C++使用中的单例的两种经典实现,基本可满足一般的使用,主要分为饿汉模式和懒汉模式两种 饿汉模式 class Singleton { public: static Si ...
- postman简单教程,使用tests模块来验证接口时是否通过
接口测试醉重要的就是返回数据的检查,一个简单的接口,我们可以肉眼检查返回数据,但接口一旦多起来且复杂,每次的检查都会很费劲,此时我们就需要postman 的tests模块来代替 概念: Postman ...
- java必学的5种排序算法
第一种冒泡排序 第二种 选择排序 第三种.插入排序
- SpringAOP-JDK 动态代理和 CGLIB 代理
在 Spring 中 AOP 代理使用 JDK 动态代理和 CGLIB 代理来实现,默认如果目标对象是接口,则使用 JDK 动态代理,否则使用 CGLIB 来生成代理类. 1.JDK 动态代理 那么接 ...
- 冲刺NO.9
Alpha冲刺第九天 站立式会议 项目进展 项目已完成模块的模块测试工作开始进行.如学生基本信息模块和学生信用信息模块. 问题困难 框架的掌握存在一定的问题,导致项目的执行速度变慢.其他课程的作业占据 ...