Python 编程训练2:二维向量
生活随笔
收集整理的這篇文章主要介紹了
Python 编程训练2:二维向量
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目標
定義一個 Python 類名為 V2,用于表示二維向量,支持下列向量運算:
- 由兩個實數創建一個二維向量:如:v = V2(1.1, 2.2)
- 將一個向量轉換為字符串形式(使用__str__方法)
- 分解(得到x和y的值)
- 兩個二維向量相加,得到新的二維向量(使用__add__方法)
- 支持數乘運算(使用__mul__方法)
編程
Step 1 初始化
使用__init__和__str__方法,當輸入:print V2(1.1, 2.2)時,打印:
V2[1.10, 2.20]程序設計
class V2():x=0y=0def __init__(self, xVal,yVal):self.x = xValself.y = yValdef __str__(self):return "V2[%.2f, %.2f]" % (self.x, self.y)效果:
>>> print(V2(1.1,2.2)) V2[1.10, 2.20] >>>Step 2 getX和getY
程序設計
class V2():x=0y=0def __init__(self, xVal,yVal):self.x = xValself.y = yValdef __str__(self):return "V2[%.2f, %.2f]" % (self.x, self.y)def getX(self):return self.xdef getY(self):return self.y效果:
>>> v.getX() 1.0 >>> v.getY() 2.0 >>> print(v) V2[1.00, 2.00] >>>Step 3 add和mul
程序設計
版本一:
class V2():x=0y=0def __init__(self, xVal,yVal):self.x = xValself.y = yValdef __str__(self):return "V2[%.2f, %.2f]" % (self.x, self.y)def getX(self):return self.xdef getY(self):return self.ydef add(self, v):return "[%.2f, %.2f]" % (self.x+v.x, self.y+v.y)def mul(self, k):return "[%.2f, %.2f]" % (self.x*k, self.y*k)驗證:
>>> a=V2(1.0,2.0) >>> b=V2(2.2,3.3) >>> print(a.add(b)) [3.20, 5.30] >>> print(a.mul(2)) [2.00, 4.00] >>> print(a.add(b).mul(-1)) Traceback (most recent call last):File "<pyshell#205>", line 1, in <module>print(a.add(b).mul(-1)) AttributeError: 'str' object has no attribute 'mul'問題:
add() 返回的是字符串,無法繼續進行。
解決:返回一個二維向量即可
版本二:
class V2():x=0y=0def __init__(self, xVal,yVal):self.x = xValself.y = yValdef __str__(self):return "V2[%.2f, %.2f]" % (self.x, self.y)def getX(self):return self.xdef getY(self):return self.ydef add(self, v):return V2(self.x+v.x,self.y+v.y)def mul(self, k):return V2(self.x*k,self.y*k)驗證:
>>> a=V2(1.0,2.0) >>> b=V2(2.2,3.3) >>> print(a.add(b).mul(-1)) V2[-3.20, -5.30]Step 4 重載運算符
使用 __add__ 和 __mul__
示例:
>>> print V2(1.1, 2.2) + V2(3.3, 4.4) V2[4.4,6.6]程序設計
class V2():x=0y=0def __init__(self, xVal,yVal):self.x = xValself.y = yValdef __str__(self):return "V2[%.2f, %.2f]" % (self.x, self.y)def getX(self):return self.xdef getY(self):return self.ydef add(self, v):return V2(self.x+v.x,self.y+v.y)def mul(self, k):return V2(self.x*k,self.y*k)def __add__(self, v):return self.add(v)def __mul__(self, v):return self.mul(v)驗證:
>>> a=V2(1.0,2.0) >>> b=V2(2.2,3.3) >>>> print(a+b) V2[3.20, 5.30] >>> print(V2(1.1, 2.2) + V2(5, 6)) V2[6.10, 8.20] >>> print(V2(1.1, 2.2) * 2) V2[2.20, 4.40]測試程序:
生成0~10內隨即小數,保留兩位
round(random.uniform(0,10),2)單次測試
def unitTestV2():import randoma=round(random.uniform(0,10),2)b=round(random.uniform(0,10),2)v1 = V2(a,b)a=round(random.uniform(0,10),2)b=round(random.uniform(0,10),2)v2 = V2(a,b)print(v1)print(v2)k = random.randint(0,9)print("k = %d\n" %(k))print("add test:")addV = v1 + v2if (addV.x == (v1.x + v2.x)) and (addV.y == (v1.y + v2.y)):print("add test OK!!!")print(addV)else:print("add test Error!!!")print("\n")print("mul test:")mulV1=v1 * kif (mulV1.x == (v1.x * k)) and (mulV1.y == (v1.y * k)):print("mul v1 test OK!!!")print(mulV1)else:print("mul v1 test Error!!!")mulV2=v2 * kif (mulV2.x == (v2.x * k)) and (mulV2.y == (v2.y * k)):print("mul v2 test OK!!!")print(mulV2)else:print("mul v2 test Error!!!")多次測試
>>> def lotTest(n):times = nwhile n:print("------------------test %d--------------" %(times-n+1))unitTestV2()n=n-1結果
>>> lotTest(5) ------------------test 1-------------- V2[6.39, 4.87] V2[8.20, 8.90] k = 7add test: add test OK!!! V2[14.59, 13.77]mul test: mul v1 test OK!!! V2[44.73, 34.09] mul v2 test OK!!! V2[57.40, 62.30] ------------------test 2-------------- V2[0.16, 1.44] V2[3.65, 5.84] k = 0add test: add test OK!!! V2[3.81, 7.28]mul test: mul v1 test OK!!! V2[0.00, 0.00] mul v2 test OK!!! V2[0.00, 0.00] ------------------test 3-------------- V2[1.82, 4.23] V2[0.90, 0.51] k = 2add test: add test OK!!! V2[2.72, 4.74]mul test: mul v1 test OK!!! V2[3.64, 8.46] mul v2 test OK!!! V2[1.80, 1.02] ------------------test 4-------------- V2[8.21, 9.14] V2[6.22, 0.88] k = 8add test: add test OK!!! V2[14.43, 10.02]mul test: mul v1 test OK!!! V2[65.68, 73.12] mul v2 test OK!!! V2[49.76, 7.04] ------------------test 5-------------- V2[8.58, 7.01] V2[1.22, 5.70] k = 4add test: add test OK!!! V2[9.80, 12.71]mul test: mul v1 test OK!!! V2[34.32, 28.04] mul v2 test OK!!! V2[4.88, 22.80]總結
以上是生活随笔為你收集整理的Python 编程训练2:二维向量的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux Polkit本地权限提升漏洞
- 下一篇: python两张图合成一张_Python