gpt4 book ai didi

python - 为什么我的循环还在运行? (Python Zelle 图形)

转载 作者:太空宇宙 更新时间:2023-11-04 02:02:43 25 4
gpt4 key购买 nike

我试图找出为什么我的一个函数中的 while 循环仍在运行,即使在我的图形中的点相等之后,也就是我将其设置为停止时。我做错了什么吗?我试图改变其他事情来让它工作但没有运气。这是一个游戏——当角色到达终端盒时,循环需要中断,但在我明确编码后它并没有这样做。这是我的第二个功能:

from graphics import *

def field():
#creating the window
win = GraphWin('The Field',400,400)
win.setBackground('white')
#drawing the grid
boxlist = []
for i in range(0,400,40):
for j in range(0,400,40):
box = Rectangle(Point(i,j),Point(i+40,j+40))
box.setOutline('light gray')
box.draw(win)
boxlist.append(box)
#creating other boxes
startbox = Rectangle(Point(0,0),Point(40,40))
startbox.setFill('lime')
startbox.setOutline('light gray')
startbox.draw(win)
endbox = Rectangle(Point(360,360),Point(400,400))
endbox.setFill('red')
endbox.setOutline('light gray')
endbox.draw(win)
boxlist.append(startbox)
boxlist.append(endbox)
#creating Pete
pete = Rectangle(Point(2,2),Point(38,38))
pete.setFill('gold')
pete.draw(win)
return win,boxlist,pete

def move(win2,boxlist,pete,endbox):
peteloc = pete.getCenter()
#creating loop to move pete
while peteloc != endbox.getCenter():
click = win2.getMouse()
x = click.getX()
y = click.getY()
peteloc = pete.getCenter()
petex = peteloc.getX()
petey = peteloc.getY()
#moving pete
if x>=petex+20 and y<=petey+20 and y>=petey-20:
pete.move(40,0)
elif x<=petex-20 and y<=petey+20 and y>=petey-20:
pete.move(-40,0)
elif y>=petey+20 and x<=petex+20 and x>=petex-20:
pete.move(0,40)
elif y<=petey-20 and x<=petex+20 and x>=petex-20:
pete.move(0,-40)
peteloc = pete.getCenter()

# The main function
def main():
win2,boxlist,pete = field()
endbox = boxlist[len(boxlist)-1]
move(win2,boxlist,pete,endbox)

main()

最佳答案

我想可能是float的精度造成的。我猜 pete.getCenter() 和 endbox.getCenter() 是类似 [float, float] 的东西,你应该避免在 float 之间使用 !=,比如 1.0000001 不等于 1。

所以即使角色到达了endbox,位置仍然会有一点 float 偏差。

所以当错误是可以接受的时候,你可以把a != b改成abs(a - b) > acceptable_error。示例代码如下:

# while peteloc != endbox.getCenter():
while abs(peteloc.getX() - endbox.getCenter().getX()) > 0.01 and abs(peteloc.getY() - endbox.getCenter().getY()) > 0.01:

希望对你有所帮助。

关于python - 为什么我的循环还在运行? (Python Zelle 图形),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55409994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com