Python异常处理

课内实验13(异常处理)
班级: 学号: 2020212205090 姓名: 缪纪 得分: 50
一、课内实验题(共5小题,50分)
题型得分 50
【描述】
定义函数:def square_root(x),求x的平方根,如果x是负数,则抛出ArithmeticError异常,否则调用数学函数sqrt返回x的平方根。
编写一个main函数,输入一个数,调用square_root函数,显示它的平方根或处理异常。
【输入】
输入一个数。
【输出】
如果该数是负数,则抛出异常,输出"Invalid";否则输出该数的平方根,结果保留2位小数。
【输入示例】
-8
【输出示例】
Invalid
【来源】
《Python程序设计基础》第9章编程题1。
(10分)
我的答案:
def square_root(x):
if(x<0):
print(“Invalid”)
else:
print("%.2f"%x**0.5)

def main():
x=float(input())
square_root(x)

main()
题目得分 10
参考答案:
import math
def square_root(x):
if x < 0:
raise ArithmeticError(“Invalid”)
return math.sqrt(x)

def main():
x = float(input())
try:
print("%.2f" % square_root(x))
except ArithmeticError as ex:
print(ex)

main()
【描述】
定义函数:def get_area(a, b, c),求等腰三角形面积,如果a、b、c是非等腰三角形数据,则抛出ValueError异常,否则返回等腰三角形面积。
编写一个main函数,输入三角形三条边长a、b、c,调用get_area函数,显示它的面积或处理异常。
【输入】
一行中给出三角形三条边a、b、c,其间以空格分隔。
【输出】
若为等腰三角形,输出其面积,结果保留两位小数。
若不是等腰三角形,抛出ValueError异常并输出字符串"The input is illegal"。
【输入示例】
3 4 5
【输出示例】
The input is illegal
【来源】
《Python程序设计基础》第9章编程题2。
(10分)
我的答案:
a,b,c=map(float,input().split(" “))
if((ab or ac or b==c)and a+b>c and a+c>b and b+c>a):
p=(a+b+c)/2
s=(p*(p-a)(p-b)(p-c))**0.5
print(”%.2f"%s)
else:
print(“The input is illegal”)

题目得分 10
参考答案:
import math
def get_area(a, b, c):
if a <= 0 or b <= 0 or c <= 0:
raise ValueError(“The input is illegal”)
if a + b <= c or b + c <= a or c + a <= b:
raise ValueError(“The input is illegal”)
if a != b and b != c and c != a:
raise ValueError(“The input is illegal”)
s = (a + b + c) / 2
return math.sqrt(s * (s - a) * (s - b) * (s - c))

def main():
line = input().split()
a = float(line[0])
b = float(line[1])
c = float(line[2])
try:
print("%.2f" % get_area(a, b, c))
except ValueError as ex:
print(ex)

main()
【描述】
定义函数:def quotient(numerator, denominator),求numerator和denominator的商,如果denominator为0,则抛出ZeroDivisionError异常,否则返回商。
编写一个main函数,输入两个整数,调用quotient方法,显示它们的商或处理异常。
注意:
如果输入的不是整数,则抛出TypeError或NameError或ValueError异常,处理异常,输出"You must enter integers. Please try again.",重新输入整数,直至结果正确。
如果denominator为0,会抛出ZeroDivisionError异常,处理异常,输出"Zero is an invalid denominator. Please try again.",重新输入整数,直至结果正确。
【输入】
输入两个整数。
【输出】
输出它们的商。
【输入示例】

100 0
100 hello
100 5.6
100 7
【输出示例】
Zero is an invalid denominator. Please try again.
You must enter integers. Please try again.
You must enter integers. Please try again.
14
【来源】
《Python程序设计基础》第9章编程题3。
(10分)
我的答案:
def quotient(numerator, denominator):
return numerator//denominator

while(1):

try:
    a,b=map(int,input().split())
    print(quotient(a,b))
    break
except ValueError:
    print("You must enter integers. Please try again.")
except ZeroDivisionError:
    print("Zero is an invalid denominator. Please try again.")

题目得分 10
参考答案:
def quotient(numerator, denominator):
if denominator == 0:
raise ZeroDivisionError()
return numerator // denominator

def main():
continueLoop = True
while continueLoop:
try:
line = input().split()
numerator = int(line[0])
denominator = int(line[1])
if isinstance(numerator, int) and isinstance(denominator, int):
result = quotient(numerator, denominator);
print(result);
else:
raise TypeError()
continueLoop = False;
except TypeError:
print(“You must enter integers. Please try again.”)
except NameError:
print(“You must enter integers. Please try again.”)
except ValueError:
print(“You must enter integers. Please try again.”)
except ZeroDivisionError:
print(“Zero is an invalid denominator. Please try again.”)

main()
【描述】
自定义异常类NegativeNumberException,表示对负数执行操作时出现的异常,如计算负数的平方根。
NegativeNumberException类包括:

私有数据域message,存放异常信息。
构造方法,设置异常信息。
特殊方法__str__,获取异常信息。
定义函数:def square_root(x),求x的平方根,如果x是负数,则抛出NegativeNumberException异常,否则调用数学函数sqrt返回x的平方根。
编写一个main函数,输入一个数,调用square_root函数,显示它的平方根或处理异常。
【输入】
输入一个数。
【输出】
如果该数是负数,则抛出NegativeNumberException异常,输出“Invalid”;否则输出该数的平方根,结果保留2位小数。
【输入示例】

-8
【输出示例】
Invalid
(10分)
我的答案:
x=float(input())
if(x<0):
print(“Invalid”)
else:
print("%.2f"%x**0.5)
题目得分 10
参考答案:
import math
class NegativeNumberException(Exception):
def init(self, message):
super().init()
self.__message = message
def str(self):
return self.__message

def square_root(x):
if x < 0:
raise NegativeNumberException(“Invalid”)
return math.sqrt(x)

def main():
x = float(input())
try:
print("%.2f" % square_root(x))
except NegativeNumberException as ex:
print(ex)

main()
【描述】
设计一个IntRange类。IntRange类包括:

私有数据域value、lower,upper,分别存放数据、数据下限和数据上限。
构造方法,设置数据的下限和上限。
成员方法getValue,输入数据,如果数据不在下限和上限范围内,则抛出outOfRange异常;否则返回该数据。
自定义异常类OutOfRange。OutOfRange类包括:

私有数据域message,存放异常信息。
构造方法,设置异常信息。
特殊方法__str__,获取异常信息。
【输入】
输入数据的下限、上限以及数据。
【输出】
如果数据在下限和上限范围内,则输出数据本身;否则输出overflow。
【输入示例】

5 10
12
【输出示例】
overflow
【提示】
只需编写IntRange类和OutOfRange类,递交时会测试这两个类。
(10分)
我的答案:
class IntRange:
def init(self,lower,upper):
self.lower=lower
self.upper=upper
def set_lower(self,lower):
self.lower=lower
def set_upper(self,upper):
self.upper=upper
def getValue(self):
self.value=eval(input())
if self.lower<=self.value and self.value<=self.upper:
return self.value
else :
raise OutOfRange(“overflow”)
class OutOfRange(Exception):
def init(self,message):
super().init()
self.message=message
def str(self):
return self.message
题目得分 10
参考答案:
class OutOfRange(Exception):
def init(self, message):
super().init()
self.__message = message
def str(self):
return self.__message

class IntRange:
def init(self, lower, upper):
self.__lower = lower
self.__upper = upper
self.__value = 0

def getValue(self):
    self.__value = eval(input())
    if self.__value < self.__lower or self.__value > self.__upper:
        raise OutOfRange("overflow")
    return self.__value

def main():
line = input().split()
lower = int(line[0])
upper = int(line[1])
range = IntRange(lower, upper)
try:
value = range.getValue()
print(value)
except OutOfRange as ex:
print(ex)

main()
课内实验题,第13套,第01题 总分 10 得分 10
详细:
正确 用例1运行:通过
用例2运行:通过
用例3运行:通过
10 10
课内实验题,第13套,第02题 总分 10 得分 10
详细:
正确 用例1运行:通过
用例2运行:通过
用例3运行:通过
用例4运行:通过
用例5运行:通过
10 10
课内实验题,第13套,第03题 总分 10 得分 10
详细:
正确 用例1运行:通过
用例2运行:通过
10 10
课内实验题,第13套,第04题 总分 10 得分 10
详细:
正确 用例1运行:通过
用例2运行:通过
用例3运行:通过
10 10
课内实验题,第13套,第05题 总分 10 得分 10
详细:
正确 用例1运行:通过
用例2运行:通过
10 10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值