实验9:异常处理及程序调试

一、实验目的和要求

1、了解代码异常知识;

2、掌握异常处理的try…except语句、try…except…else语句、try…except…finally语句。raise语句;

3、掌握程序调试的方法。

二、实验环境

软件版本:Python 3.10 64_bit

三、实验过程

1、实例01:模拟幼儿园分苹果

(1)在IDLE中创建一个名称为division_apple.py的文件,然后在该文件中定义一个模拟分苹果的函数division(),在该函数中,要求输入苹果的数量和小朋友的数量,然后应用除法算式计算分配结果,最后调用division()函数,代码如下:

 1 def division():
2 '''功能:分苹果'''
3 print("\n===================== 分苹果了 =====================\n")
4 apple = int(input("请输入苹果的个数:")) #输入苹果的数量
5 children = int(input("请输入来了几个小朋友:"))
6 result = apple // children #/除法,有余数 //除法,向下取整 #用变量名计算要注意数据类型
7 remain = apple - result * children #计算余下几个苹果
8 if remain > 0:
9 print(apple,"个苹果,平均分给",children,"个小朋友,每人分",
10 result,"个,剩下",remain,"个。")
11 else:
12 print(apple,"个苹果,平均分给",children,"个小朋友,每人分",result,"个。")
13 if __name__ == '__main__':
14 division() #调用分苹果的函数

(2)运行结果:

  1.输入苹果和小朋友数量都是10时,运行结果如下:

  2.当小朋友数目为0时,抛出异常:

2、实例02:模拟幼儿园分苹果(除数不能为0)

(1)在IDLE中创建一个名称为division_apple_0.py的文件,然后将实例01的代码全部复制到该文件中,并且对“if__name__=='__name__':”,语句下面的代码进行修改,应用try…except语句捕获执行division()函数可能抛出的ZeroDivisionError(除数为零)异常,修改后的代码如下:

 1 def division():
2 '''功能:分苹果'''
3 print("\n===================== 分苹果了 =====================\n")
4 apple = int(input("请输入苹果的个数:")) #输入苹果的数量
5 children = int(input("请输入来了几个小朋友:"))
6 result = apple // children
7 remain = apple - result * children
8 if remain > 0:
9 print(apple,"个苹果,平均分给",children,"个小朋友,每人分",
10 result,"个,剩下",remain,"个。")
11 else:
12 print(apple,"个苹果,平均分给",children,"个小朋友,每人分",result,"个。")
13 if __name__=='__main__':
14 try: #捕获异常
15 division() #调用division()函数
16 except ZeroDivisionError: #处理异常语句
17 print("\n出错了 ~-~—苹果不能被0个小朋友平分!")

(2)运行结果:

  1.当输入的小朋友数量为0时,不再抛出异常:

  2.当输入的苹果数量不是整数时(有人分到的苹果不是整数):

3、实例03:模拟幼儿园分苹果(每个人至少分到一个苹果)

(1)在IDLE中创建一个名称为division_apple_1.py的文件,然后将实例02的代码全部复制到该文件中,并且在第5行代码“children = int(input("请输入来了几个小朋友:"))”的下方添加一个if语句,实现当苹果的数量小于小朋友的数量时,应用raise语句抛出一个ValueError异常,接下来再在最后一行语句的下方添加except语句处理ValueError异常,修改后的代码如下:

 1 def division():
2 '''功能:分苹果'''
3 print("\n===================== 分苹果了 =====================\n")
4 apple = int(input("请输入苹果的个数:")) #输入苹果的数量
5 children = int(input("请输入来了几个小朋友:"))
6 if apple < children: #苹果不够分,抛出异常语句
7 raise ValueError("苹果太少了,不够分…")
8 result = apple // children
9 remain = apple - result * children
10 if remain > 0:
11 print(apple,"个苹果,平均分给",children,"个小朋友,每人分",
12 result,"个,剩下",remain,"个。")
13 else:
14 print(apple,"个苹果,平均分给",children,"个小朋友,每人分",result,"个。")
15 if __name__=='__main__':
16 try: #捕获异常
17 division() #调用division()函数
18 except ZeroDivisionError: #处理异常语句
19 print("\n出错了 ~-~—苹果不能被0个小朋友平分!")
20 except ValueError as e:
21 print("\n出错了 ~-~—",e)

(2)运行结果如下(输出苹果的数量为5,小朋友的数量为10):

4、实例04:模拟幼儿园分苹果(应用断言调试)

(1)在IDLE中创建一个名称为division_apple_dug.py的文件,然后将实例01的代码全部复制到该文件中,并且在第5行代码“children = int(input("请输入来了几个小朋友:"))”的下方添加一个assert语句,验证苹果的数量是否小于小朋友的数量,修改后的代码如下:

 1 def division():
2 '''功能:分苹果'''
3 print("\n===================== 分苹果了 =====================\n")
4 apple = int(input("请输入苹果的个数:")) #输入苹果的数量
5 children = int(input("请输入来了几个小朋友:"))
6 assert apple >= children ,"苹果不够分" #应用断言调试
7 result = apple // children
8 remain = apple - result * children
9 if remain > 0:
10 print(apple,"个苹果,平均分给",children,"个小朋友,每人分",
11 result,"个,剩下",remain,"个。")
12 else:
13 print(apple,"个苹果,平均分给",children,"个小朋友,每人分",result,"个。")
14 if __name__=='__main__':
15 division() #调用division()函数

(2)运行结果如下:

1.输入苹果数量为5,小朋友数量为10:

2.将assert语句和异常处理语句结合使用,可将第15行修改为以下内容(运行结果如下):

