一、实验目的
能够掌握封装编程、掌握继承编程、掌握多态编程。
二、任务要求
1.解释面向对象程序设计中封装、继承、多态的概念。
2.写出下面程序的运行结果。
3.写出下面程序的运行结果。
4.设计并实现一个数组类,要求把包含数字的列表、元组或range对象转换为数组,并能够修改数组中指定位置上的元素值。
三、面向对象程序设计中封装、继承、多态的概念
1.封装
指的是将数据及其相关操作整合在一起,构成独立的对象。通过这种方式,能够隐匿对象内部的实现细节,仅向外部展示必要的接口供其使用。如此一来,不但提升了代码的安全性、可维护性,还增强了代码的可重用性。
- 继承
则允许一个类从已有类中获取属性和方法,进而实现代码的扩展和复用。子类能够继承父类的特性,并可进行个性化的扩展与修改。这一特性有助于减少代码冗余,提高代码的可扩展性。
3.多态
意味着同一个方法在不同的对象中能够有各异的实现方式。借助多态,可依据对象的实际类型,动态地调用相应的方法。此概念大大增强了代码的灵活性和可扩展性。
四、任务二及三程序运行结果
1.任务二
1)运用到range()函数。
for i in range () 就是给i赋值。for i in range() 在 Python 中是一种常见的循环结构,其作用是通过 range()函数生成一个整数序列,并按顺序逐个将整数赋值给变量 i,从而实现对序列中每个整数的遍历。
Range()函数具有以下的特点
(1)能够方便地控制代码在特定范围内重复执行。 依据设定的起始值、结束值和步长,依次访问该范围内的每个整数。 (2)提供了很大的灵活性,可以根据需求修改循环的范围和步长。 (3)常用于遍历数组、列表等数据结构,或执行重复任务,如处理多个文件或数据项。 (4) 还可用于生成特定数量的重复元素。for i in range()是一种简单而实用的循环方式,在 Python 编程中被广泛应用。
2)这段代码的解释。
s = 0: 定义了一个变量 s并初始化为 0。
for i in range(1, 101):使用 range()函数生成一个从 1 到 100 的整数序列,并依次将每个整数赋值给变量 i,进行循环。在循环体中,s += i表示将当前的 i加到变量s上,实现对 s的累加。
else部分:只有当 for循环正常结束(即没有被 break语句中断)时才会执行。在这个例子中,循环正常结束后会打印出 1。 这段代码的作用是通过循环将 1 到 100 的整数相加,并将结果存储在变量 s中。最后,在循环结束后执行else部分的代码,输出 1。
图1 任务二运行结果
2.任务三
除了用到任务二中所述语句外,还使用了break。在if...else语句中间插入一个break,表示如果满足某条件,则直接结束,下面的语句不再执行。
如此一来,该代码的含义表示,虽然rang(1,101),但i=50时break,即从1开始,加到50结束。
图2 任务三运行结果
- 任务四设计
程序设计实例1
1.设计代码为:
class Array:
def __init__(self, data):
self.data = list(data)
def get_element(self, index):
if 0 <= index < len(self.data):
return self.data[index]
else:
raise ValueError("Index out of range")
def set_element(self, index, value):
if 0 <= index < len(self.data):
self.data[index] = value
else:
raise ValueError("Index out of range")
arr = Array([1, 2, 3, 4, 5])
print("原始数组:", arr.data) # 输出: [1, 2, 3, 4, 5]
print("数组第 2 个元素:", arr.get_element(1)) # 输出: 2
arr.set_element(1, 10)
print("修改后数组:", arr.data) # 输出: [1, 10, 3, 4, 5]
图3 任务四设计结果展示1
- 代码解释。
- class Array:定义了一个名为Array的类。
- _init__(self, data):这是构造函数,用于初始化类的实例。它接受一个参数 data ,并将其转换为列表存储在实例变量 self.data 中。
- get_element(self, index): 这个方法用于获取数组中指定位置的元素值。它检查索引是否在有效范围内(0 到数组长度减 1)。如果索引有效,返回对应位置的元素值。
- set_element(self, index, value):这个方法用于设置数组中指定位置的元素值。同样检查索引的有效性。如果有效,将指定位置的元素设置为给定的值。 创建了一个 Array 类的实例 arr ,并传入一个列表作为初始数据。通过 get_element 方法获取数组中第 2 个元素的值。通过 set_element 方法将第 2 个元素的值修改为 10。 最后输出修改后的数组。
程序设计实例2
- 代码如下
class Array:
def __init__(self, initial_data=None):
if initial_data:
self.data = initial_data
else:
self.data = []
def append(self, element):
self.data.append(element)
def remove(self, index):
if 0 <= index < len(self.data):
del self.data[index]
else:
raise ValueError("Invalid index")
def get_length(self):
return len(self.data)
# 创建 Array 实例
arr = Array([1, 2, 3])
# 追加元素
arr.append(4)
# 移除指定位置的元素
arr.remove(1)
# 获取数组长度
length = arr.get_length()
print("Array length:", length)
print("Updated array:", arr.data)
- 结果如下
图3 任务四设计结果展示2
- 代码解释
首先,定义了一个名为 Array 的类。__init__ 是构造函数,它接受一个参数 initial_data。如果提供了 initial_data,就将其赋值给 self.data,否则将 self.data 初始化为一个空列表。
append 方法用于向数组中添加元素。它将传入的元素添加到 self.data 列表的末尾。 remove 方法用于移除数组中指定位置的元素。它检查索引是否有效(在有效范围内),如果有效就使用 del 语句从 self.data 列表中删除对应位置的元素;否则,抛出一个 ValueError 异常。 get_length 方法返回 self.data 列表的长度。
接下来,创建了一个 Array 类的实例 arr,并传入一个包含初始数据 [1, 2, 3] 的列表。 然后,使用 append 方法向数组中添加一个元素 4。 接着,使用 remove 方法移除索引为 1 的元素。
最后,通过 get_length 方法获取数组的长度,并打印出来。同时也打印出更新后的数组内容。