以下代码中的“ y的s或s [0]”是什么?

时间:2019-09-27 22:50:47

标签: python-3.x

在以下使用python的代码中,是否正在使用def __sub__()def __eq__()?我习惯将它们视为variableObject.action,就像说my_dog.sit()一样。但是,使用双下划线时,似乎很简单,只需调用class Point3D()中可能会用到的def is_win()

我也很难读取这个特定的while not s or s[0] in Yy,因为它的[0]似乎表示只需输入即可退出而不进入循环。此外,我对这里如何使用Yy感到困惑。

我尝试输入s[1],它说索引超出范围,确认输入要退出。它不应该只是读while not s[0]以获得更简洁的代码吗?

    class Point3D:
             '''Three dimensional point class, supporting
                subtraction and comparison. '''

         def __init__(self, x, y, z):
              self.x = x
              self.y = y
              self.z = z

         def __sub__(self, other):
              d1 = self.x - other.x
              d2 = self.y - other.y
              d3 = self.z - other.z
              return Point3D(d1, d2, d3)

         def __eq__(self, other):
              return(self.x == other.x and self.y == other.y
                     and self.z == other.z)

    def main():
         s = ''
         while not s or s[0] in 'Yy':
              p1 = get_point()
              p2 = get_point()
              p3 = get_point()
              if is_win(p1,p2,p3):
                   print('is a winning combination.')
              else:
                   print('Is not a win.')
              s = input('Do again(Y or N)?')
    def get_point():
         s = input('Enter point x, y, z format:')
         ls = s.split(',')
         x, y, z = int(ls[0]), int(ls[1]), int(ls[2])
         return Point3D(x,y,z)

    def is_win(p1,p2,p3):
         if(p3-p2 == p2 - p1
     or p2-p3 == p3-p1
     or p3-p1 == p1-p2):
          return True
     else:
          return False
main()

1 个答案:

答案 0 :(得分:0)

__sub____eq__都是python类中的“特殊”方法。每当比较同一个类的两个对象时,就使用__eq____gt____lt__中的一个。 __eq__只是==。因此,当您执行p1 == p2时,请使用__eq__方法。同样,__sub__用于减法。当您执行p1 - p2时,您将使用__sub__您使用的方法与其他方法不同。您不要 p1.__sub__(p2)

第二部分是您正在等待sy Y