练习1|学习笔记

简介: 快速学习练习1

开发者学堂课程【Python 入门 2020年版练习1】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/639/detail/10410


练习1

 

内容介绍:

一、题目框架

二、具体做法

 

一、题目框架

定义一个点类 Pointer

属性是横向坐标 x 与纵向坐标 y

定义一个圆类 circle

属性有圆心点 cp 与半径 radius

class pointer(object) :

#继承自 object

def _init_(self,x,y):

#初始化有 XY 坐标

self.x =x

self.y = y

class Circle(object):

#Circle 类也继承自 object

def _init_(self,cp, radius) :

#Circle 类中的 cp 属性 = p , radius(半径) = 3,cp是一个对象,cp 中有 x,y属性

self.cp = cp

self.radius = radius

p = Pointer(0, 0)

#定义一个圆心点坐标,创建了一个 Pointer 对象

c = circle(p,3)

#创建好的 Pointer 对象传递给了 Circle 对象 c

print(hex(id(p)),hex(id(c)))

#打印 IP 地址

image.png

在内存空间里面,创建了 Pointer 对象circle 对象,分别获取 p 和 c 的地址,p的属性为 x=0,y=0circle 中调用创建方法就会把 p 传给 cp,c 中的 cp 指向 p内存空间,radius=3

 

二、具体做法

方法有:

1.求圆的面积

2.求圆的周长

3.求指定点与圆的关系

提示∶关系有三种【圆内圆外圆上】

设计到的数学公式:指定点与圆心点之间的距离与圆的半径进行比较

import math

class Pointer(object):

#pointer继承自object

def _init__(self, x, y):

self.x =x

self.y = y

class Circle(object) :

#circle 也继承自 object

def _init__(self, cp, radius): #

#其中 cp = p , radius(半径) = 3

self.cp = cp

self.radius = radius

def get_area(self):

#定义圆的面积

return self.radius **2 *math. Pi

#圆的面积求法 radius(半径)的平方乘以 pi

def get_length(self):

#定义圆的周长

return self.radius * 2* math.pi

#圆的周长求法 radius(半径)的乘以2再乘以 pi

p = Pointer(0,0)

c=circle(p, 3)

print(c.get_area())

print(c.get_length())

运行结果:

28.274333882308138

18.84955592153876

#面积和周长都可以被拿到。

def relationship(self, point):

#求一个点和圆的关系。有三种关系:在圆内,在圆外,在圆上Point 需要判断的点

image.png

点和圆心的关系,看点离圆心的距离,点和圆心的距离大于半径,点在圆外边。

距离小于半径,在圆里边,点正好等于半径,在圆上。所以判断点和圆的关系就需要计算点到圆心的距离。根据点到圆心的距离来判断,大于半径等于半径或小于半径。

distance = math.sqrt((point.x - self.cp.x)** 2+ (point.y - self.cp.y)** 2 )

#点到圆心的距离求法为该点的X值减去圆心的X值的平方,加上该点的Y值减去圆心的Y值的平方开根号。计算圆心到point的距离,会存在精度丢失的问题

if distance > self.radius** 2:

#点到圆心的距离大于半径。

print( "在圆外)

elif distance < self.radius** 2:

#点到圆心的距离小于半径。

print( '在圆内')

else:

#除了上面2种情况之外,就是等于的情况

print("在圆上')

p1 = Pointer ( 10,10)

c.relationship(p1)

#判断 P1点与圆心的关系。

p2 = Pointer(2,2)

c.relationship(p2)

#判断 P2点与圆心的关系。

p3 = Pointer(e,e)

c.relationship(p3)

#判断 P3点与圆心的关系。

运行结果:

在圆外

在圆内

在园外

但是这个代码也存在 bug, Distance 所求得的数字不是精确数字,它是无理数是无限不循环小数,代码中所算的值只能是无限接近于正确值。

为了更趋近于正确值,可以四舍五入求距离的小数点后6位。:distance = round(math.sqrt((point.x - self.cp.x)** 2+(point.y - self.cp.y)** 2), 6),这里为了更方便,所求得的值不开根号直接与距离的平方相比较。

不过不管怎么处理,都存在精度丢失的问题,是不可避免的,必要的时候可以4舍5入小数点后尽量多取几位小数相比较。

相关文章
|
机器学习/深度学习 算法 数据挖掘
总结与回顾| 学习笔记
快速学习总结与回顾。
总结与回顾| 学习笔记
|
自然语言处理 前端开发 Java
TermQuery|学习笔记
快速学习 TermQuery。
126 0
TermQuery|学习笔记
|
安全 Java 程序员
Potainer 使用|学习笔记
快速学习 Potainer 使用
Potainer 使用|学习笔记
|
C++ 开发者 Python
|
存储 Java 开发者
BinaryTree|学习笔记
快速学习BinaryTree
BinaryTree|学习笔记
|
存储 自然语言处理 算法
课程计划|学习笔记
快速学习课程计划
|
算法 开发者 索引
FuzzyQuery|学习笔记
快速学习 FuzzyQuery。
230 0
|
Java 开发者
接口标准|学习笔记
快速学习接口标准
103 0
接口标准|学习笔记
|
开发者
整合的实现 | 学习笔记
快速学习整合的实现.
整合的实现 | 学习笔记
|
弹性计算 安全
学习笔记1
ECS云服务器介绍
1244 0
学习笔记1