1 try:
2 division() #调用division()函数
3 except AssertionError as e: #处理AssertionError异常
4 print("\n输入有误:",e)
5

Python实验报告(第9章)的更多相关文章

  1. Python实验报告——第4章 序列的应用

    实验报告 [实验目的] 1.掌握python中序列及序列的常用操作. 2.根据实际需要选择使用合适的序列类型. [实验条件] 1.PC机或者远程编程环境. [实验内容] 1.完成第四章 序列的应用 实 ...

  2. Python实验报告——第3章 流程控制语句

    实验报告 [实验目的] 1.掌握python中流程控制语句的使用,并能够应用到实际开发中. [实验条件] 1.PC机或者远程编程环境 [实验内容] 1.完成第三章流程控制语句实例01-09,实战一到实 ...

  3. Python实验报告——第2章 Python语言基础

    实验报告 [实验目的] 1.熟悉在线编程平台. 2.掌握基本的 python 程序编写.编译与运行程序的方法. [实验条件] 1.PC机或者远程编程环境 [实验内容] 1.完成第二章实例01-07,实 ...

  4. python实验报告(第11章)

    实验11:使用Python操作数据库 一.实验目的和要求 1.学会数据库编程接口: 2.学会使用SQLite: 3.学会使用MySQL. 二.实验环境 软件版本:Python 3.10 64_bit ...

  5. python实验报告(第12章)

    实验12:GUI界面编程 一.实验目的和要求 1.学会应用常用控件: 2.学会使用BoxSizer布局: 3.学会事件处理. 二.实验环境 软件版本:Python 3.10 64_bit 三.实验过程 ...

  6. Python实验报告(第8章)

    实验8:模块 一.实验目的和要求 1.了解模块的内容: 2.掌握模块的创建和导入方式: 3.了解包结构的创建和使用. 二.实验环境 软件版本:Python 3.10 64_bit 三.实验过程 1.实 ...

  7. Python实验报告(第13章)

    实验13:Pygame游戏编程 一.实验目的和要求 学会Pygame的基本应用 二.Pygame的优点及应用 使用Python进行游戏开发的首选模块就是Pygame,专为电子游戏设计(包括图像.声音) ...

  8. Python实验报告(第10章)

    实验10:文件及目录操作 一.实验目的和要求 1.掌握基本文件操作(创建.打开.关闭.写入): 2.掌握目录操作的基本操作(创建.删除.遍历): 3.了解高级文件操作(删除文件.获取文件基本信息). ...

  9. Python实验报告(第6章)

    实验6:函数 一.实验目的和要求 1.掌握函数的创建和调用: 2.了解不同的参数如何进行传递: 3.了解返回值的应用: 4.学习变量的作用域: 5.学习匿名函数(lambda). 二.实验环境 软件版 ...

随机推荐

  1. git记不住用户名跟密码,每次提交拉取都需要再次输入

    问题:之前为了测试git提交的一个问题,选择不记住用户名跟密码,输入如下命令即可不记住 git credential-manager uninstall git update-git-for-wind ...

  2. 一天十道Java面试题----第三天(对线程安全的理解------>线程池中阻塞队列的作用)

    这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 21.对线程安全的理解 22.Thread和Runnable的区别 23.说说你对守护线程的理解 24.ThreadLoc ...

  3. 齐博X1-栏目的终极方法get_sort

    本节说明栏目的最终方法get_sort 我们之前讲的一系列fun函数调用栏目的方法都是基于get_sort这个公共方法而来 我们来看下这个函数的具体参数这个方法有四个参数: id:也就是栏目id,经常 ...

  4. SpringBoot自动配置(装配)流程

    源码分析 SpringBoot自动配置流程 ​ ​ 首先,我们要了解在@SpringBootApplication注解的内部,还具有@EnableAutoConfiguration,@SpringBo ...

  5. (二)Three光线检测-实现摄像机向鼠标点击位置滑动动画

    (二)Three.js光线检测 摘要:使用three.js中的光线检测 Raycaster() ,实现一下效果: 通过点击处的坐标,修改摄像机位置,实现摄像机由远及近的过渡动态效果(由远景到近景) 1 ...

  6. curl 下载地址中有特殊字符解决方案

    curl 下载地址中有特殊字符解决方案 情况 使用 curl 下载 地址中带有 特殊字符的时候 比如下面这个地址.实际访问地址不正确,参数丢失问题 curl -o kspf.jpeg https:// ...

  7. LoadRunner11脚本小技能之添加请求头+定义变量+响应内容乱码转换打印+事务拆分

    一.添加请求头 存在一些接口,发送请求时需要进行权限验证.登录验证(不加请求头时运行脚本,接口可能会报401等等),所以需要在脚本中给对应请求添加请求头.注意:请求头需在请求前添加,包含url类.su ...

  8. day01-Tomcat框架分析

    引入课程和Maven 1.Maven maven中央仓库:Maven Repository: Search/Browse/Explore (mvnrepository.com) maven仓库是国外的 ...

  9. 报错:com.mysql.jdbc.MysqlDataTruncation: Data truncation xxxx

    报错 Out of range value for column 'pk' at row 1:表的字段长度不够 Data too long for column 'ip' at row 1:表的字段长 ...

  10. Shell脚本--信号发送与捕捉

    信号(Signal):信号是在软件层次上对中断机制的一种模拟,通过给一个进程发送信号,执行相 应的处理函数. 进程可以通过三种方式来响应一个信号: 忽略信号,即对信号不做任何处理,其中有两个信号不能忽 ...