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

Python 程序控制流程综合编程

题目1:图书借阅管理系统

### 题目描述
某图书馆需要一个简单的借阅管理系统,规则如下:
1. 图书可借阅天数根据图书类型不同:
- 普通书籍:14天
- 杂志:7天
- 参考书:3天
- 稀有书籍:不可外借
2. 读者等级决定可同时借阅的最大数量:
- 普通读者:最多3本
- 学生读者:最多5本
- 教师读者:最多10本
3. 程序功能:
- 接收用户输入的读者等级(普通读者/学生读者/教师读者)
- 接收用户想要借阅的图书类型及数量
- 检查是否符合借阅规则(类型是否可借、数量是否超限)
- 输出借阅结果:可借阅的图书类型、可借天数、是否超限等信息
- 对输入进行合法性校验(必须从指定选项中选择)

def library_system():print("=== 图书借阅管理系统 ===")# 读者等级选择与验证
while True:print("\n请选择读者等级:")print("1. 普通读者")print("2. 学生读者")print("3. 教师读者")reader_choice = input("请输入选项(1-3):")if reader_choice in ['1', '2', '3']:# 根据选择设置最大可借数量max_books = 3 if reader_choice == '1' else 5 if reader_choice == '2' else 10reader_type = "普通读者" if reader_choice == '1' else "学生读者" if reader_choice == '2' else "教师读者"breakelse:print("输入无效,请重新选择!")print(f"\n您是{reader_type},最多可同时借阅{max_books}本图书")# 图书类型选择与验证
while True:print("\n请选择图书类型:")print("1. 普通书籍")print("2. 杂志")print("3. 参考书")print("4. 稀有书籍")book_choice = input("请输入选项(1-4):")if book_choice in ['1', '2', '3', '4']:book_type = "普通书籍" if book_choice == '1' else "杂志" if book_choice == '2' else "参考书" if book_choice == '3' else "稀有书籍"# 检查是否可借if book_choice == '4':  # 稀有书籍不可外借print(f"\n{book_type}不可外借!")continuebreakelse:print("输入无效,请重新选择!")# 获取可借天数
borrow_days = 14 if book_choice == '1' else 7 if book_choice == '2' else 3# 借阅数量输入与验证
while True:try:borrow_count = int(input(f"\n请输入要借阅{book_type}的数量:"))if borrow_count <= 0:print("借阅数量必须为正数!")else:breakexcept ValueError:print("请输入有效的数字!")# 检查是否超限
if borrow_count > max_books:print(f"\n借阅结果:超出最大借阅数量!")print(f"您最多可借阅{max_books}本图书")
else:print(f"\n借阅结果:")print(f"图书类型:{book_type}")print(f"可借阅天数:{borrow_days}天")print(f"借阅数量:{borrow_count}本")print("借阅成功!")# 运行系统
library_system()

结果

 题目2:学生成绩等级评定系统

### 题目描述
实现一个学生成绩等级评定系统,规则如下:
1. 成绩为0-100之间的整数
2. 等级评定标准:
- 90-100分:优秀
- 80-89分:良好
- 70-79分:中等
- 60-69分:及格
- 0-59分:不及格
3. 额外规则:
- 若为班干部,在原等级基础上可提升一个等级(优秀不变)
- 若有迟到记录(超过3次),在原等级基础上降低一个等级(不及格不变)
4. 程序功能:
- 接收用户输入的成绩(整数)、是否班干部(是/否)、迟到次数(整数)
- 校验输入合法性(成绩在0-100之间,迟到次数非负)
- 计算最终等级并输出
- 循环处理多个学生的成绩评定,直到用户选择退出

def evaluate_grade():print("=== 学生成绩等级评定系统 ===")while True:# 输入成绩并验证while True:try:score = int(input("\n请输入学生成绩(0-100):"))if 0 <= score <= 100:breakelse:print("成绩必须在0-100之间,请重新输入!")except ValueError:print("请输入有效的整数成绩!")# 输入是否为班干部while True:is_leader = input("该学生是否为班干部(是/否):").strip()if is_leader in ['是', '否']:breakelse:print("请输入'是'或'否'!")# 输入迟到次数并验证while True:try:late_count = int(input("请输入迟到次数:"))if late_count >= 0:breakelse:print("迟到次数不能为负数,请重新输入!")except ValueError:print("请输入有效的整数!")# 确定原始等级if score >= 90:grade = "优秀"elif score >= 80:grade = "良好"elif score >= 70:grade = "中等"elif score >= 60:grade = "及格"else:grade = "不及格"# 处理班干部加分if is_leader == '是' and grade != "优秀":grade_map = {"良好": "优秀", "中等": "良好", "及格": "中等", "不及格": "及格"}grade = grade_map[grade]# 处理迟到减分if late_count > 3 and grade != "不及格":grade_map = {"优秀": "良好", "良好": "中等", "中等": "及格", "及格": "不及格"}grade = grade_map[grade]# 输出结果print(f"\n评定结果:该学生成绩等级为{grade}")# 询问是否继续while True:continue_flag = input("是否继续评定其他学生成绩(是/否):").strip()if continue_flag in ['是', '否']:breakelse:print("请输入'是'或'否'!")if continue_flag == '否':print("\n感谢使用,再见!")break# 运行系统
evaluate_grade()

