当前位置: 首页 > article >正文

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}")

今天的分享就到这里了,希望能够帮助到大家~


http://www.kler.cn/a/407648.html

相关文章:

  • 嵌入式硬件实战基础篇(二)-稳定输出3.3V的太阳能电池-无限充放电
  • 解锁生成式AI的真实价值:衡量ROI的12步框架
  • 如何利用ChatGPT加速开发与学习:以BPMN编辑器为例
  • 彻底理解消息队列的作用及如何选择
  • 如何进行Apache的配置与调试?
  • 如何给 Apache 新站点目录配置 SELinux ?
  • MS16-075(烂土豆)
  • Selenium+Java(19):使用IDEA的Selenium插件辅助超快速编写Pages
  • Windows11笔记本装windows10
  • PCA9685的配置学习
  • 计算机网络期末试题及答案(整理)
  • 聚焦AI存储,联想凌拓全力奔赴
  • Mysql的事务隔离机制及其脏读、不可重复读、幻读
  • Jvm知识点
  • 09 —— Webpack搭建开发环境
  • web-03
  • 【数据结构-表达式解析】【hard】力扣224. 基本计算器
  • python中的map、split、join函数的作用 => ACM输入输出流
  • 机器翻译 数据集 (NLP基础 - 预处理 → tokenize → 词表 → 截断/填充 → 迭代器) + 代码实现 —— 笔记3.9《动手学深度学习》
  • 从零开始配置Qt+VsCode环境
  • 图的邻接矩阵和邻接表存储
  • 常见协议及其功能
  • c++ chrono 时间统计
  • 11.22 日校内模拟赛总结 + 题解(矩阵加速dp, 分块)
  • 【论文速读】| RobustKV:通过键值对驱逐防御大语言模型免受越狱攻击
  • vue3中如何上传文件到腾讯云的桶(cosbrowser)