python中的简单射箭游戏

python中的简单射箭游戏,python,Python,我刚开始学习python,我想做一个射箭游戏。但是,它在这一点上产生了一个错误:d=math.sqrt(x*x+y*y)(即新点和原始cirlce中心之间的距离)关于为什么这不起作用有什么想法吗 def archery(): win = GraphWin("Archery Game", 500,500) win.setCoords(-50, -50, 50, 50) circle1 = Circle(Point(0,0), 40) circle1.setFil

我刚开始学习python,我想做一个射箭游戏。但是,它在这一点上产生了一个错误:d=math.sqrt(x*x+y*y)(即新点和原始cirlce中心之间的距离)关于为什么这不起作用有什么想法吗

def archery():

    win = GraphWin("Archery Game", 500,500)
    win.setCoords(-50, -50, 50, 50)

    circle1 = Circle(Point(0,0), 40)
    circle1.setFill("white")
    circle1.draw(win)

    circle2 = Circle(Point(0,0), 35)
    circle2.setFill("black")
    circle2.draw(win)

    circle3 = Circle(Point(0,0), 30)
    circle3.setFill("blue")
    circle3.draw(win)

    circle4 = Circle(Point(0,0), 25)
    circle4.setFill("red")
    circle4.draw(win)

    circle5 = Circle(Point(0,0), 20)
    circle5.setFill("yellow")
    circle5.draw(win)

    score = 0

    for i in range(5):
        p = win.getMouse()
        p.draw(win)
        x = p.getX
        y = p.getY

        d = math.sqrt(x*x + y*y)

        if 40 >= d > 35:
            score = score + 1

        elif 35 >= d > 30:
            score = score + 3

        elif 30 >= d > 25:
            score = score + 5

        elif 25 >= d > 20:
            score = score + 7

        elif 20 >= d >= 0:
            score = score + 9
        else:
            score = score + 0

        print("Your current score is:", score)

    win.getMouse()
    win.close()

将返回函数
getX
getY
,而不是执行它。正如Mike Steder所说,尝试
getX()
,它应该返回一个值。

首先,您可能需要执行以下操作:

x = p.getX()
y = p.getY()
i、 e.调用函数并使用返回值,而不是使用函数本身

其次,您可以将
math.sqrt(x*x+y*y)
调用更改为:

d = math.hypot(x, y)

你有什么错误?您导入了数学吗?小提示:您可以使用
**
在Python中提高一个数字。看起来p.getX和p.getY应该是“p.getX()”和“p.getY()”。我假设您尝试将getX和getY函数相乘和相加,而不是这些函数将返回的数字。谢谢Mike!就这样。忘了括号吧……傻妹不喜欢说点什么,但如果你接受了答案会更好,因为你/迈克已经解决了问题。
(x*x+y*y)**0.5
可以由Python编译器内联,将全局查找保存到hypot和函数调用。@Paul:是的,它可以内联,但它可以吗?无论是3.1.1+(r311:74480)还是2.7.1(r271:86832)都不会;我不知道以后的版本。>>>>z=lambda x,y:(xx+yy)**0.5>>>导入dis>>>dis.dis(z)也许我应该说“编译成字节码”@Paul:我理解你的意思,尽管我知道你不知道。根据您的建议,我得到的结果与我已经在3.1.1+和2.7.1(我提到的版本)中尝试过的普通
dis.dis(compile((x*x+y*y)**0.5“,”,“eval”)
没有什么不同。您的评论适用于某些版本的Python和更高版本,这需要明确。
d = math.hypot(x, y)