Python作业整理(第11次作业)

这篇博客主要介绍了Python编程中的异常处理和数据处理,包括处理学生成绩、分段函数、数据异常、字符串异常、简单计算器等多个实战练习。通过实例展示了如何处理输入错误、数据类型错误、除0错误等常见异常,以及如何计算平均值和处理非法数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

7-1 jmu-python-异常-学生成绩处理基本版 (15 分)

小明在帮老师处理数据,这些数据的第一行是n,代表有n行整数成绩需要统计。
数据没有错误,则计算平均值(保留2位小数)并输出。
数据有错误,直接停止处理,并且不进行计算。

注:该程序可以适当处理小错误,比如对于有些数据如果左右包含空格,先去掉
空格再行处理。

输入格式:
第一行为n,代表接下来要输入的行数。
然后输入n行成绩(整数)。

输出格式:
如果输入过程中均未出现异常,则输出All OK。 否则输出样例2、3所示格式的错误信息。
如果未出现异常则输出:avg grade = 平均值。平均值(保留2位小数)
不管输入过程中有无出现异常,最后都要输出Process Completed

输入样例1:
3
1
2
3
输出样例1:
All OK
avg grade = 2.00
Process Completed
输入样例2:
3
a b
输出样例2:
Error for data " a b"! Break
Process Completed
输入样例3:
3
1
a
输出样例3:
Error for data “a”! Break
Process Completed

n = int(input())
n1=n
sum=0
while n:
    grade = input()
    g=grade.strip()
    if g.isdigit(): 
        sum+=int(g)
    else:
        print('Error for data"%s"! Break'%(grade))
        break      
    n-=1
if n==0:
    print("All OK")
    print("avg grade = %.2f"%(sum/n1))
print("Process Completed")

7-2 jmu-分段函数l (20 分)

本题目要求计算以下分段函数的值(x为从键盘输入的一个任意实数):

1.png

如果输入非数字,则输出“Input Error!”

输入格式:
在一行中输入一个实数x。

输出格式:
在一行中按”y=result”的格式输出,其中result保留两位小数。

输入样例:
-2
输出样例:
在这里给出相应的输出。例如:

y=3.00

try:
    x = eval(input())
    if x<=-2:
        y=-2*x-1
        print("y=%.2f"%y)
    elif x>1:
        y=2*x+1
        print("y=%.2f"%y)
    else:
        y=3
        print("y=%.2f"%y)
except:
    print("Input Error!")

7-3 jmu-python-数据异常处理 (20 分)

输入一组数据,求平均值。要求:

数据正确,正确计算。
数据有错误,能异常处理,输出错误信息,不进行计算。
输入格式:
行1:n代表输入的数据个数
接下来n行表示输入的数据
输出格式:
输入数据合法正确,则输出正确,并输出平均值。
输入数据不正确,如果数值错误,输出数值错误
除0错误,输出除0错误,n不能等0
不管有没有异常,都输出程序结束
输入样例1:
3
2
a
输出样例1:
数值错误
程序结束
输入样例2:
0
输出样例2:
除0错误,n不能等0
程序结束
输入样例3:
3
5.6
6.8
9.4
输出样例3:
正确
avg=7.27
程序结束

n = int(input())
m=n
sum =0
if n==0:
    print("除0错误,n不能等0\n")
    print("程序结束")
else:
    try:
        while n:
                s= eval(input())
                sum+=s
                n=n-1
        print("正确\n")
        print("avg=%.2f\n"%(sum/m))
    except:
        print("数值错误\n")
    print("程序结束")

7-4 jmu-python-字符串异常处理 (20 分)

输入一行字符串及下标,能取出相应字符。程序能对不合法数据做相应异常处理。

输入格式:
行1:输入一字符串
行2:输入字符下标
输出格式:
下标非数值异常,输出下标要整数
下标越界,输出下标越界
数据正确,输出下标对应的字符
输入样例:
python
1
输出样例:
y
输入样例:
python
a
输出样例:
下标要整数
输入样例:
python
10
输出样例:
下标越界

try:
    s=input()
    n=int(input())
    print(s[n])
