Python全栈(基础篇)——每日一练详解(day02~day05)
目录
day02 学生信息收集与展示系统
题目要求:
代码实现
代码讲解
day03 个人数字名片程序
题目要求:
代码实现
代码讲解
day04 学生信息管理系统
题目要求:
代码实现
代码讲解
day05 简易ATM机系统
题目要求:
代码实现
代码讲解
总结
📊 学习路径回顾
Day02 - 基础语法
Day03 - 格式化与运算
Day04 - 数据结构
Day05 - 项目实战
嘿,朋友们!👋
我是你们的学习伙伴,继续带着大家探索Python的奇妙世界!昨天我们深入学习了切片和迭代这两个强大的数据处理工具,今天我们要将前几天的每日一练讲解一下
如果你觉得我的讲解方式对你有帮助,或者喜欢我这种"把复杂变简单"的教学风格,欢迎来我的小窝坐坐~
我的技术博客:python全栈蛇行者-CSDN博客
那里有更多精心整理的学习笔记、实战项目,还有我在学习中踩过的坑和总结的经验。
专栏订阅也不容错过哦!我会持续更新这个Python全栈系列,从基础到实战,手把手带你走进编程的世界。订阅之后,新文章会第一时间推送到你面前,再也不用担心错过精彩内容啦!
好啦,让我们开始今天的学习之旅吧!
day02 学生信息收集与展示系统
题目要求:
请你创建一个学生信息收集与展示程序,要求使用今天学习的所有知识点。
程序需要完成以下功能:
-
信息收集:使用input()函数收集学生的以下信息:
-
学生姓名(字符串)
-
年龄(整数)
-
身高(浮点数,单位:米)
-
最喜欢的编程语言(字符串)
-
是否喜欢Python编程(输入"是"或"否")
-
-
数据处理:
-
将年龄从字符串转换为整数
-
将身高从字符串转换为浮点数
-
将是否喜欢Python转换为布尔值(输入"是"为True,否则为False)
-
-
信息展示:使用print()函数分块展示信息:
-
使用多行字符串展示学生基本信息
-
使用逗号分隔展示学习偏好
-
使用变量拼接展示完整信息
-
-
类型检查:使用type()函数检查每个变量的数据类型并输出
代码实现
# day02每日一练
print("=== 学生信息收集系统 ===")
name = input('请输入学生姓名: ')
age = int(input('请输入年龄: '))
height = float(input('请输入身高(米):'))
love = input('请输入最喜欢的编程语言:')
yn = input('是否喜欢Python编程(是/否):')
print("=== 学生信息展示 ===")
print("【基本信息】")
print(f'姓名:{name}')
print('年龄:%d' %age)
print('身高:{:.2f}'.format(height))
yn = True if yn == '是' else '否'
print('【学习偏好】')
print('最喜欢的编程语言:%s' %love)
print('喜欢Python编程:',yn)
print('【数据类型检查】')
print(f'姓名 的数据类型:{type(name)}')
print(f'年龄 的数据类型:{type(age)}')
print(f'身高 的数据类型:{type(age)}')
print(f'最喜欢的编程语言 的数据类型:{type(love)}')
print(f'是否喜欢Python 的数据类型:{type(yn)}')
代码讲解
输入收集模块:
-
使用
print()
函数显示系统标题,提供友好的用户界面 -
通过
input()
函数依次收集学生的姓名、年龄、身高、编程语言偏好等信息 -
对年龄和身高进行数据类型转换:
int()
将字符串转换为整数,float()
将字符串转换为浮点数 -
姓名和最喜欢的编程语言保持字符串类型,不需要转换
数据处理模块:
-
使用条件表达式
True if yn == '是' else '否'
将用户的是/否回答转换为布尔值 -
这种转换方式简洁高效,如果用户输入"是"则返回True,否则返回False
信息展示模块:
-
使用三种不同的字符串格式化方法展示信息:
-
f-string格式化:
f'姓名:{name}'
- 现代Python推荐的方式 -
%格式化:
'年龄:%d' %age
- 传统格式化方法 -
format方法:
'身高:{:.2f}'.format(height)
- 更灵活的格式化
-
-
分块展示信息,使用【】符号进行区块划分,提高可读性
类型检查模块:
-
使用
type()
函数检查每个变量的数据类型 -
通过f-string将类型信息嵌入到输出字符串中
-
帮助用户理解Python中不同数据类型的表示方式
day03 个人数字名片程序
题目要求:
综合运用今天学习的所有知识,创建一个个人数字名片程序。
名片包含信息:
-
基本信息:姓名、年龄、职业
-
联系方式:电话(数字)、邮箱
-
技能评分:编程能力(0-100)、英语水平(0-100)
-
特殊编码:个人ID(用二进制、八进制、十六进制表示年龄)
功能要求:
-
使用三种字符串格式化方法分别展示不同部分的信息
-
计算技能平均分
-
将年龄转换为不同进制显示
-
使用各种运算符进行简单的数据分析
-
格式化输出美观的名片
代码实现
# day03每日一练
name = input('请输入姓名:')
age = int(input('请输入年龄:'))
Occupation = input('请输入职业:')
telephone = input('请输入电话:')
email = input('请输入邮箱:')
# 编程能力
ProgrammingSkills = 85
English_proficiency = 78
print("="*25)
print(' 个人数字名片')
print("="*25)
print(f'姓名:{name}')
print(f'年龄:{age}(二进制:{age:b},八进制:{age:o},十六进制:{age:x})')
print(f'职业:{Occupation}')
print(f'电话:{telephone}')
print(f'邮箱:{email}')
print(f'编程能力:{ProgrammingSkills}分,英语水平:{English_proficiency}分')
print(f'技能平均分:{(ProgrammingSkills + English_proficiency)/2:.1f}分')
print("="*25)
代码讲解
数据输入模块:
-
使用
input()
函数收集用户的基本信息 -
对年龄进行
int()
转换,确保后续的数值运算和进制转换能够正常进行 -
技能评分在代码中直接赋值,实际应用中可以从用户输入获取
名片格式化模块:
-
使用
"="*25
创建分隔线,简洁美观 -
使用f-string格式化展示大部分信息,这是现代Python推荐的方式
-
在年龄展示中使用了格式化说明符:
-
{age:b}
- 将年龄转换为二进制表示 -
{age:o}
- 将年龄转换为八进制表示 -
{age:x}
- 将年龄转换为十六进制表示
-
技能计算模块:
-
使用算术运算符
+
和/
计算技能平均分 -
使用格式化
:.1f
保留一位小数,使输出更加专业 -
展示了基本的数值运算在字符串格式化中的应用
输出美化模块:
-
通过字符串重复操作符
*
创建统一的分隔线 -
使用空格进行文本居中对齐
-
整体布局清晰,信息层次分明
day04 学生信息管理系统
题目要求:
创建一个基础的学生信息管理系统,能够实现以下功能:
-
添加学生信息:输入学生姓名和成绩,将学生信息添加到系统中
-
查看学生信息:显示当前系统中所有学生的信息
-
成绩等级判断:根据学生成绩判断等级(优秀、良好、中等、及格、不及格)
-
系统统计:显示学生总数和平均分
具体要求:
-
使用列表存储学生信息,每个学生用元组表示(姓名,成绩)
-
使用条件判断实现成绩等级分类
-
使用成员运算符检查用户名是否存在
-
使用字符串方法验证输入的有效性
-
不使用函数、循环、字典等高级特性
代码实现
# day04每日一练
# 学生列表
Students = []
while True:print("""=== 学生信息管理系统 ===
1. 添加学生信息
2. 查看学生信息
3. 成绩等级判断
4. 系统统计
5. 退出
""")user_select = input('请输入你的选择:(1-5)')# 添加学生信息if user_select == '1':name = input('请输入学生姓名:')score = int(input('请输入学生成绩:'))# 添加到学生列表Students.append((name,score))print(f'添加成功:学生名称{name},分数{score}')# 查看学生信息elif user_select == '2':if Students:for Student in Students:print(f'姓名:{Student[0]},分数:{Student[1]}')else:print('暂无学生信息')# 成绩等级判断(优秀、良好、中等、及格、不及格)elif user_select == '3':name_look = input('请输入要查看的学生姓名:')if Students:for Student in Students:if name_look in Student:if Student[1] >= 90:Level = '优秀'elif Student[1] >= 80:Level = '良好'elif Student[1] >= 70:Level = '中等'elif Student[1] >= 60:Level = '及格'else:Level = '不及格'print(f'姓名:{name_look},成绩等级判断:{Level}')else:print('学生不存在')else:print('暂无学生信息')# 系统统计elif user_select == '4':# 计算平均分TotalScore = 0for Student in Students:TotalScore += Student[1]avg = TotalScore/len(Students)print(f'学生总数为:{len(Students)},平均分:{avg}')
elif user_select == '5':print('欢迎下次使用.....')breakelse:print('请重新输入!')
代码讲解
数据结构设计:
-
使用列表
Students
存储所有学生信息 -
每个学生信息用元组
(name, score)
表示,确保数据不可变性 -
这种设计简单有效,适合初学者理解列表和元组的基本用法
主循环控制:
-
使用
while True
创建无限循环,直到用户选择退出 -
通过多行字符串
"""
创建清晰的操作菜单 -
使用
if-elif-else
结构处理用户的不同选择
功能模块详解:
-
添加学生信息:
-
使用
input()
收集学生姓名和成绩 -
通过
Students.append((name,score))
将学生信息添加到列表 -
元组包装确保数据的完整性
-
-
查看学生信息:
-
首先检查列表是否为空
if Students:
-
使用
for
循环遍历所有学生信息 -
通过索引
Student[0]
和Student[1]
访问姓名和成绩
-
-
成绩等级判断:
-
使用
if-elif-else
链式条件判断实现五级评分 -
通过
in
运算符检查学生是否存在 -
成绩分段:90+优秀,80+良好,70+中等,60+及格,其他不及格
-
-
系统统计:
-
使用
len(Students)
获取学生总数 -
通过循环累加计算总分,再求平均分
-
展示基本的统计信息
-
错误处理:
-
检查列表是否为空,避免空列表操作错误
-
处理无效的用户输入,提供友好的提示信息
-
确保程序的健壮性
day05 简易ATM机系统
题目要求:
创建一个简单的ATM机模拟系统,实现基本的银行账户操作功能。
基本功能要求:
-
用户登录:输入账号和密码进行登录验证
-
余额查询:查看当前账户余额
-
存款功能:向账户存入金额
-
取款功能:从账户取出金额(需验证余额)
-
退出系统:安全退出ATM系统
数据存储要求:
-
使用字典存储用户账户信息
-
每个用户包含:账号、密码、余额
-
示例数据格式:
accounts = {'1001': {'password': '123456', 'balance': 5000},'1002': {'password': '111111', 'balance': 3000}
}
系统要求:
-
使用while循环实现主菜单
-
使用if-else进行条件判断
-
实现基本的输入验证
-
提供清晰的操作提示
代码实现
# day05每日一练
# 模拟数据库数据
accounts = {'1001': {'password': '123456', 'balance': 5000 ,'status':True, 'record':[]},'1002': {'password': '111111', 'balance': 3000 ,'status':True, 'record':[]}
}
# 密码错误计数
pwd_error_count = 0
# 最多输入错误密码次数
pwd_max_count = 5
# 主循环
while True:print("""
=== 欢迎使用ATM机系统 ===
请选择操作:
1. 用户登录
2. 用户注册
3. 退出系统""")user_select = input('请输入选择(1-3): ')# 登录模块if user_select == '1':user_name = input('请输入账号名:')# 判断用户是否存在if user_name in accounts:# 判断账号是否封禁if accounts[user_name]['status']:user_pwd = input('请输入账号密码:')# 判断密码是否正确if accounts[user_name]['password'] == user_pwd:print('登陆成功......')"""登陆成功后的逻辑处理"""while True:print("""
请选择操作:
1. 查看当前账号余额
2. 转账
3. 存款
4. 取款
5. 查看操作记录
6. 退出操作""")user_select_login = input('请输入需要的操作(1-6):')# 查看当前账号余额模块if user_select_login == '1':now_balance = accounts[user_name]['balance']print('当前余额为:%s' %now_balance)# 转账模块elif user_select_login == '2':now_balance = accounts[user_name]['balance']# 如果当前金额大于0可以进行转账if now_balance > 0:other_name = input('请输入对方账号名:')# 判断对方账号是否存在if other_name in accounts:# 判断对方账号是否封禁if accounts[other_name]['status']:transfer_balance = float(input('请输入转账金额:'))# 判断当前余额是否足够if transfer_balance > now_balance:print('转账金额大于当前剩余金额,操作失败')else:accounts[user_name]['balance'] -= transfer_balanceaccounts[other_name]['balance'] += transfer_balanceprint(f'成功向账号:{other_name},转账:{transfer_balance},剩余金额为:{accounts[user_name]['balance']}')# 将操作记录保存accounts[user_name]['record'].append(f'成功向账号:{other_name},转账:{transfer_balance},剩余金额为:{accounts[user_name]['balance']}')else:print('对方账号处于封禁状态,暂时无法进行转账')else:print('对方账号不存在')else:print('金额不足,无法进行转账操作')# 存款模块elif user_select_login == '3':deposit_select = float(input('请输入你需要存放的金额:'))accounts[user_name]['balance'] += deposit_selectprint(f'存款成功,存入金额为:{deposit_select},当前金额为:{accounts[user_name]['balance']}')# 将操作记录保存accounts[user_name]['record'].append(f'存款成功,存入金额为:{deposit_select}')# 取款模块elif user_select_login == '4':withdrawal_select = float(input('请输入你需要取出的金额:'))if 0 < withdrawal_select < accounts[user_name]['balance']:accounts[user_name]['balance'] -= withdrawal_selectprint(f'取款成功,取出金额为:{withdrawal_select},当前金额为:{accounts[user_name]['balance']}')# 将操作记录保存accounts[user_name]['record'].append(f'取款成功,取出金额为:{withdrawal_select}')else:print('金额不足,操作失败')# 查看操作记录模块elif user_select_login == '5':if accounts[user_name]['record']:for num,record_item in enumerate(accounts[user_name]['record'],1):print(f'{num}. {record_item}')else:print('暂无操作记录')# 退出操作模块elif user_select_login == '6':print('成功退出操作....')break# 处理其它情况模块else:print('选择无效,请重新输入!')
else:pwd_error_count += 1if pwd_error_count < 5:print(f'密码错误,请重新输入,您还有{pwd_max_count - pwd_error_count}次机会,机会用完将封禁账号!')else:print('次数用完,账号封禁,请联系工作人员解封!')# 将账号的状态改为Falseaccounts[user_name]['status'] = False
else:print('账号已封禁,请及时联系工作人员!')break
else:print('账户不存在,请先注册!')# 注册模块elif user_select == '2':register_user_name = input('请输入用户名:')# 判断注册用户名是否存在if register_user_name not in accounts:register_user_pwd = input('请输入账号密码:')re_register_user_pwd = input('请再次输入密码:')# 判断两次密码是否一致if register_user_pwd == re_register_user_pwd:accounts[register_user_name] = {'password': register_user_pwd, 'balance': 0 ,'status':True}print('注册成功~')else:print('两次密码不一致,请重新注册!')else:print('用户名已存在,请更换用户名!')# 退出模块elif user_select == '3':print('欢迎下次使用~')break# 其他情况处理模块else:print('选择无效,请重新输入!')
代码讲解
数据结构设计:
-
使用嵌套字典存储账户信息,结构清晰
-
每个账户包含:密码、余额、状态、操作记录
-
扩展了基础要求,增加了账户状态管理和操作记录功能
安全机制:
-
密码错误计数器
pwd_error_count
记录尝试次数 -
超过最大尝试次数
pwd_max_count
后锁定账户 -
账户状态
status
字段控制账户可用性
多层菜单系统:
-
外层循环处理登录/注册/退出选择
-
内层循环处理登录后的各种银行操作
-
使用嵌套的
while True
循环实现多级菜单
核心功能模块:
-
用户登录验证:
-
检查用户名是否存在
user_name in accounts
-
验证账户状态
accounts[user_name]['status']
-
密码匹配验证和错误计数
-
-
银行操作功能:
-
余额查询:直接读取并显示余额
-
转账功能:验证对方账户、余额充足性,更新双方余额
-
存款功能:增加账户余额,记录操作
-
取款功能:验证余额充足,减少账户余额
-
操作记录:使用列表存储交易历史,
enumerate
编号显示
-
-
用户注册:
-
检查用户名唯一性
register_user_name not in accounts
-
密码确认机制,确保输入一致性
-
初始化新用户数据
-
错误处理与用户体验:
-
全面的输入验证和错误提示
-
清晰的操作指引和状态反馈
-
操作记录的保存和查询功能
-
友好的用户界面和交互流程
这个ATM系统虽然简单,但涵盖了真实银行系统的基本功能,是学习字典操作、条件判断和循环控制的优秀实践案例。
总结
📊 学习路径回顾
通过前4天的系统练习,我们完成了从基础语法到项目实战的完整学习路径:
Day02 - 基础语法
-
掌握输入输出、数据类型转换
-
学会字符串格式化和类型检查
-
建立基础的编程思维
Day03 - 格式化与运算
-
深化字符串格式化技能
-
掌握数值进制转换
-
学会美化输出界面
Day04 - 数据结构
-
熟练运用列表和元组
-
掌握条件判断和循环控制
-
构建完整的管理系统
Day05 - 项目实战
-
应用字典存储复杂数据
-
实现多层菜单和业务流程
-
开发完整的业务系统
编程之路就像爬山,每一步都很重要,每个知识点都是通向顶峰的阶梯。不要急于求成,扎实掌握每个概念,多动手实践,你一定会成为优秀的Python开发者!
如果你在练习中遇到问题,或者有什么不明白的地方,欢迎来我的博客留言讨论。我们一起学习,一起进步!
下次见啦,继续加油!💪