在方法内打印语句

时间:2017-01-07 04:18:07

标签: python-2.7 wing-ide

所以我试着写一个函数来初始化两个点并输出以前制作的方法。

以下部分代码:

<a href="javascript: void(0);" ...

当我的点在方法之外被定义并且 class Point(Geometry): next_id = 0 def __init__(self,x,y,): self.x = x self.y = y self.id = Point.next_id Point.next_id += 1 def __str__(self): return "(%0.2f, %0.2f)" % (self.x, self.y) def quadrat(self): if (self.x > 0 and self.y > 0): return "Quad I" elif (self.x < 0 and self.y > 0): return "Quad II" elif (self.x < 0 and self.y < 0): return "Quad III" elif (self.x > 0 and self.y < 0): return "Quad IV" elif (self.x == 0 and self.y == 0): return "Origin" elif (self.x == 0): return "Y-axis" elif (self.y == 0): return "X-axis" def distance(p0, p1): dist = math.sqrt((p0.x - p1.x)**2 + (p0.y - p1.y)**2) return dist def equality(): if (self.x == self.y): print "True" else: print "False" def identify(): if(p0.id == p1.id): print "True" else: print "False" def pointTest(): global P1,P2 P1 = Point(-3,-3) P2 = Point(0,0) print "P1) ID =", P1.id,", Coordinates=", P1,", Location=",P1.quadrat() print "P2) ID =", P2.id,", Coordinates=", P2,", Location=",P2.quadrat() print "Distance between",P1,"and",P2,"is %0.2f" % (P1.distance(P2)) print "P1==P2?",P1==P2 print "P1 same as P2?",P1.id==P2.id P1 = None P2 = None print pointTest() 语句在方法之外时,我的输出完全正确。

但是我需要在方法中初始化点,并且我的print语句也要在方法中。

当我调用它时,我收到print未定义的错误。

我的输出需要如下所示:

pointTest

这将为我提供我的印刷陈述的答案。

1 个答案:

答案 0 :(得分:0)

如果需要使用与__init__不同的方法初始化变量,则必须将它们传递给初始化方法并直接访问其属性:

def pointTest(p1, p2):
    p1.x = -3
    p1.y = -3 
    p2.x = 0
    p2.y = 0

p1 = Point()
p2 = Point()

pointTest(p1, p2)

或将它们声明为全局变量,这通常是个坏主意但可以快速解决方法:

def pointTest():
    global p1, p2
    p1 = Point(-3, -3)
    p2 = Point(0, 0)

p1 = None
p2 = None

pointTest()

在这两种情况下,您都可以在print方法中添加对pointTest的调用。

请注意,在第二种情况下,您不需要将p1p2声明为None,但最好将每个变量都显式化。你不希望你的方法弹出全局变量,你不知道。

此外,您的pointTest方法似乎未定义。

关于您的原始缩进,似乎您的pointTest方法确实在代码块中。

因此,pointTest方法可能仅在比您调用它的范围更深的范围内声明,因此未定义。要么将其放在该块之外,要么将所有后续print放在该块中。