目标

定义一个 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:二维向量相关推荐

  1. python二维向量运算模拟_python二维向量运算_[VB.NET][C#]二维向量的基本运算

    前言 在数学中,几何向量是指具有大小和方向的几何对象. 在编程中,向量有着广泛的应用,其作用在图形编程和游戏物理引擎方面尤为突出. 第一节 构造函数 通过创建一个二维向量的类(或结构体),实现向量的表 ...

  2. python图像数据是几维数据_Python图像处理库PIL的ImagePath模块被用于存储和操作二维向量数据...

    ImagePath模块被用于存储和操作二维向量数据.Path对象会被传递到ImageDraw模块中. 一.ImagePath模块的函数 1. Path 定义:ImagePath.Path(coordi ...

  3. uda 3.C++二维向量

    二维向量 接下来,你将使用向量来存储矩阵.就像 Python 使用列表列表来存储矩阵一样,C++ 使用的是向量的向量.用于声明二维向量的语法有点复杂. 假设你正在使用 Python,并且想存储一个 3 ...

  4. 【机器学习】python使用matplotlib进行二维数据绘图并保存为png图片

    端到端机器学习导航: [机器学习]python借助pandas加载并显示csv数据文件,并绘制直方图 [机器学习]python使用matplotlib进行二维数据绘图并保存为png图片 [机器学习]p ...

  5. 《UnityAPI.Vector2二维向量》(Yanlz+Unity+SteamVR+云技术+5G+AI+VR云游戏+Vector2+Normalized+Lerp+Dot+立钻哥哥++OK++)

    <UnityAPI.Vector2二维向量> 版本 作者 参与者 完成日期 备注 UnityAPI_Vector2_V01_1.0 严立钻 2020.07.09 #<UnityAPI ...

  6. 使用Python,Opencv进行二维直方图的计算及绘制

    使用Python,Opencv进行二维直方图的计算及绘制 1. 效果图 2. 源码 参考 这篇博客将介绍如何使用Python,Opencv进行二维直方图的计算及绘制(分别用Opencv和Numpy计算 ...

  7. python怎么画简单图片-Python绘制简易的二维图像

    大家好,我是飞向天空的牛. 最近学习了一下用Python绘制简易的二维图像,代码如下图所示:绘图代码 文本如下: import matplotlib.pyplot as plt import nump ...

  8. Java:Java编程实现导出二维码

    Java:Java编程实现导出二维码 目录 输出结果 代码设计 输出结果 更新-- 代码设计 public class QRCodeUtil {private static final String ...

  9. 4.编程打印一个二维数组中所有元素的和,并打印最大值,最小值(以及它们所在的行号和列号)

    /*晕呀,竟然做了一天,还不知道怎样做出来的.....*/ package HomeWork; import java.util.Arrays; /*4.编程打印一个二维数组中所有元素的和,并打印最大 ...

最新文章

  1. opengl 模板测试 glStencilOp glStencilFunc
  2. 从文件管理到获取洞见,AI 正在彻底变革企业内容管理
  3. [云炬创业基础笔记]第十一章创业计划书测试14
  4. c语言递归函数变量作用域,C语言课程变量的作用域和生存周期、递归.ppt
  5. 32linux下安装mysql5.7_Linux系统下以RPM方式安装mysql-5.7.9
  6. 1-2 三位数反转(算法竞赛入门经典)
  7. DataGrip使用: 表的数据迁移-数据导出sql和执行sql
  8. springmvc整理
  9. 服务器中anaconda如何修改环境变量,手动添加anaconda3到环境变量中的方法
  10. exls导入数据库 php_建站程序推荐:开源免费的PHP在线模拟考试系统PHPEMS可商用...
  11. android graphic(15)—fence
  12. 阶段3 2.Spring_03.Spring的 IOC 和 DI_7 spring中bean的细节之作用范围
  13. html前端验证代码,前端js+html实现简单验证码
  14. 计算机二级c语言大题答题步骤,全国计算机等级考试二级c语言上机答题技巧
  15. 10首不可不读的苏轼“最”诗词,人间万事,不过如此!
  16. 一文搞懂 Flink如何移动计算
  17. 《经济学原理》——读书笔记(二)
  18. java 获取上周开始时间和结束时间,上上周开始和上上周结束时间
  19. 《码农翻身》各章节阅读连接
  20. p图软件pⅰc_P图教程|教你做超火的iMessage图 所需软件:Picsart QQ_修图软件_滤镜_picsart怎么样_纯白色_相册_我超会p图der_摄影_摄影技巧_修图技巧...

热门文章

  1. 数据透视表知识点+案例
  2. 【C++实现】编译原理 免考小队 消除一切左递归
  3. ZOJ 3952 Fibonacci Sequence Chicken Edition 新构造语言,思路转换
  4. 淘宝技术发展 - 子柳撰写
  5. 浏览器兼容css hack,CSS Hack技术解决多浏览器兼容问题
  6. DZ模板 动漫视频_二次元4 商业版(GBK+UTF) 【价值298】
  7. php 时间微秒,PHP中使用微秒计算脚本执行时间例子
  8. ros串口/摄像头 别名及查看绑定
  9. 软件开发—钱多多—典型用户分析
  10. 大学物理——原子间相互作用力