在类中调用函数来设置lis的元素

2024-10-06 11:28:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着实现我的第一堂课,部分是为了打破建模和解决一个我有困难的数学问题。我不认为我的问题与班级有关,但是。。。?你知道吗

错误一直告诉我:“NameError:全局名称'corner2'未定义”

我尝试移动函数调用,但它仍然无法识别它,因此我将它放回init函数的列表声明中。你知道吗

这是我的密码:

class RotatedRectangle(object):

def corner1(a,b):
    a/=2
    b/=2
    x=(a-b)*math.sin(math.pi/4)
    y=(a+b)*math.sin(math.pi/4)
    return (x,y)

def corner2(a,b):
    a/=-2
    b/=2
    x=(a-b)*math.sin(math.pi/4)
    y=(a+b)*math.sin(math.pi/4)
    return (x,y)

def corner3(a,b):
    a/=-2
    b/=-2
    x=(a-b)*math.sin(math.pi/4)
    y=(a+b)*math.sin(math.pi/4)
    return (x,y)

def corner4(a,b):
    a/=2
    b/=2
    x=(a-b)*math.sin(math.pi/4)
    y=(a+b)*math.sin(math.pi/4)
    return (x,y)

def __init__(self, a, b,):
        """Return a Rotated rectangle object whose name is a function of a and b."""
        self.name = str(a) + "," + str(b) + "-rectangle"
        self.corners = [corner1(a,b), corner2(a,b), corner3(a,b), corner4(a,b)]



"""A rectangle with sides equal to even integers a and b is drawn on the          Cartesian plane.Its center (the intersection point of its diagonals) coincides with the point (0, 0),but the sides of the rectangle are not parallel to the axes; instead, they are forming 45 degree angles with the axes.

How many points with integer coordinates are located inside the given   rectangle (including on its sides)? """

Tags: oftheselfreturnobjectinitdefwith
3条回答
  • 必须使用self作为类方法的第一个参数
  • 在类中调用类方法时,必须传递self作为它们的第一个参数(以便类知道您在谈论当前对象)
  • 在类中定义方法时必须缩进

    import math
    class RotatedRectangle(object):
        def corner1(self,a,b):
            a/=2
            b/=2
            x=(a-b)*math.sin(math.pi/4)
            y=(a+b)*math.sin(math.pi/4)
            return (x,y)
    
        def corner2(self,a,b):
            a/=-2
            b/=2
            x=(a-b)*math.sin(math.pi/4)
            y=(a+b)*math.sin(math.pi/4)
            return (x,y)
    
        def corner3(self,a,b):
            a/=-2
            b/=-2
            x=(a-b)*math.sin(math.pi/4)
            y=(a+b)*math.sin(math.pi/4)
            return (x,y)
    
        def corner4(self,a,b):
            a/=2
            b/=2
            x=(a-b)*math.sin(math.pi/4)
            y=(a+b)*math.sin(math.pi/4)
            return (x,y)
    
        def __init__(self, a, b,):
            """Return a Rotated rectangle object whose name is a function of a and b."""
            self.name = str(a) + "," + str(b) + "-rectangle"
            self.corners = [self.corner1(a,b), self.corner2(a,b), self.corner3(a,b), self.corner4(a,b)]
    

您有一些识别错误,并且忘记添加self参数,应该是:

import math

class RotatedRectangle(object):
  def __init__(self, a, b,):
        """Return a Rotated rectangle object whose name is a function of a and b."""
        self.name = str(a) + "," + str(b) + "-rectangle"
        self.corners = [self.corner1(a,b), self.corner2(a,b), self.corner3(a,b), self.corner4(a,b)]

  def corner1(self,a,b):
      a/=2
      b/=2
      x=(a-b)*math.sin(math.pi/4)
      y=(a+b)*math.sin(math.pi/4)
      return (x,y)

  def corner2(self,a,b):
      a/=-2
      b/=2
      x=(a-b)*math.sin(math.pi/4)
      y=(a+b)*math.sin(math.pi/4)
      return (x,y)

  def corner3(self,a,b):
      a/=-2
      b/=-2
      x=(a-b)*math.sin(math.pi/4)
      y=(a+b)*math.sin(math.pi/4)
      return (x,y)

  def corner4(self,a,b):
      a/=2
      b/=2
      x=(a-b)*math.sin(math.pi/4)
      y=(a+b)*math.sin(math.pi/4)
      return (x,y)

我强烈建议你阅读这个问题和所有的答案What is the purpose of self?

在Python中定义类的方法时,第一个参数通常设置为“self”。然后,在调用该方法时,在其前面加上self.

以下是工作代码:

import math

class RotatedRectangle(object):

    def corner1(self,a,b):
        a/=2
        b/=2
        x=(a-b)*math.sin(math.pi/4)
        y=(a+b)*math.sin(math.pi/4)
        return (x,y)

    def corner2(self,a,b):
        a/=-2
        b/=2
        x=(a-b)*math.sin(math.pi/4)
        y=(a+b)*math.sin(math.pi/4)
        return (x,y)

    def corner3(self,a,b):
        a/=-2
        b/=-2
        x=(a-b)*math.sin(math.pi/4)
        y=(a+b)*math.sin(math.pi/4)
        return (x,y)

    def corner4(self,a,b):
        a/=2
        b/=2
        x=(a-b)*math.sin(math.pi/4)
        y=(a+b)*math.sin(math.pi/4)
        return (x,y)

    def __init__(self, a, b,):
            """Return a Rotated rectangle object whose name is a function of a and b."""
            self.name = str(a) + "," + str(b) + "-rectangle"
            self.corners = [self.corner1(a,b), self.corner2(a,b), self.corner3(a,b), self.corner4(a,b)]

相关问题 更多 >