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:二维向量相关推荐
- python二维向量运算模拟_python二维向量运算_[VB.NET][C#]二维向量的基本运算
前言 在数学中,几何向量是指具有大小和方向的几何对象. 在编程中,向量有着广泛的应用,其作用在图形编程和游戏物理引擎方面尤为突出. 第一节 构造函数 通过创建一个二维向量的类(或结构体),实现向量的表 ...
- python图像数据是几维数据_Python图像处理库PIL的ImagePath模块被用于存储和操作二维向量数据...
ImagePath模块被用于存储和操作二维向量数据.Path对象会被传递到ImageDraw模块中. 一.ImagePath模块的函数 1. Path 定义:ImagePath.Path(coordi ...
- uda 3.C++二维向量
二维向量 接下来,你将使用向量来存储矩阵.就像 Python 使用列表列表来存储矩阵一样,C++ 使用的是向量的向量.用于声明二维向量的语法有点复杂. 假设你正在使用 Python,并且想存储一个 3 ...
- 【机器学习】python使用matplotlib进行二维数据绘图并保存为png图片
端到端机器学习导航: [机器学习]python借助pandas加载并显示csv数据文件,并绘制直方图 [机器学习]python使用matplotlib进行二维数据绘图并保存为png图片 [机器学习]p ...
- 《UnityAPI.Vector2二维向量》(Yanlz+Unity+SteamVR+云技术+5G+AI+VR云游戏+Vector2+Normalized+Lerp+Dot+立钻哥哥++OK++)
<UnityAPI.Vector2二维向量> 版本 作者 参与者 完成日期 备注 UnityAPI_Vector2_V01_1.0 严立钻 2020.07.09 #<UnityAPI ...
- 使用Python,Opencv进行二维直方图的计算及绘制
使用Python,Opencv进行二维直方图的计算及绘制 1. 效果图 2. 源码 参考 这篇博客将介绍如何使用Python,Opencv进行二维直方图的计算及绘制(分别用Opencv和Numpy计算 ...
- python怎么画简单图片-Python绘制简易的二维图像
大家好,我是飞向天空的牛. 最近学习了一下用Python绘制简易的二维图像,代码如下图所示:绘图代码 文本如下: import matplotlib.pyplot as plt import nump ...
- Java:Java编程实现导出二维码
Java:Java编程实现导出二维码 目录 输出结果 代码设计 输出结果 更新-- 代码设计 public class QRCodeUtil {private static final String ...
- 4.编程打印一个二维数组中所有元素的和,并打印最大值,最小值(以及它们所在的行号和列号)
/*晕呀,竟然做了一天,还不知道怎样做出来的.....*/ package HomeWork; import java.util.Arrays; /*4.编程打印一个二维数组中所有元素的和,并打印最大 ...
最新文章
- opengl 模板测试 glStencilOp glStencilFunc
- 从文件管理到获取洞见,AI 正在彻底变革企业内容管理
- [云炬创业基础笔记]第十一章创业计划书测试14
- c语言递归函数变量作用域,C语言课程变量的作用域和生存周期、递归.ppt
- 32linux下安装mysql5.7_Linux系统下以RPM方式安装mysql-5.7.9
- 1-2 三位数反转(算法竞赛入门经典)
- DataGrip使用: 表的数据迁移-数据导出sql和执行sql
- springmvc整理
- 服务器中anaconda如何修改环境变量,手动添加anaconda3到环境变量中的方法
- exls导入数据库 php_建站程序推荐:开源免费的PHP在线模拟考试系统PHPEMS可商用...
- android graphic(15)—fence
- 阶段3 2.Spring_03.Spring的 IOC 和 DI_7 spring中bean的细节之作用范围
- html前端验证代码,前端js+html实现简单验证码
- 计算机二级c语言大题答题步骤,全国计算机等级考试二级c语言上机答题技巧
- 10首不可不读的苏轼“最”诗词,人间万事,不过如此!
- 一文搞懂 Flink如何移动计算
- 《经济学原理》——读书笔记(二)
- java 获取上周开始时间和结束时间,上上周开始和上上周结束时间
- 《码农翻身》各章节阅读连接
- p图软件pⅰc_P图教程|教你做超火的iMessage图 所需软件:Picsart QQ_修图软件_滤镜_picsart怎么样_纯白色_相册_我超会p图der_摄影_摄影技巧_修图技巧...
热门文章
- 数据透视表知识点+案例
- 【C++实现】编译原理 免考小队 消除一切左递归
- ZOJ 3952 Fibonacci Sequence Chicken Edition 新构造语言,思路转换
- 淘宝技术发展 - 子柳撰写
- 浏览器兼容css hack,CSS Hack技术解决多浏览器兼容问题
- DZ模板 动漫视频_二次元4 商业版(GBK+UTF) 【价值298】
- php 时间微秒,PHP中使用微秒计算脚本执行时间例子
- ros串口/摄像头 别名及查看绑定
- 软件开发—钱多多—典型用户分析
- 大学物理——原子间相互作用力