内容包含
主要是对python函数之前的一个复习整合和综合利用。
1.通过创建和维护Python购物车程序实验,验证字符串、列表、字典、元组以及集合等对象的使用方法。
2.加深对Python基本数据类型的理解
3.掌握正确使用Python数据类型进行编程的操作技能
难点
1.符字串、列表、字典、元组以及集合等对象的使用场景
2.Python数据类型的综合使用
实现内容
创建购物车程序
使用列表维护购物车
使用字典模拟商品对象,商品对象包含商品名称、商品价格属性
将商品添加到购物车,可以修改购物车程序、添加商品到购物车,修改购物车商品数量等操作。
实现思路
步骤
定义变量,存放商品信息的容器、工资收入、已经下单的商品信息
通过循环分析存放商品信息的容器
(1) 显示商品详情
(2) 根据用户的选择进行购物
① 若是选择0,就退出循环
② 若是选择编号与商品编号不吻合,结束本次循环之前,给出提示
③ 否则,进行正常的购物操作,获得商品的名字和价格,并进行后续的操作,包括
a、薪资 ≥ 商品价格,薪资减去商品价格,已下单的容器中增加一个商品信息
b、薪资 < 商品价格,给出提示
c、薪资 = 0,给出提示
显示用户购物车中全部商品的信息
效果展示
录入工资以及显示商品信息
录入所选商品编号、显示余额
选择0,退出程序
退出程序、显示购物车商品信息
退出系统,显示退出信息
代码实现
1.定义容器,存储商城商品的信息
goods_shop={
1:('草莓蛋糕',20),
2:('巧克力棒',5),
3:('蛋糕礼包',80)
这里定义了一个字典,我设置3个key,也就是三种商品,括号内是我后来想调用的value。
2.从控制台动态接收客户的银行存款余额信息
qian=int(input("请输入你的银行存款:"))
这串代码较为简单,就不解释了
3.定义容器,存储所购买的一些商品信息(-> 模拟的是:进入商城,推着购物车准备存放一些货品)
gouwuche={}
定义了一个空字典,后面有用。
4.通过循环,来模拟客户进入商城购物的情形
while True:
(1) 显示商城中的商品信息
print('-'*50+"欢迎来到蛋糕小店"+'-'*50)
print('商品编号\t\t商品名\t\t售价')
for id in goods_shop:
goods_name=goods_shop[id][0]
goods_price=goods_shop[id][1]
print(f"{id}\t\t{goods_name}\t\t{goods_price}")
前两行print是为了美观便于理解后续显示内容,id是定义一个变量,为了遍历输出商店里的货品,goods_name和goods_shop是为了显示商品价格和名称,f" "方法算是python中较为方便显示变量的一种方式。
(2)从退控制台动态接收用户所选购的商品的编号(0->出)
user_choice = int(input("请录入您所选购的商品的编号(若是选择0,则退出商城):"))
all_goods_num=list(goods_shop.keys())
这边我把goods_shop字典中的key值转换成list存储起来,便于后续循环使用。
(3) 动态根据用户选择的商品编号,进行购物操作 ①若用户选择为0,就退出循环 ②若用户选择的商品编号不在本商城所出售的商品之内,给出提示,重新选择 ③进行正常购物 a) 若银行卡余额 ≥ 商品的售价,正常购物(修改银行存款余额,将选购的商品添加到购物车中) b) 若银行卡余额 < 商品的售价,给出提示
if user_choice ==0:
print("离开商城了~~~~~~~~~~~~~~~~~~~")
break
elif user_choice not in all_goods_num:
print(f"您输入的商品编号{user_choice}不在{all_goods_num}中,是不是搞错了?(请重新输入)")
else:
select_goods_shop=goods_shop[user_choice]
name= select_goods_shop[0]
price= select_goods_shop[1]
if qian >= price:
qian-=price
if name in gouwuche:
ouwuche[name] += 1
print(f'您本次所选购的商品的售价是【{price}】元!您的存款余额还剩【{qian}】元')
else:
gouwuche[name]=1
print(f'您本次所选购的商品的售价是【{price}】元!您的存款余额还剩【{qian}】元')
else:
print(f'目前,您的银行存款余额是【{qian}】元,小于商品的售价【{price}】元,不能正常购物了!')
当user_choice==0时,输出离开商场,break跳出程序,如果user_choice输入的内容不在all_goods_nums中,print(f"您输入的商品编号{user_choice}不在{all_goods_num}中,是不是搞错了?(请重新输入)")这种提示字符,只有当user_choice输入的内容在我们预期之中才会进行下一步操作,也就是进入else中,进入else先重新定义一个量,来储存之前定义的内容,这样做是为了防止程序出现bug,然后进行if判断存款与商品价格的关系进行一系列操作,钱够的话则会进行与gouwuche这个字典的关联,从而实现将商品添加进gowuche。
5.显示购物车中所选购的商品信息
if len(gouwuche) >= 1:
print("\n购物车中您所选购的所有商品信息如下所示")
print("商品名\t\t\t件数")
print("_" * 25)
for name in gouwuche:
print(f"{name}\t\t\t{gouwuche[name]}")
print()
这里就是简单遍历输出gouwuche中的内容
# 6.给出友好提示 print("\n谢谢您使用本系统!欢迎下次光临回顾!^_^\n")
总代码
# 1.定义容器,存储商城商品的信息 (-> 模拟的是:浏览某商城官网,在首页显示各种商品信息)
goods_shop={
1:('草莓蛋糕',20),
2:('巧克力棒',5),
3:('蛋糕礼包',80)
}
# 2.从控制台动态接收客户的银行存款余额信息
qian=int(input("请输入你的银行存款:"))
# 3.定义容器,存储所购买的一些商品信息(-> 模拟的是:进入商城,推着购物车准备存放一些货品)
gouwuche={}
# 4.通过循环,来模拟客户进入商城购物的情形
while True:
# (1) 显示商城中的商品信息
print('-'*50+"欢迎来到蛋糕小店"+'-'*50)
print('商品编号\t\t商品名\t\t售价')
for id in goods_shop:
goods_name=goods_shop[id][0]
goods_price=goods_shop[id][1]
print(f"{id}\t\t{goods_name}\t\t{goods_price}")
# (2) 从退控制台动态接收用户所选购的商品的编号(0->出)
user_choice = int(input("请录入您所选购的商品的编号(若是选择0,则退出商城):"))
all_goods_num=list(goods_shop.keys())
# (3) 动态根据用户选择的商品编号,进行购物操作
# ①若用户选择为0,就退出循环
# ②若用户选择的商品编号不在本商城所出售的商品之内,给出提示,重新选择
# ③进行正常购物
# a) 若银行卡余额 ≥ 商品的售价,正常购物(修改银行存款余额,将选购的商品添加到购物车中)
# b) 若银行卡余额 < 商品的售价,给出提示
if user_choice ==0:
print("离开商城了~~~~~~~~~~~~~~~~~~~")
break
elif user_choice not in all_goods_num:
print(f"您输入的商品编号{user_choice}不在{all_goods_num}中,是不是搞错了?(请重新输入)")
else:
select_goods_shop=goods_shop[user_choice]
name= select_goods_shop[0]
price= select_goods_shop[1]
if qian >= price:
qian-=price
if name in gouwuche:
ouwuche[name] += 1
print(f'您本次所选购的商品的售价是【{price}】元!您的存款余额还剩【{qian}】元')
else:
gouwuche[name]=1
print(f'您本次所选购的商品的售价是【{price}】元!您的存款余额还剩【{qian}】元')
else:
print(f'目前,您的银行存款余额是【{qian}】元,小于商品的售价【{price}】元,不能正常购物了!')
# 5.显示购物车中所选购的商品信息
if len(gouwuche) >= 1:
print("\n购物车中您所选购的所有商品信息如下所示")
print("商品名\t\t\t件数")
print("_" * 25)
for name in gouwuche:
print(f"{name}\t\t\t{gouwuche[name]}")
print()
# 6.给出友好提示
print("\n谢谢您使用本系统!欢迎下次光临回顾!^_^\n")
代码更新
def init_shop():
global goods_shop
goods_shop={
1:('草莓蛋糕',20),
2:('巧克力棒',5),
3:('蛋糕礼包',80)
}
def init_qian():
global qian
qian=int(input("请输入你的银行存款:"))
def init_gowuche():
global gouwuche
gouwuche={}
def list_mall_infos():
global goods_shop
print('-'*50+"欢迎来到蛋糕小店"+'-'*50)
print('商品编号\t\t商品名\t\t售价')
for id in goods_shop:
goods_name=goods_shop[id][0]
goods_price=goods_shop[id][1]
print(f"{id}\t\t{goods_name}\t\t{goods_price}")
def begin_shopping():
global qian
while True:
list_mall_infos()
user_choice = int(input("请录入您所选购的商品的编号(若是选择0,则退出商城):"))
all_goods_num=list(goods_shop.keys())
if user_choice ==0:
print("离开商城了~~~~~~~~~~~~~~~~~~~")
break
elif user_choice not in all_goods_num:
print(f"您输入的商品编号{user_choice}不在{all_goods_num}中,是不是搞错了?(请重新输入)")
else:
select_goods_shop=goods_shop[user_choice]
name= select_goods_shop[0]
price= select_goods_shop[1]
if qian >= price:
qian-=price
if name in gouwuche:
gouwuche[name] += 1
print(f'您本次所选购的商品的售价是【{price}】元!您的存款余额还剩【{qian}】元')
else:
gouwuche[name]=1
print(f'您本次所选购的商品的售价是【{price}】元!您的存款余额还剩【{qian}】元')
else:
print(f'目前,您的银行存款余额是【{qian}】元,小于商品的售价【{price}】元,不能正常购物了!')
# 5.显示购物车中所选购的商品信息
def show_gouwuche():
if len(gouwuche) >= 1:
print("\n购物车中您所选购的所有商品信息如下所示")
print("商品名\t\t\t件数")
print("_" * 25)
for name in gouwuche:
print(f"{name}\t\t\t{gouwuche[name]}")
print()
# 6.给出友好提示
def bye():
print("\n谢谢您使用本系统!欢迎下次光临回顾!^_^\n")
init_shop()
init_qian()
init_gowuche()
begin_shopping()
show_gouwuche()
bye()
对代码进行了改善,改成用函数进行调用,会降低阅读难度。
定义了几个函数,
init_shop() init_qian() init_gowuche() list_mall_infos() begin_shopping() show_gouwuche() bye()
这样解答可能更加方便。
init_shop()
def init_shop():
global goods_shop
goods_shop={
1:('草莓蛋糕',20),
2:('巧克力棒',5),
3:('蛋糕礼包',80)
}
这里将这个定义成函数,同时global将goods_shop变成全局变量。
init_qian()、init_gowuche()
def init_qian():
global qian
qian=int(input("请输入你的银行存款:"))
def init_gowuche():
global gouwuche
gouwuche={}
将这两个变成函数同时变成全局变量。
list_mall_infos()
def list_mall_infos():
global goods_shop
print('-'*50+"欢迎来到蛋糕小店"+'-'*50)
print('商品编号\t\t商品名\t\t售价')
for id in goods_shop:
goods_name=goods_shop[id][0]
goods_price=goods_shop[id][1]
print(f"{id}\t\t{goods_name}\t\t{goods_price}")
首先调用全局变量,将打印商品的货架变成一个函数。
begin_shopping()
def begin_shopping():
global qian
while True:
list_mall_infos()
user_choice = int(input("请录入您所选购的商品的编号(若是选择0,则退出商城):"))
all_goods_num=list(goods_shop.keys())
if user_choice ==0:
print("离开商城了~~~~~~~~~~~~~~~~~~~")
break
elif user_choice not in all_goods_num:
print(f"您输入的商品编号{user_choice}不在{all_goods_num}中,是不是搞错了?(请重新输入)")
else:
select_goods_shop=goods_shop[user_choice]
name= select_goods_shop[0]
price= select_goods_shop[1]
if qian >= price:
qian-=price
if name in gouwuche:
gouwuche[name] += 1
print(f'您本次所选购的商品的售价是【{price}】元!您的存款余额还剩【{qian}】元')
else:
gouwuche[name]=1
print(f'您本次所选购的商品的售价是【{price}】元!您的存款余额还剩【{qian}】元')
else:
print(f'目前,您的银行存款余额是【{qian}】元,小于商品的售价【{price}】元,不能正常购物了!')
# 5.显示购物车中所选购的商品信息
调用全局变量qian,里面循环部分也调用了之前定义的函数list_mall_infos来打印货架。
show_gouwuche()
def show_gouwuche():
if len(gouwuche) >= 1:
print("\n购物车中您所选购的所有商品信息如下所示")
print("商品名\t\t\t件数")
print("_" * 25)
for name in gouwuche:
print(f"{name}\t\t\t{gouwuche[name]}")
print()
打印购物车里面的东西。
bye()
退出的提示语。
总结
对知识理解即可