Python错误:输入最多需要1个参数,得到3个

2024-04-18 05:23:45 发布

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

我试图编写一个函数来判断用户创建的两个圆是否相交。测试函数时,main()函数中的点给出错误:

input expected at most 1 argument, got 3

circleOverlap()函数中使用时,distance()工作正常。distance()函数本身给出了上述错误。我不知道接下来该怎么办:

def distance(point1, point2):

    p1x = point1.getX()
    p1y = point1.getY()
    p2x = point1.getX()
    p2y = point2.getY()

    dist = math.sqrt( ((p1x-p2x)**2)+((p1y-p2y)**2) )
    return dist

def circleOverlap():
    winHeight = 400
    winWidth = 400
    win = GraphWin("Overlapping circles", winHeight, winWidth)

    instruct = Text(Point(winWidth/2, winHeight-10), "Circles")
    instruct.draw(win)

    instruct.setText("Click to draw centerpoint of circle")
    center1 = win.getMouse()
    center1.draw(win)
    x1 = center1.getX()
    y1 = center1.getY()

    instruct.setText("Click to add border of circle.")
    border = win.getMouse()

    radius1 = distance(center1, border)
    circle1 = Circle(center1, radius1)
    circle1.draw(win)
    print(center1)

    instruct.setText("Click to draw centerpoint of circle")
    center2 = win.getMouse()
    center2.draw(win)
    x2 = center2.getX()
    y2 = center2.getY()

    instruct.setText("Click to add border of circle.")
    border2 = win.getMouse()

    radius2 = distance(center2, border2)
    circle2 = Circle(center2, radius2)
    circle2.draw(win)

    if radius1 > radius2:
        rds = radius1
    else:
        rds = radius2

    xDif = abs(x1-x2)
    yDif = abs(y1-y2)
    fDif = math.sqrt((xDif)**2 + (yDif)**2)
    if fDif <= rds:
        print("Circles Overlap")

    instruct.setText("Click anywhere to close.")
    win.getMouse()
    win.close()

def main():
    print("")
    print("Euclidean Distance Calculator!!")
    p2 = Point("3.0, 6.0")
    p1 = Point("3.0, 2.0")
    print(distance(p1, p2))

Tags: to函数windistanceclickprintdrawinstruct
1条回答
网友
1楼 · 发布于 2024-04-18 05:23:45

distance()函数和测试代码中存在问题。在distance()函数中,下面的第三行不正确,它应该在point2上调用getX()

p1x = point1.getX()
p1y = point1.getY()
p2x = point1.getX()
p2y = point2.getY()

这个错误使你的圆圈太小。在main()中的测试代码中,这些行不正确:

p2 = Point("3.0, 6.0")
p1 = Point("3.0, 2.0")

在传递单个字符串时,应传递两个数字:

p2 = Point(3.0, 6.0)
p1 = Point(3.0, 2.0)

下面是通过上述修复和一些样式更改对代码进行的返工:

from math import sqrt
from graphics import *

winHeight = 400
winWidth = 400

def distance(point1, point2):

    p1x = point1.getX()
    p1y = point1.getY()
    p2x = point2.getX()
    p2y = point2.getY()

    return sqrt((p1x - p2x)**2 + (p1y - p2y)**2)

def circleOverlap(win, instructions):

    instructions.setText("Click to draw center point of circle")
    center = win.getMouse()
    center.draw(win)
    x1 = center.getX()
    y1 = center.getY()

    instructions.setText("Click to add border of circle.")
    border = win.getMouse()

    radius1 = distance(center, border)
    Circle(center, radius1).draw(win)

    instructions.setText("Click to draw center point of circle")
    center = win.getMouse()
    center.draw(win)
    x2 = center.getX()
    y2 = center.getY()

    instructions.setText("Click to add border of circle.")
    border = win.getMouse()

    radius2 = distance(center, border)
    Circle(center, radius2).draw(win)

    radius = max(radius1, radius2)

    xDif = abs(x1 - x2)
    yDif = abs(y1 - y2)
    fDif = sqrt(xDif**2 + yDif**2)

    if fDif <= radius:
        return "Circles Overlap"

    return "Circles Don't Overlap"

def main():
    print("Euclidean Distance Calculator!")

    win = GraphWin("Overlapping circles", winHeight, winWidth)

    instructions = Text(Point(winWidth/2, winHeight-10), "Circles")
    instructions.draw(win)

    print(circleOverlap(win, instructions))

    instructions.setText("Click anywhere to close.")
    win.getMouse()
    win.close()

main()

相关问题 更多 >