Python基础-小程序练习(跳出多层循环,购物车,多级菜单,用户登录)
一、 从第3层循环直接跳出所有循环
break_flag = False
count = 0
while break_flag == False:
print("-第一层")
while break_flag == False:
print("第二层")
while break_flag == False:
count += 1
if count > 10:
break_flag = True
print("第三层")
print("keep going...")
with break_flag

# break_flag = False
count = 0
while count < 3:
print("-第一层")
while count < 3:
print("第二层")
while count <= 10:
count += 1
# if count > 10:
# break_flag = True
print("第三层")
print("keep going...")
without break_flag

二、 购物车程序
goods_list = [['Iphone7',5800],['Coffee',30],['Book',99],['Bike',199],['Vivi X9',2499]] #商品列表
shopping_cart = [] #用户购物车列表
salary = int(input('input your salary:')) #用户薪水
m = salary
k = 0 while True:
index = 0
for goods in goods_list: #打印商品列表
print(index,goods)
index += 1
choice = input('>>>:').strip()
if choice.isdigit():
choice = int(choice)
if choice >= 0 and choice < len(goods_list):
goods = goods_list[choice]
if goods[1] <= salary: #判断用户是否带了足够的钱来支付所选商品
shopping_cart.append(goods)
salary -= goods[1]
print('Add goods '+str(goods[0])+' into shopping cart! Your current balance:'+str(salary))
else:
print('No enough money!The price is:'+str(goods[1])+'! Need more:'+str(goods[1]-salary))
else:
print('Have no this goods!')
elif choice == 'q':
print('----------Your shopping cart----------')
print('ID goods quantity price total')
for i in range(len(goods_list)):
j = shopping_cart.count(goods_list[i])
if j > 0 :
k += 1
print(k,'\t',goods_list[i][0],'\t',j,'\t\t',goods_list[i][1],'\t',j * goods_list[i][1]) print('Total price is:',m - salary)
break
else:
print('Have no this goods')
购物车程序




