class NumberError(Exception): def __init__(self,data): Exception. __init__(self,data) self.data=data def __str__(self): return self.data+':非法数值(<0)' def total(data): total=0 for i in data: if i<0:raise NumberError(str(i)) total+=i return total #测试代码 datal=(44,78,90,80,55) print('总计=',total(datal)) data2=(44,78,90,-80,55) print('总计=',total(data2))
时间: 2024-04-05 13:31:11 浏览: 129
这段代码是一个简单的Python程序,其中定义了一个自定义异常类 NumberError,并在 total 函数中使用了这个异常类。total 函数接受一个数据元组作为参数,然后计算数据元组中所有元素的和。如果数据元组中存在小于 0 的数值,total 函数会抛出 NumberError 异常。
在测试代码中,分别定义了两个数据元组 datal 和 data2,然后调用 total 函数计算它们的和。其中 datal 中的所有数值都是非负数,而 data2 中包含了一个小于 0 的数值,因此调用 total 函数计算 data2 的和时会抛出 NumberError 异常。
相关问题
class RecordNode(object): def __init__(self, key, data): self.key = key self.data = data class SqList(object): def __init__(self, maxSize): self.maxSize = maxSize self.list = [None]*self.maxSize self.len = 0 def insert(self,i,x): if self.len == self.maxSize: raise Exception("顺序表已满") if i < 0 or i > self.len-1: raise Exception("插入位置不合理") for j in range(self.len-1 , i , -1): self.list[j] = self.list[j-1] self.list[i] = x self.len += 1这段代码有错吗
这段代码存在一个语法错误和一个逻辑错误。
语法错误:在RecordNode类的构造函数中,应该是`__init__`而不是`init`。因此,应该将以下代码:
```
class RecordNode(object):
def init(self, key, data):
self.key = key
self.data = data
```
改为:
```
class RecordNode(object):
def __init__(self, key, data):
self.key = key
self.data = data
```
逻辑错误:在SqList类的insert方法中,应该将`self.list[i] = x`移动到for循环之外。因此,应该将以下代码:
```
for j in range(self.len-1 , i , -1):
self.list[j] = self.list[j-1]
self.list[i] = x
```
改为:
```
for j in range(self.len-1 , i-1 , -1):
self.list[j+1] = self.list[j]
self.list[i] = x
```
这样才能正确地将新元素插入到指定位置。
修改后的代码如下:
```
class RecordNode(object):
def __init__(self, key, data):
self.key = key
self.data = data
class SqList(object):
def __init__(self, maxSize):
self.maxSize = maxSize
self.list = [None]*self.maxSize
self.len = 0
def insert(self,i,x):
if self.len == self.maxSize:
raise Exception("顺序表已满")
if i < 0 or i > self.len:
raise Exception("插入位置不合理")
for j in range(self.len-1 , i-1 , -1):
self.list[j+1] = self.list[j]
self.list[i] = x
self.len += 1
```
注意,修改后的代码中,插入位置允许在表的末尾插入元素,因此判断条件变为`i < 0 or i > self.len`。
class Queue: def __init__(self, limit=10): self.data = [None] * limit self.head = -1 self.tail = -1
def is_empty(self): return self.head == -1 def is_full(self): return (self.tail + 1) % len(self.data) == self.head def enqueue(self, val): if self.is_full(): raise Exception("Queue is full") if self.head == -1: self.head = 0 self.tail = (self.tail + 1) % len(self.data) self.data[self.tail] = val def dequeue(self): if self.is_empty(): raise Exception("Queue is empty") val = self.data[self.head] if self.head == self.tail: self.head = -1 self.tail = -1 else: self.head = (self.head + 1) % len(self.data) return val
阅读全文