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 # 如果找到,设置标志位为True
cart.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}")
今天的分享就到这里了,希望能够帮助到大家~