题目
运用python中的list
、tuple
等知识编写一个购物车程序,要求如下:
- 进入程序用户首先输入工资总额
- 显示商品列表,含编号、商品、价格等参数
- 用户输入编号,若余额充足则直接购买,否则提示余额不足
- 可多次购买并且可随时退出
- 退出前打印购物清单
流程图
主要功能
显示菜单
- 就是用
for
循环打印商品清单元组goods
。考虑到菜单的排版以及要将编号加进去,我首先想到的是两层循环:
def menu():
print('\n编号','商品',' 价格')
for i in range(goods.__len__()):
print('\n', i + 1,'、', end = '')
for j in range(2):
print(goods[i][j],' ', end = '')
print('\n 0 、退出')
n = int(input('请输入想要购买的商品的编号:'))
return n
效果如下:
因为有C语言的基础,惯性思维就想到了两层循环,但是这不符合python的风格,不够简单粗暴!
- 通过网上查资料,我找到了python的解决方法,只需要一层循环!
def menu():
print('\n编号','商品','价格')
for i,(j, k) in enumerate(goods):
print(i+1, j, k)
print('0 退出')
n = int(input('请输入想要购买的商品的编号:'))
return n
效果如下:
这种方法用到了多个变量的for
循环,其中enumerate()
函数的作用是在列表(可迭代的数据类型)中的每个元素前面添加一个索引值,如下所示:
name = (('a', 100), ('b', 50),('c',200))
for i in enumerate(name):
print(i)
购买商品
购买功能很简单,主要是判断价格与余额(我把while
循环模块放在主框架了),若购买成功则计算余额和编辑已买商品列表goods_bought
。
def buy(n):
global BALANCE
if goods[n-1][1] <= BALANCE:
BALANCE = BALANCE - goods[n-1][1]
goods_bought.append(goods[n-1])
print('购买成功!花了{}元,余额为{}元'.format(goods[n-1][1], BALANCE))
else:
print('余额不足!价格为{}元,余额为{}元'.format(goods[n-1][1], BALANCE))
input('继续')
注:在函数内部修改全局变量赋值时,要用global
提前声明。
结账功能
退出时打印一份购物清单,注明总计消费和余额。功能类似menu
模块,不作赘述。
def balance():
print('\n购物清单:')
for i,(j,k) in enumerate(goods_bought):
print(i+1, j, k)
print('您一共消费{}元,您的余额{}元'.format(SALARY - BALANCE, BALANCE))
input('按任意键退出')
知识丶总结
这个购物车小程序是在刚学完列表、元组的时候编写的,通过完成这个题目,我不仅练习巩固了刚学的python语法,还扩展学习了一些实用的函数方法:
- 列表嵌套
- 字符串的
format()
格式化应用 - 多个变量的
for
循环,变量个数和列表元素对应 enumerate()
函数在列表(可迭代的数据类型)中的每个元素前面添加一个索引值,可用于for
循环。- 在函数内部修改全局变量赋值时,要用
global
提前声明。
源代码
https://github.com/artintZ/python/blob/master/day2/shopping.py