goods_list = [['Iphone7',5800],['Coffee',30],['Book',99],['Bike',199],['Vivi X9',2499]] # 商品列表
shopping_cart = {} # 用户购物车列表从列表变为字典
salary = int(input('input your salary:')) # 用户薪水
# m = salary #不需要此项
# k = 0 #用户购物车商品打印ID,移动位置至打印循环外 while True:
index = 0
for goods in goods_list: # 打印商品列表
print(index, goods)
index += 1
choice = input('>>>:').strip()
if choice.isdigit(): # 判断是否为数字
choice = int(choice)
if choice >= 0 and choice < len(goods_list): # 商品存在
goods = goods_list[choice]
if goods[1] <= salary: # 判断用户是否带了足够的钱来支付所选商品
if goods[0] in shopping_cart: # 之前买过
shopping_cart[goods[0]][1] += 1 # 购物数量加1
else:
shopping_cart[goods[0]] = [goods[1], 1] # 创建一条新增商品的购买记录
salary -= goods[1] # 扣钱
print('Add goods ' + str(goods[0]) + ' into shopping cart! Your current balance:' + str(salary))
else:
print('No enough money!The price is:' + str(goods[1]) + '! Need more:' + str(goods[1] - salary))
else:
print('Have no this goods!')
elif choice == 'q':
id_counter = 1 # 初始化商品ID
total_cost = 0 # 初始化商品总花费
print('----------Your shopping cart----------')
print('ID goods quantity price total')
for i in shopping_cart:
print("%-5s%-10s%-12s%-10s%-s"
% (
id_counter, i, shopping_cart[i][1], shopping_cart[i][0],
shopping_cart[i][0] * shopping_cart[i][1]))
id_counter += 1 # 商品ID自加1
total_cost += shopping_cart[i][0] * shopping_cart[i][1] # 用户已购商品总花费
print('Total price is:', total_cost)
break
else:
print('Have no this goods')
购物车程序优化,使用字典
三、多级菜单
要求:
- 打印省、市、县三级菜单
- 可返回上一级(b,返回)
- 可随时退出程序(q,退出)
menu = {
'北京':{
'海淀':{
'五道口':{
'soho':{},
'网易':{},
'google':{}
},
'中关村':{
'爱奇艺':{},
'汽车之家':{},
'youku':{},
},
'上地':{
'百度':{},
},
},
'昌平':{
'沙河':{
'老男孩':{},
'北航':{},
},
'天通苑':{},
'回龙观':{},
},
'朝阳':{},
'东城':{},
},
'上海':{
'闵行':{
"人民广场":{
'炸鸡店':{}
}
},
'闸北':{
'火车战':{
'携程':{}
}
},
'浦东':{},
},
'山东':{},
}
exit_flag = False
current_layer = menu
layers = [menu]
while not exit_flag:
for k in current_layer:
print(k)
choice = input(">>:").strip()
if choice == "b":
current_layer = layers[-1]
#print("change to laster", current_layer)
layers.pop()
elif choice == 'q':
break
elif choice not in current_layer:
continue
else:
layers.append(current_layer)
current_layer = current_layer[choice]
四、用户登陆程序
需求:
- 最多允许用户尝试登陆3次
- 当同一用户名3次密码均不正确时,锁定该用户
with open('account',encoding='utf8') as f_account, open('lockedlist', 'a+') as f_locked:
l = [] #定义用户名验证列表,存放黑名单数据
f_locked.seek(0) #"a+"模式打开后,文件位置位于末尾,要遍历文件内容,需要将指针移至文件起始位置
for locked_info in f_locked.readlines(): #遍历黑名单
l.append(locked_info.strip()) #将黑名单数据添加进列表,注意:需要将文件中的换行符脱掉
c = [] #定义用户登录名列表,存储用户尝试的登录名
count = 1 #登陆次数计数器
flag = True #登陆循环控制开关
while flag and count < 4:
user = input('Please input username:') #输入用户名
pwd = input('Please input password:') #输入用户密码
if user in l: #用户名在黑名单中
print("This user is in blacklist,can't log in!") #打印提示信息
continue
c.append(user)
for info in f_account: #用户名不在黑名单中,遍历用户登陆文件
user_name, user_pwd = info.strip().split(',') #将文件中的用户名和登陆密码赋值给判定变量
if user == user_name: #用户名符合
if pwd == user_pwd: #对应密码符合
print('Welcome %s' % user) #打印登陆成功信息
flag = False #登陆成功,跳出登陆程序
break
count += 1 #对应密码不符合,while循环计数器加1
break
count += 1 #用户名不符合,while循环计数器加1
break
if count == 4: #如果不同用户名密码输错3次,关闭程序
print('More than 3 times wrong!') #打印提示信息
if len(c) == 3 and c[0] == c[1] == c[2]: #如果相同用户名密码输错3次,将该用户名加入黑名单,限制登陆
print('This user has been locked!')
f_locked.write(user+'\n') #将错误3次的用户名写入黑名单,注意,加换行符
用户登陆程序




