为什么我的类方法在调用并检查一个运行良好的方法时会出错?

问题描述 投票:0回答:0

给定一个正方形,该正方形是一个以特定点为中心定义的对象,并且具有边长,当正方形包含在圆中时,contains_square 方法应该返回 True,否则返回 False。我首先定义了一种方法,该方法可以成功判断某个点是否包含在具有给定圆心和半径的圆内。要确定圆是否包含正方形,contains_square 方法使用 contains_point 方法检查圆角是否在圆内。如果它们包含在圆圈内,它应该返回 true。然而,当给定一个圆心为 (1, 2) 且半径为 4 的圆形对象时,c = Circle((1, 2), 4) 和两个正方形的定义方式与 s1 = Square((2, 2) , 1) 和 s2 = Square((3, 2), 6) 第一个正确返回 true 但第二个错误返回 true。

这是代码

import math

class Circle(object):
    def __init__(self, center, radius):
        self.center = center
        self.radius = radius

    def get_center(self):
        return self.center

    def get_radius(self):
        return self.radius

    def contains_point(self, p):
        n1 = p[0] - self.center[0]
        n2 = p[1] - self.center[1]

        distance = n1 + n2
        if distance <= (self.radius * self.radius):
            return True
        else:
            return False

    def contains_square(self, s):
        ur = s.ur
        ul = s.ul
        lr = s.lr
        ll = s.ll

        if self.contains_point(ur) and self.contains_point(ul) and self.contains_point(lr) and self.contains_point(ll):
            return True
        else:
            return False

    def contains(self, x):
        if isinstance(x, tuple):
            self.contains_point(x)
        elif isinstance(x, Square):
            self.contains_square(x)
        else:
            cen1 = self.center
            cen2 = x.get_center()

            n1 = cen2[0] - cen1[0]
            n2 = cen2[1] - cen1[1]
            distance = math.sqrt(n1 + n2)
            total = distance + x.get_radius()

            if total < self.radius:
                return True
            else:
                return False

我尝试了很多方法,例如将检查扩展到所有四个角,将角定义为单独的变量(即调用 squares 方法的 ur、ul、lr 和 ll 变量),以及使用嵌套的 if 语句而不是 and 语句.我不确定哪一部分不正确以及错误返回的来源。任何帮助将不胜感激。

python python-3.x logic
© www.soinside.com 2019 - 2024. All rights reserved.