实验报告六、自定义类模拟三维向量及其运算

一、实验目的:

1、了解如何定义一个类。 

2、了解如何定义类的私有数据成员和成员方法。

3、了解如何使用自定义类实例化对象。

 

二、实验内容: 

1、定义一个三维向量类,并定义相应的特殊方法实现两个该类对象之间的加、减运算(要求支持运算符+、一),实现该类对象与标量的乘、除运算(要求支持运算符
*、/),以及向量长度的计算(要求使用属性实现)。

2、继承6.3节例6-1中的Person类创建Student类,添加新的方法用来设置学生专业,然后生成该类对象并显示信息。

3、 实验步骤:

1. 程序代码

T1:

class MyArray:

   def __init__(self,x,y,z):

       self.__x=x

       self.__y=y

       self.__z=z

   def add(self,a):

       x=self.__x+a.__x

       y=self.__y+a.__y

       z=self.__z+a.__z

       print("和=({},{},{})".format(x,y,z))

   def sub(self,a):

       x=self.__x-a.__x

       y=self.__y-a.__y

       z=self.__z-a.__z

       print("差=({},{},{})".format(x,y,z))

   def mul(self,a):

       x=self.__x*a

       y=self.__y*a

       z=self.__z*a

       print("乘积=({},{},{})".format(x,y,z))

   def truediv(self,a):

       x=self.__x/a

       y=self.__y/a

       z=self.__z/a

       print("商=({},{},{})".format(x,y,z))

   def length(self):

       a=pow(pow(self.__x,2)+pow(self.__y,2)+pow(self.__z,2),0.5)

       print("长度为:{}".format(round(a,3)))

print('请输入六个数a,b,c,d,e,f:')

a,b,c,d,e,f=map(int,input().split())

print('N1:',(a,b,c))

print('N2:',(d,e,f))

n1=MyArray(a,b,c)

n2=MyArray(d,e,f)

n1.add(n2)

n1.sub(n2) 

n1.mul(2)

n1.truediv(2)

n1.length()   

 

T2:

class Person(object):

   def __init__(self, name='', age=20, sex='man'):

       self.setName(name)

       self.setAge(age)

       self.setSex(sex)

   def setName(self, name):

       if not isinstance(name, str):

           print('姓名必须是字符串。')

           return

       self.__name = name

   def setAge(self, age):

       if not isinstance(age, int) or age<0:

           print('年龄必须是正整数。')

           return

       self.__age = age

   def setSex(self, sex):

       if sex not in ('man', 'woman'):

           print('性别必须是 "man" 或者 "woman"。')

           return

       self.__sex = sex

   def show(self):

       print(self.__name)

       print(self.__age)

       print(self.__sex)

class Student(Person):

   def __init__(self, name='', age=30, sex='man', major='Computer'):

       super(Student, self).__init__(name, age, sex)

       self.setMajor(major) 

   def setMajor(self, major):

       if not isinstance(major, str):

           print('专业必须是字符串。')

           return

       self.__major = major

   def show(self):

       super(Student, self).show()

       print(self.__major)

if __name__  == '__main__':

   zhangsan = Person('Zhang San', 19, 'man')

   zhangsan.show()

   lisi = Student('Li Si',32, 'man', 'Math')

   lisi.show()

 

2. 结果图片

T1:

 

T2:

Python自定义可以用来模拟三维向量及其运算。我们可以定义一个Vector,其中包含三个属性x、y、z,分别表示向量在三个坐标轴上的分量。同时,我们还可以定义一些方法来实现向量的加减、点乘、叉乘等运算。 下面是一个简单的示例代码: ``` class Vector: def __init__(self, x, y, z): self.x = x self.y = y self.z = z def __add__(self, other): return Vector(self.x + other.x, self.y + other.y, self.z + other.z) def __sub__(self, other): return Vector(self.x - other.x, self.y - other.y, self.z - other.z) def dot(self, other): return self.x * other.x + self.y * other.y + self.z * other.z def cross(self, other): x = self.y * other.z - self.z * other.y y = self.z * other.x - self.x * other.z z = self.x * other.y - self.y * other.x return Vector(x, y, z) def __str__(self): return "({}, {}, {})".format(self.x, self.y, self.z) ``` 在这个示例中,我们定义了一个Vector,其中包含了三个属性x、y、z,以及一些方法来实现向量的加减、点乘、叉乘等运算。其中,__add__和__sub__方法分别用来实现向量的加法和减法,dot方法用来实现向量的点乘,cross方法用来实现向量的叉乘,__str__方法用来返回向量的字符串表示。 使用这个Vector,我们可以很方便地进行向量运算。例如: ``` v1 = Vector(1, 2, 3) v2 = Vector(4, 5, 6) print(v1 + v2) # 输出 (5, 7, 9) print(v1 - v2) # 输出 (-3, -3, -3) print(v1.dot(v2)) # 输出 32 print(v1.cross(v2)) # 输出 (-3, 6, -3) ``` 这样,我们就可以用Python自定义模拟三维向量及其运算了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值