Python基础-小程序练习(跳出多层循环,购物车,多级菜单,用户登录)的更多相关文章
- python中从内部循环直接跳出多层循环
学习循环的时候碰到一道题,需要从内部循环中直接跳出所有循环,想了很久终于想到一种好办法(小白认知) 题目为:使用while循环输出100-50,从大到小,到50时,再循环输出0-50,从小到大. ex ...
- 关于微信小程序如何解决多层循环嵌套
http://www.jianshu.com/p/87cdf985b2b9 附加:小程序里面一些功能示例 http://blog.csdn.net/column/details/13721.html
- python基础代码(猜年龄、从最内层跳出多层循环、简单的购物车程序)
1.猜年龄 , 可以让用户最多猜三次! age = 55 i=0 while i<3: user_guess = int (input ("input your guess:" ...
- python练习-跳出多层循环和购物车
跳出多层循环:三层循环,最里层直接跳出3层 在Python中,函数运行到return这一句就会停止,因此可以利用这一特性,将功能写成函数,终止多重循环 def work(): for i in ran ...
- python(3)- 循环语句:从最内层跳出多层循环
跳出多层循环:三层循环,最里层直接跳出3层 方法一: 在Python中,函数运行到return这一句就会停止,因此可以利用这一特性,将功能写成函数,终止多重循环 def work(): #定义函数 f ...
- 微信小程序-列表渲染多层嵌套循环
微信小程序-列表渲染多层嵌套循环 入门教程之列表渲染多层嵌套循环,目前官方的文档里,主要是一维数组列表渲染的案例,还是比较简单单一,给刚入门的童鞋还是无从入手的感觉. <view wx:for= ...
- Python基本小程序
目录 Python基本小程序 一.筛选从1-100所有的奇数 二.筛选从0-100所有的偶数 三.求1-100之间所有的偶数和,奇数和 四.三个数由小到大输出 五.四个数字重复数字的三位数 Pytho ...
- 一个python爬虫小程序
起因 深夜忽然想下载一点电子书来扩充一下kindle,就想起来python学得太浅,什么“装饰器”啊.“多线程”啊都没有学到. 想到廖雪峰大神的python教程很经典.很著名.就想找找有木有pdf版的 ...
- java的break跳出多层循环
记得大一的时候,语言学的不好,碰到了需要跳出双层循环的时候,就没有了办法.因为老师讲了goto然后说不要用goto... 自己就一直感觉这种跳出多层循环的想法是不可取的(好蠢) 下面用java代码的 ...
随机推荐
- 《软件工程综合实践专题》第三次作业——原型工具Axure RP8 的介绍
一.为什么使用Axure Axure RP是一个专业的快速原型设计工具. Axure RP已被一些大公司采用.Axure RP的使用者主要包括商业分析师.信息架构师.可用性专家.产品经理.IT咨询师. ...
- c++primer plus笔记
> 第六版 操作符重载 #include<iostream> using namespace std; class Time { public: Time() { h=m=0; } ...
- python学习,day1作业:设计一个三级菜单
设计一个三级菜单,要求能够下钻,能够推出,比较笨的方法 # coding=utf-8 # Author: RyAn Bi data = { 'beijing':{ 'changping':{ 'wud ...
- 【车联网T-BOX】基于CANoe实现的远程服务业务自动化测试方案
为满足项目过程中不同阶段绝大部分测试需求,更方便快捷构造测试场景,支持异常场景测试.更早介入,不依赖周边ECU的稳定情况,专注于被测ECU.更经济,不加油,不充电,时间节省,物料节省等维度考虑.我们需 ...
- Yii2 PHPExcel在linux环境下导出报500错误
断点调试后发现是因为这句报错 header('Content-Type : application/vnd.ms-excel');删除后正常输出下载
- vue学习(转载)
vue.js库的基本使用 第一步:下载 官网地址:https://cn.vuejs.org/v2/guide/installation.html 第二步:放到项目的文件目录下 一般新建一个js文件夹, ...
- linux gpasswd
gpasswd命令 功能:管理组用法:gpasswd[-a user][-d user][-A user,...][-M user,...][-r][-R]groupname参数:-a:添加用户到组- ...
- 如何在vue中请求本地json文件
1..修改webpack.base.conf.js 文件中添加'/static': resolve('static'),如下所示,此时存放于static的json文件就可以通过/static/xxx. ...
- 如何获取用户的地理位置? && html5 地理位置
推荐网站 https://html5demos.com/geo/ 我们有时候可能希望首先获得用户的地理位置,然后根据不同的地理位置(更具针对性地)推送不同的信息等等. 下面这段代码就可以在你有jQue ...
- elasticsearch安装及与springboot2.x整合
关于elasticsearch是什么.elasticsearch的原理及elasticsearch能干什么,就不多说了,主要记录下自己的一个使用过程. 1.安装 elasticsearch是用java ...