结果:

题目3:数字密码锁模拟

### 题目描述
模拟一个数字密码锁的工作过程,规则如下:
1. 初始密码为四位数:1234
2. 用户有3次输入密码的机会
3. 每次输入后:
- 若密码正确,提示"密码正确,锁已打开"并结束程序
- 若密码错误,提示"密码错误,剩余X次机会"
- 若输入的不是四位数,提示"请输入四位数密码",不消耗尝试次数
4. 额外功能:
- 连续输错3次后,提示"密码错误次数过多,锁已锁定"
- 锁定后询问是否重置(y/n),输入y则重新获得3次机会,输入n则退出程序

def password_lock():print("=== 数字密码锁模拟 ===")correct_password = "1234"attempts = 3while True:print(f"\n您有{attempts}次输入密码的机会")password = input("请输入四位数密码:")# 检查是否为四位数if len(password) != 4 or not password.isdigit():print("请输入四位数密码")continue# 检查密码是否正确if password == correct_password:print("密码正确,锁已打开")break# 密码错误,减少尝试次数attempts -= 1if attempts > 0:print(f"密码错误,剩余{attempts}次机会")else:print("密码错误次数过多,锁已锁定")# 询问是否重置while True:reset_choice = input("是否重置密码锁(y/n):").lower()if reset_choice in ['y', 'n']:breakelse:print("请输入'y'或'n'")if reset_choice == 'y':attempts = 3print("已重置,您有3次新的尝试机会")else:print("程序结束")break# 运行密码锁模拟
password_lock()

结果:

题目4:整数序列分析工具

### 题目描述
实现一个整数序列分析工具,功能如下:
1. 接收用户输入的10个整数(范围-100到100)
2. 对输入的整数序列进行分析:
- 统计正数、负数和零的个数
- 找出序列中的最大值和最小值
- 计算所有整数的总和
- 统计能被3整除的数的个数
3. 输入校验:
- 确保输入的是整数
- 确保整数在-100到100范围内
- 输入不合法时提示错误并重新输入当前数字
4. 输出所有统计结果

def integer_analyzer():print("=== 整数序列分析工具 ===")numbers = []count = 10  # 需要输入10个整数# 收集10个有效的整数for i in range(count):while True:try:num = int(input(f"请输入第{i+1}个整数(-100到100):"))if -100 <= num <= 100:numbers.append(num)breakelse:print("整数必须在-100到100之间,请重新输入!")except ValueError:print("请输入有效的整数!")# 分析序列positive_count = 0  # 正数个数negative_count = 0  # 负数个数zero_count = 0      # 零的个数sum_total = 0       # 总和divisible_by_3 = 0  # 能被3整除的数的个数for num in numbers:sum_total += numif num > 0:positive_count += 1elif num < 0:negative_count += 1else:zero_count += 1if num % 3 == 0:divisible_by_3 += 1# 找出最大值和最小值max_num = max(numbers)min_num = min(numbers)# 输出结果print("\n=== 分析结果 ===")print(f"输入的序列:{numbers}")print(f"正数个数:{positive_count}")print(f"负数个数:{negative_count}")print(f"零的个数:{zero_count}")print(f"最大值:{max_num}")print(f"最小值:{min_num}")print(f"总和:{sum_total}")print(f"能被3整除的数的个数:{divisible_by_3}")# 运行分析工具
integer_analyzer()

结果:

题目5:简易日历查询

### 题目描述
实现一个简易日历查询功能,规则如下:
1. 假设2024年1月1日是星期一
2. 已知各月天数:
- 1,3,5,7,8,10,12月:31天
- 4,6,9,11月:30天
- 2月:29天(2024是闰年)
3. 程序功能:
- 接收用户输入的月份(1-12)和日期(1-当月最大天数)
- 计算并输出该日期是星期几(星期一到星期日)
- 校验输入合法性(月份范围1-12,日期不超过当月最大天数)
- 允许用户多次查询,直到选择退出

def calendar_query():print("=== 简易日历查询 ===")# 2024年各月天数(索引0不用,从1开始对应1月)days_in_month = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]# 星期映射(0-6对应星期一到星期日)weekdays = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]while True:# 输入月份并验证while True:try:month = int(input("\n请输入月份(1-12):"))if 1 <= month <= 12:breakelse:print("月份必须在1-12之间,请重新输入!")except ValueError:print("请输入有效的整数!")# 输入日期并验证while True:try:day = int(input(f"请输入日期(1-{days_in_month[month]}):"))if 1 <= day <= days_in_month[month]:breakelse:print(f"日期必须在1-{days_in_month[month]}之间,请重新输入!")except ValueError:print("请输入有效的整数!")# 计算该日期是一年中的第几天day_of_year = dayfor i in range(1, month):day_of_year += days_in_month[i]# 计算星期几(2024年1月1日是星期一,对应索引0)weekday_index = (day_of_year - 1) % 7weekday = weekdays[weekday_index]# 输出结果print(f"\n2024年{month}月{day}日是{weekday}")# 询问是否继续查询while True:continue_flag = input("是否继续查询其他日期(是/否):").strip()if continue_flag in ['是', '否']:breakelse:print("请输入'是'或'否'!")if continue_flag == '否':print("\n感谢使用,再见!")break# 运行日历查询
calendar_query()