except ValueError:
    print("下标要整数")
except IndexError:
    print("下标越界")

7-5 jmu-python-简单计算器 (20 分)

输入一个表达式字符串,计算其结果

输入格式:
行1:输入字符串数目
下面分别输入要计算的表达式
输出格式:
输出计算结果,结果保留2位小数。对于异常数据能输出相应异常信息。

输入样例1:
4
1+1
56-23
5/3
5*3.5
输出样例1:
2.00
33.00
1.67
17.50
输入样例2:
3
ab+23
2/0
23+36f
输出样例2:
NameError
ZeroDivisionError
SyntaxError

n=int(input())
while n:
    try:
        string=input()
        print("%.2lf"%eval(string))
    except NameError:
        print("NameError")
    except ZeroDivisionError:
        print("ZeroDivisionError")
    except SyntaxError:
        print("SyntaxError")
    n=n-1

7-6 JMU-Python-分段函数 (20 分)

本题目要求根据以下分段函数的定义,计算输入的x对应的y值,输出结果保留两位小数;如果输入的x是非数值型数据,输出’Input Error’。注意:使用math库

Snap5.bmp

输入格式:
在一行中输入x的值。

输出格式:
按“f(x) = result”的格式输出,其中x与result都保留两位小数,注意’='两边有空格。

如果输入的x是非数值型数据,输出:Input Error

输入样例1:
1.5
输出样例1:
f(1.50) = 4.55
输入样例2:
-4
输出样例2:
f(-4.00) = 0.00
输入样例3:
abc
输出样例3:
Input Error

import math
try:
    x=eval(input())
    if x>0:
        print("f(%.2f) = %.2f"%(x,math.cos(x)+math.e**x))
    else:
        print("f(%.2lf) = 0.00"%x)
except NameError:
    print("Input Error")

7-7 JMU-Python-分段函数 (20 分)

本题目要求根据以下分段函数的定义,计算输入的x对应的y值,输出结果保留两位小数;如果输入的x是非数值型数据,输出’Input Error’。注意:使用math库

Snap6.bmp

输入格式:
在一行中输入x的值。

输出格式:
按“f(x) = result”的格式输出,其中x与result都保留两位小数,注意’='两边有空格。

如果输入的x是非数值型数据,输出:Input Error

输入样例1:
4
输出样例1:
f(4.00) = 3.39
输入样例2:
-6
输出样例2:
f(-6.00) = 0.00
输入样例3:
x
输出样例3:
Input Error

import math
try:
    x=eval(input())
    if x>0:
        print("f(%.2f) = %.2f"%(x,math.log(x)+x**0.5))
    else:
        print("f(%.2lf) = 0.00"%x)
except NameError:
    print("Input Error")

7-8 jmu-python-查成绩 (10 分)

从键盘输入一个学生所有课程的成绩,输入格式为”课程名:成绩“,每门课占一行,以空行结束。随后提示”请输入要查询的课程:“,用户从键盘输入课程名,查询并输出该课程的成绩,要求进行异常处理,对不存在的课程进行捕捉处理。

输入格式:
输入学生所有课程的成绩,每门课占一行,格式为”课程名:成绩“,以空行结束 在提示后输入课程名

输出格式:
如果课程存在,直接输出成绩,否则提示”没有该门课程“

输入样例1:
数学:96
英语:82
计算机:76
思政:90

计算机
输出样例1:
请输入要查询的课程:
76
输入样例2:
数学:96
英语:82
计算机:76
思政:90

数学a
输出样例2:
请输入要查询的课程:
没有该门课程

l=[]
while True:
        data=input()
        if data=="":
            break
        l.append(data.split(":"))
s=input()
d=dict(l)
print("请输入要查询的课程:")
try:
    print(d[s])
except:
    print("没有该门课程")

7-9 下标异常 (10 分)

输入一个非空字符串和一个索引值,输出字符串中,该索引值对应的字符。若发现异常,则输出“输入下标有误”

输入格式:
输入一个非空的字符串,再输入一个索引值(Python中可以是正向索引,也可以是反向索引)。

