Python小白学习教程从入门到入坑------习题课5(基础巩固)
目录
实战题
1、“千年虫”是什么虫?
2、模拟京东购物流程
3、模拟12306火车票订票流程
4、模拟手机通讯录
实战题
1、“千年虫”是什么虫?
要求:已知一个列表中存储的是员工的出生年份 [88,89,90,98,00,99] 由于时间比较久,出生的年份均为2位整数,现需要2位年份前加19,如果年份是00,则需要加上200。
【参考示例1】:采用遍历列表的方式
lst = [88, 89, 90, 98, 00, 99] # 初始化列表,注意00在Python中等同于0
print(lst) # 输出原始列表:[88, 89, 90, 98, 0, 99]for index in range(len(lst)): # 遍历列表中的每一个元素# 判断当前元素转换为字符串后是否不等于'0'# 这里的比较存在问题,因为当元素为0(即原始列表中的00)时,str(lst[index])为'0'if str(lst[index]) != '0':# 如果不等于'0',则拼接'19'并重新赋值# 这里会导致列表元素从整数变为字符串lst[index] = '19' + str(lst[index])else:# 如果等于'0',则拼接'200'并重新赋值# 注意,由于00在Python中就是0,所以这种情况只会针对数字0发生lst[index] = '200' + str(lst[index]) # 实际上这里应写为'2000',因为'200' + '0'会得到'2000'# 输出修改后的列表,此时列表元素已全部变为字符串
print('修改后的年份列表:', lst)
输出内容:
[88, 89, 90, 98, 0, 99]
修改后的年份列表: ['1988', '1989', '1990', '1998', '2000', '1999']
【参考示例2】:使用enumerate() 函数
# 初始化一个列表,包含员工的两位整数出生年份。注意,Python中的整数00会被自动转换为0。
lst = [88, 89, 90, 98, 00, 99]# 打印原始年份列表
print(lst) # 使用enumerate函数遍历列表,enumerate会同时返回元素的索引(index)和值(value)
for index, value in enumerate(lst):# 将当前年份值转换为字符串,以便进行字符串比较# 注意,当原始列表中的年份为0(即00)时,value的值为0,str(value)的结果为'0'if str(value) != '0':# 如果年份值转换为字符串后不等于'0',则在该年份前拼接'19'lst[index] = '19' + str(value)else:# 如果年份值转换为字符串后等于'0'(即原始列表中的0或00)lst[index] = '200' + str(value) # 打印修改后的年份列表,此时列表中的元素已全部变为字符串类型
print('修改后的年份列表:', lst)
输出内容:
[88, 89, 90, 98, 0, 99]
修改后的年份列表: ['1988', '1989', '1990', '1998', '2000', '1999']
2、模拟京东购物流程
要求:从键盘录入5个商品信息(1001手机)添加到商品列表中,展示商品信息,提示用户选择商品,用户选中的商品添加到购物车中(购物车中的商品要逆序),用户选中的商品不存在需要有相应提示,当用户输入“q”时循环结束,显示购物车中的商品。
预期效果:
请输入商品的编号和商品的名称进行商品入库,每次只能输入一件商品:1001手机
请输入商品的编号和商品的名称进行商品入库,每次只能输入一件商品:1002水杯
请输入商品的编号和商品的名称进行商品入库,每次只能输入一件商品:1003电脑
请输入商品的编号和商品的名称进行商品入库,每次只能输入一件商品:1004猫粮
请输入商品的编号和商品的名称进行商品入库,每次只能输入一件商品:1005猫砂
1001手机
1002水杯
1003电脑
1004猫粮
1005猫砂
请输入要购买的商品编号:1003
商品已成功添加到购物车
请输入要购买的商品编号:1005
商品已成功添加到购物车
请输入要购买的商品编号:1009
商品不存在
请输入要购买的商品编号:1001
商品已成功添加到购物车
请输入要购买的商品编号:q
--------------------------------------------------
您的购物车里已选择的商品为:
1001手机
1005猫砂
1003电脑
【参考示例】:
# 创建一个空列表,用于存储入库的商品信息
lst = []
# 通过循环,让用户输入5次商品编号和名称,并存储在列表中
for i in range(5):goods = input('请输入商品的编号和商品的名称进行商品入库,每次只能输入一件商品:')lst.append(goods)# 输出所有的商品信息
for item in lst:print(item)# 创建一个空列表,用于存储购物车中的商品
cart = []
# 使用while循环来不断处理用户输入,直到用户选择退出
while True:flag = False # 初始化标志位,用于判断商品是否存在num = input('请输入要购买的商品编号(输入"q"退出购买):')# 遍历商品列表,检查用户输入的编号是否存在for item in lst:# 假设商品编号是前4个字符,根据这个假设进行切片操作if num == item[0:4]: flag = True # 如果找到,设置标志位为Truecart.append(item) # 将商品添加到购物车print('商品已成功添加到购物车')break # 找到后退出循环# 如果商品不存在且用户没有选择退出,提示商品不存在if not flag and num != 'q': print('商品不存在')# 如果用户输入"q",则退出购买循环if num == 'q':break # 输出分割线
print('-'*50)
# 输出购物车中的商品,注意这里对购物车列表进行了反转,可能是为了按输入顺序显示
print('您的购物车里已选择的商品为:')
cart.reverse()
for item in cart:print(item)
3、模拟12306火车票订票流程
要求: 假设北京到天津有以下4个车次可供选择,用户选择所要购买的车次,进行购票进站。、
预期效果:
车次 出发站-到达站 出发时间 到达时间 历时时长
G1569 北京南-天津南 18:06 18:39 00:33
G1567 北京南-天津南 18:06 18:40 00:34
G8917 北京南-天津西 18:32 19:01 00:29
G2034 北京南-天津南 19:06 19:44 00:38
请输入要购买的车次:G1567
请输入乘车人,如果是多位乘车人使用逗号分隔:小明,小红
您已购买了G1567 北京南-天津南 18:06开,请小明,小红尽快换取纸制车票。【铁路客服】进程已结束,退出代码 0
【参考示例】:
# 创建字典用于存储车票信息,使用车次作key,其它信息(出发站-到达站、出发时间、到达时间、历时时长)作value
dict_ticket = {'G1569': ['北京南-天津南', '18:06', '18:39', '00:33'],'G1567': ['北京南-天津南', '18:06', '18:40', '00:34'],'G8917': ['北京南-天津西', '18:32', '19:01', '00:29'],'G2034': ['北京南-天津南', '19:06', '19:44', '00:38'],
}# 打印车票信息的表头
print('车次 出发站-到达站 出发时间 到达时间 历时时长')# 遍历字典中的元素,并格式化打印每趟车次的信息
for key in dict_ticket.keys():# 拼接并打印当前车次的所有信息print(f"{key}\t\t{'\t\t'.join(dict_ticket[key])}")# 输入用户的购票车次
train_no = input('请输入要购买的车次:')# 根据车次获取车票信息,若不存在则返回'车次不存在'
info = dict_ticket.get(train_no, '车次不存在')# 判断车次是否存在,并处理用户输入
if info != '车次不存在':# 获取乘车人信息,支持输入多位乘车人(以逗号分隔)person = input('请输入乘车人,如果是多位乘车人使用逗号分隔:')# 拼接并格式化出发站-到达站及出发时间信息departure_info = f"{info[0]} {info[1]}开"# 打印购票成功信息print(f'您已购买了{train_no} {departure_info},请{person}尽快换取纸制车票。【铁路客服】')
else:# 打印车次不存在信息print('对不起,选择的车次可能不存在')
部分注释说明:
1、字典创建:dict_ticket 存储了车次及其相关信息(出发站-到达站、出发时间、到达时间、历时时长)
2、打印表头:print 语句用于打印车票信息的表头,清晰展示即将打印的车票信息格式
3、遍历字典并打印:使用 for 循环遍历字典中的每个键值对,并使用 join 方法将车票信息格式化为一行打印
4、用户输入车次:通过 input 函数获取用户想要购买的车次
5、根据车次获取信息:使用 dict.get() 方法根据车次获取相关信息,若车次不存在则返回'车次不存在'
6、处理用户输入:若车次存在,继续获取乘车人信息,并格式化出发站-到达站及出发时间信息,最后打印购票成功信息。若车次不存在,则打印车次不存在信息
4、模拟手机通讯录
要求:从键盘录入5位好友的姓名和电话,由于通讯录是无序的所以可以使用集合来实现。
预期效果:
请输入第1位好友的姓名: 小明
请输入小明的电话: xxxx111
请输入第2位好友的姓名: 小红
请输入小红的电话: 11xxxxx
请输入第3位好友的姓名: 小张
请输入小张的电话: 1x1x1x1
请输入第4位好友的姓名: 小王
请输入小王的电话: 1231xxx
请输入第5位好友的姓名: 小刘
请输入小刘的电话: 1221122通讯录:
姓名: 小明, 电话: xxxx111
姓名: 小红, 电话: 11xxxxx
姓名: 小张, 电话: 1x1x1x1
姓名: 小王, 电话: 1231xxx
姓名: 小刘, 电话: 1221122进程已结束,退出代码 0
【参考示例】:
# 初始化一个空字典来存储通讯录
contacts = {}# 从键盘录入5位好友的姓名和电话
for i in range(5):name = input(f"请输入第{i + 1}位好友的姓名: ")phone = input(f"请输入{name}的电话: ")# 将姓名和电话存入字典,如果姓名已存在则提示并跳过if name in contacts:print(f"警告: 通讯录中已存在名为{name}的好友,请重新输入一个不同的姓名。")else:contacts[name] = phone# 打印通讯录
print("\n通讯录:")
for name, phone in contacts.items():print(f"姓名: {name}, 电话: {phone}")
今天的分享就到这里了,希望能够帮助到大家~