结果:

练习 6:三角形类型判断

编写一个程序,输入三角形的三条边长,判断:

1. 是否能构成三角形(任意两边之和大于第三边)
2. 如果能构成三角形,进一步判断是等边、等腰还是一般三角形  

a=eval(input('请输入一个边长:'))
b=eval(input('请输入一个边长:'))
c=eval(input('请输入一个边长:'))
if a+b>c and a+c>b and b+c>a:if a==b==c:print('等边三角形')elif a==b or a==c or b==c:print('等腰三角形')else:print('普通三角形')
else:print('不是三角形')

  结果:

题目7:实现一个猜数字游戏:程序随机生成1 - 100

# 的整数,用户每次输入猜测的数字,程序提示“太大了”“太小了”,直到猜对为止,最后统计用户猜了多少次。
# 要求:用while 循环实现,结合random模块生成随机数。
# # 思路提示:
#
# 1.导入random模块,用random.randint(1, 100)生成目标数字。
#
# 2.初始化count = 0(统计次数),while True无限循环,每次用户输入后count+1
#
# 3.用条件判断提示结果,猜对时用break退出循环,并打印次数。

count=0import random
random=random.randint(1,100)while True:guess =int(input('请开始猜数字,数字大小是1-100之间的随机整数'))if guess == random:print(f'恭喜你,中奖了,随机整数是{random}')count += 1breakelif guess > random:print(f'你猜的数字是{guess},猜大了')count += 1else:print(f'你猜的数字是{guess},猜小了')count+=1
print(f'猜了{count}次')

结果:


题目8: 题目:实现一个猜数字游戏:程序随机生成1 - 100

# 的整数,用户每次输入猜测的数字,程序提示“太大了”“太小了”,直到猜对为止,最后统计用户猜了多少次。
# 要求:用while 循环实现,结合random模块生成随机数。
# # 思路提示:
#
# 1.导入random模块,用random.randint(1, 100)生成目标数字。
#
# 2.初始化count = 0(统计次数),while True无限循环,每次用户输入后count+1
#
# 3.用条件判断提示结果,猜对时用break退出循环,并打印次数。


题目9:打印九九乘法表(for循环)

for i in range(1,10):for j in range(1,i+1):print(f'{i}*{j}={i*j}',end=" ")print()

结果:

题目10: for循环打印等腰三角形

#     *
#    ***
#   *****
#  *******
# *********

def print_isosceles_triangle(height):# 外层循环控制行数for i in range(1, height + 1):# 内层循环1:打印空格for j in range(height - i):print(" ", end="")# 内层循环2:打印星号for k in range(2 * i - 1):print("*", end="")# 换行print()# 测试:打印一个高度为5的等腰三角形
if __name__ == "__main__":triangle_height = 5print(f"高度为{triangle_height}的等腰三角形:")print_isosceles_triangle(triangle_height)

结果:

http://www.dtcms.com/a/394435.html

相关文章:

  • Java进阶教程,全面剖析Java多线程编程,同步方法,笔记13
  • 1.6 虚拟机 (答案见原书 P33)
  • 【C++练习】26.在 C++ 中,不使用 “strcpy“ 函数将一个字符串复制到另一个字符串
  • 【分布式技术】Baerer token刷新机制详细解读
  • 第十三章 Ant与Jenkins的集成
  • 通义万相正式开源Wan2.2-Animate动作生成模型
  • 课后作业-2025-09-21
  • 比 IDEA 容器自动化部署更轻量便捷的工具
  • 知识图谱技术对自然语言处理深层语义分析的影响与启示研究
  • Javase 高级技术 —— 01 反射
  • Linux 孤儿进程与进程的优先级和切换和调度
  • QML学习笔记(七)QML的基本数据类型
  • 基于51单片机电子钟闹钟12/24小时制LCD显示
  • 小程序开发全解析:从结构到API
  • 异步方法在C#中的使用
  • js时间戳转换日期格式 yyyy-mm-dd
  • 信号处理方法概述
  • 固定收益理论(五)债券投资归因模型
  • 【论文速递】2025年第18周(Apr-27-May-03)(Robotics/Embodied AI/LLM)
  • 3D视觉——求出目标物体在相机坐标系下的位姿信息
  • 固态和机械硬盘损坏后的不同
  • Linux 基础IO
  • pandawiki ai 无法生成摘要
  • m语言可视化log中的变量信息
  • MySQL:库操作和常用数据类型
  • uniapp实现view块级元素横竖屏切换
  • 【编号74】河北地理基础数据(道路、水系、四级行政边界、地级城市、DEM等)
  • Python: 将wxauto发布为接口,并部署为Windows服务
  • 2025年度SEO优化公司
  • 基于Markdown的静态网站生成器完全指南