日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python 编程训练2:二维向量

發布時間:2023/12/8 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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:二维向量的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。