输出格式:
输出字符串中,该索引值对应的字符。若发现异常(如输入的索引值太大或太小,超出字符串的索引值范围;如输入的索引值为非整数等),则输出“输入下标有误”

输入样例:
在这里给出一组输入。例如:

Hello World
-4
输出样例:
在这里给出相应的输出。例如:

o
输入样例:
在这里给出一组输入。例如:

abcd
4
输出样例:
在这里给出相应的输出。例如:

输入下标有误
输入样例:
在这里给出一组输入。例如:

Good
?

try:
    s=input()
    n=eval(input())
    print(s[n])
except:
    print("输入下标有误")

7-10 有关堆栈操作 (20 分)

请实现一个Stack类,实现堆栈初始化,进栈,出栈,显示堆栈数据,堆栈长度等. 实现进栈方法 push(int x); 实现出栈方法 pop(); 实现求堆栈长度方法 size();实现显示堆栈数据方法:show()。

输入格式:
输入包含多个测试用例,每个测试用例均为数字,第一个数 表示对应的操作。

是1 时,表示初始化一个堆栈对象,最大长度为10,1后面可带上用空格分隔的0-n个数,这些数据为初始化堆栈的数据(如果数据个数n大于10 ,则最大长度为n),其后 也可不带数据,表示初始化的是一个空堆栈。

是2,表示进栈操作,即从堆栈顶部(尾部)将数据添加到堆栈,所以2 后面还要带一个数,两数之间用空格分隔,当没有第2个数时,显示 “data error”,当进栈操作没有建立堆栈对象时显示 “stack is not exist”.当进堆栈操作时,堆栈数据达到最大长度时,则显示“The stack is full”

是3 : 表示出栈操作,即从堆栈顶部(尾部)将数据弹出并显示。当出栈操作没有建立堆栈对象时显示 “stack is not exist”.当出堆栈操作时,堆栈没有数据,则显示“The stack is Empty”

是4:表示显示堆栈中所有元素,元素之间用空格分隔,最后元素后面没有空格。同样 当显示操作没有建立堆栈对象时显示 “stack is not exist”。

是5 :表示显示堆栈的长度。同样 当显示长度操作没有建立堆栈对象时显示 “stack is not exist”。 是其它数字,则退出

输出格式:
参考输入格式中说明。对应不同的功能输出不同。

输入样例:
在这里给出一组输入。例如:

3
2
1 2 3 4 5
5
4
3
3
2 56
4
0
输出样例:
在这里给出相应的输出。例如:

stack is not exist
data error
4
2 3 4 5
5
4
2 3 56

class Stack:
    stack=[]
    maxSize=10
    notInit=True
    def init(self,lst):
        self.notInit=False
        notInit=False
        if len(lst)-1>10:
            s.maxSize=len(lst)-1
        for i in range(len(lst)):
            if i!=0:
                x=lst[i]
                s.push(x)
    def push(self,x):
        self.stack.append(x)

    def pop(self):
        last=self.stack[-1]
        print(last)
        del self.stack[-1]
    def size(self):
        return len(self.stack)
    def show(self):
        first=1
        for i in self.stack:
            if first==1:
                print(i,end='')
                first=0
            else:
                print(" ",end='')
                print(i,end='')
        print()
s=Stack()
notOver=True
while(notOver):
    ls=list(input().split())
    lst=[]
    for i in ls:
        e=int(i)
        lst.append(e)
    if lst[0]==1:
        s.init(lst)
    elif lst[0]==2:
        if len(lst)==1:
            print("data error")
        else:
            if s.notInit==True:
                print("stack is not exist")
            if s.maxSize==len(s.stack):
                print("The stack is full")
            else:
                s.push(lst[1])

    elif lst[0]==3:
        if s.notInit==True:
            print("stack is not exist")
        else:
            if 0==len(s.stack):
                print("The stack is Empty")
            else:
                s.pop()
    elif lst[0]==4:
        if s.notInit==True:
            print("stack is not exist")
        else:
            s.show()
    elif lst[0]==5:
        if s.notInit==True:
            print("stack is not exist")
        else:
            print(len(s.stack))
    else:
        notOver=False
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值