Function 使用返回值多次调用函数 从图形导入* def draw(): returnStuff={'reach':0,'1st':1} 再画一次=假 win=GraphWin(“四边形制造者”,600600) 胜利。挫折(“黄色”) text=text(点(150,15),“单击4个点以创建四边形”) text.draw(赢) #得到4分 p1=win.getMouse() p1.平局(获胜) p2=win.getMouse() p2.平局(获胜) p3=win.getMouse() p3.平局(获胜) p4=win.getMouse() p4.平局(获胜) 顶点=[p1、p2、p3、p4] #绘制形状 四边形=多边形(顶点) quad.setFill('red') quad.setOutline('黑色') 四边形。设置宽度(3) 四人组。平局(赢) text.setText('单击相应的框') #退出框 quitBox=矩形(点(30500),点(100550)) quitBox.setFill('绿色') 退出框。平局(赢) quitorNah=文本(第60490点),“退出”) 基多纳。平局(获胜) #又是一个盒子 quitBox=矩形(点(480500),点(550550)) quitBox.setFill('绿色') 退出框。平局(赢) quitorNah=文本(点(510490),“再次绘制”) 基多纳。平局(获胜) click=win.getMouse() x=单击.getX() y=单击.getY() 尽管如此: 如果30

Function 使用返回值多次调用函数 从图形导入* def draw(): returnStuff={'reach':0,'1st':1} 再画一次=假 win=GraphWin(“四边形制造者”,600600) 胜利。挫折(“黄色”) text=text(点(150,15),“单击4个点以创建四边形”) text.draw(赢) #得到4分 p1=win.getMouse() p1.平局(获胜) p2=win.getMouse() p2.平局(获胜) p3=win.getMouse() p3.平局(获胜) p4=win.getMouse() p4.平局(获胜) 顶点=[p1、p2、p3、p4] #绘制形状 四边形=多边形(顶点) quad.setFill('red') quad.setOutline('黑色') 四边形。设置宽度(3) 四人组。平局(赢) text.setText('单击相应的框') #退出框 quitBox=矩形(点(30500),点(100550)) quitBox.setFill('绿色') 退出框。平局(赢) quitorNah=文本(第60490点),“退出”) 基多纳。平局(获胜) #又是一个盒子 quitBox=矩形(点(480500),点(550550)) quitBox.setFill('绿色') 退出框。平局(赢) quitorNah=文本(点(510490),“再次绘制”) 基多纳。平局(获胜) click=win.getMouse() x=单击.getX() y=单击.getY() 尽管如此: 如果30,function,python-3.x,dictionary,return-value,zelle-graphics,Function,Python 3.x,Dictionary,Return Value,Zelle Graphics,我有一个使用Zelle graphics的简单交互式程序,它要求用户点击窗口中的4个点,然后从中创建一个形状。然后,向用户显示两个框,一个退出,一个重新绘制。我的绘图又不起作用了,它与返回值有关。我返回一个字典,因为我需要访问函数中的两个变量。在“returnStuff”字典中,我有一个名为“Reach”的部分,它最初设置为0。如果用户单击“再次运行”框,它会将该值更改为1,然后在函数外部有一条If语句,如果该值为1,则应再次调用该函数。它在第一次正确地做到了这一点,但在我的程序的第二次只是一起

我有一个使用Zelle graphics的简单交互式程序,它要求用户点击窗口中的4个点,然后从中创建一个形状。然后,向用户显示两个框,一个退出,一个重新绘制。我的绘图又不起作用了,它与返回值有关。我返回一个字典,因为我需要访问函数中的两个变量。在“returnStuff”字典中,我有一个名为“Reach”的部分,它最初设置为0。如果用户单击“再次运行”框,它会将该值更改为1,然后在函数外部有一条If语句,如果该值为1,则应再次调用该函数。它在第一次正确地做到了这一点,但在我的程序的第二次只是一起停止,我不明白为什么


有人能解释为什么会这样吗

我想你需要一段时间

from graphics import *

def draw():
    returnStuff = {'again' : 0, '1st' : 1 }

    draw.again = False
    win = GraphWin("Quadrilateral Maker", 600, 600)
    win.setBackground("yellow")
    text = Text(Point(150, 15), 'Click 4 points to create a Quadrilateral')
    text.draw(win)

    #gets the 4 points 
    p1 = win.getMouse()
    p1.draw(win)
    p2 = win.getMouse()
    p2.draw(win)
    p3 = win.getMouse()
    p3.draw(win)
    p4 = win.getMouse()
    p4.draw(win)
    vertices = [p1, p2, p3, p4]

    #draws the shape
    quad = Polygon(vertices)
    quad.setFill('red')
    quad.setOutline('black')
    quad.setWidth(3)
    quad.draw(win)

    text.setText('Click in the appropriate box.')

    #Quit box
    quitBox = Rectangle(Point(30, 500), Point(100,550))
    quitBox.setFill('green')
    quitBox.draw(win)
    quitorNah = Text(Point(60, 490), 'Quit')
    quitorNah.draw(win)

    #again box
    quitBox = Rectangle(Point(480, 500), Point(550,550))
    quitBox.setFill('green')
    quitBox.draw(win)
    quitorNah = Text(Point(510, 490), 'Draw Again')
    quitorNah.draw(win)

    click = win.getMouse()
    x = click.getX()
    y = click.getY()

    while True:
        if 30 < x < 100 and 500 < y < 550:
            returnStuff['again'] = 0
            win.close()
            break


        elif 480 < x < 550 and 500 < y < 550:
            returnStuff['again'] = 1
            win.close()
            break

    return returnStuff


count = 1
returnValue = draw()

if returnValue['1st'] == 1:
    count = 0

while count == 1 or returnValue['again'] == 1:
    return_value = draw()

好的,我把底部的最后一个if语句改成了一段时间,然后如果他们单击退出框,我会将“再次”设置为0,以防他们在重复程序一次后想要退出。但现在它是内环循环,就像我再次单击draw一样,无论我选择哪个选项,它都会继续重复?您需要重置return_值(如上所述)似乎没有做任何事情OOPS…set returnValue=draw()。。我明白了,你要检查的是whileAh,所以你每次都要重述变量的返回值?
while count==1 or returnValue['again'] == 1:
    returnValue = draw()