【发布时间】:2013-10-20 20:02:50
【问题描述】:
我正在为某人编写程序,以便他们可以锻炼眼睛,而我正在使用乌龟,因此它会随机移动。 我想让乌龟从墙上弹开,这样它就不会从侧面消失,再也见不到了! 我看过:TurtleGraphics Python: Bouncing turtle off the walls? 并使用了一些来自 jnylen 的代码,所以他的功劳归于他! 无论如何,这是我的旧代码和糟糕的代码(仅供参考):
from random import *
from turtle import *
penup() # Get rid of those lines it leaves behind!
def main():
while True: # I want this to be infinite
a = randint(1,600)
print a
b = randint(1,359)
print b
c = randint(1,600)
print c
d = randint(1,359)
print d #Checking my randoms
forward(a)
edge() # Keep calling edge, so it will bounce on the edge.
left(b)
edge() # Keep calling edge, so it will bounce on the edge.
forward(c)
edge() # Keep calling edge, so it will bounce on the edge.
right(d)
edge() # Keep calling edge, so it will bounce on the edge.
def edge():
x, y = position()
top = window_height()/2
bottom = -top
right = window_width()/2
left = -right
if (x <= left and 90 <= heading() <= 270) or (right <= x and not 90 <= heading() <= 270):
f = 178 * h
left(f)
main()
elif (y <= bottom and heading() >= 180) or (top <= y and heading <= 180):
f = -2 * heading()
left(f)
main()
else:
main()
main()
但是,当我运行它时,我得到了输出:
189
199
553
152
26
175
597
263
119
201
582
329
231
267
344
28
Traceback (most recent call last):
File "C:/Users/George/Desktop/Eyes.py", line 39, in <module>
main()
File "C:/Users/George/Desktop/Eyes.py", line 15, in main
edge()
File "C:/Users/George/Desktop/Eyes.py", line 38, in edge
main()
File "C:/Users/George/Desktop/Eyes.py", line 15, in main
edge()
File "C:/Users/George/Desktop/Eyes.py", line 38, in edge
main()
File "C:/Users/George/Desktop/Eyes.py", line 15, in main
edge()
File "C:/Users/George/Desktop/Eyes.py", line 38, in edge
main()
File "C:/Users/George/Desktop/Eyes.py", line 15, in main
edge()
File "C:/Users/George/Desktop/Eyes.py", line 31, in edge
left(f)
TypeError: 'int' object is not callable
拜托,谁能帮我解决这个问题。我尝试将f 设置为float、string 和int,但没有任何效果!这可能是非常明显的事情,所以如果是,对不起。
这是我的新代码,希望是正确的代码:
from random import *
from turtle import *
penup() # Get rid of those lines it leaves behind!
def main():
while True: # I want this to be infinite
a = randint(1,600)
print a
b = randint(1,359)
print b
c = randint(1,600)
print c
d = randint(1,359)
print d #Checking my randoms
forward(a)
x, y = position()
top = window_height()/2
bottom = -top
right = window_width()/2
l = -right
if (x <= l and 90 <= heading() <= 270) or (right <= x and not 90 <= heading() <= 270):
f = 178 * heading()
left(f)
print "1"
elif (y <= bottom and heading() >= 180) or (top <= y and heading <= 180):
f = -2 * heading()
left(f)
print "2"
else:
print "3"
left(b)
x, y = position()
top = window_height()/2
bottom = -top
right = window_width()/2
l = -right
if (x <= l and 90 <= heading() <= 270) or (right <= x and not 90 <= heading() <= 270):
f = 178 * heading()
left(f)
print "1"
elif (y <= bottom and heading() >= 180) or (top <= y and heading <= 180):
f = -2 * heading()
left(f)
print "2"
else:
print "3"
forward(c)
x, y = position()
top = window_height()/2
bottom = -top
right = window_width()/2
l = -right
if (x <= l and 90 <= heading() <= 270) or (right <= x and not 90 <= heading() <= 270):
f = 178 * heading()
left(f)
print "1"
elif (y <= bottom and heading() >= 180) or (top <= y and heading <= 180):
f = -2 * heading()
left(f)
print "2"
else:
print "3"
right(d)
x, y = position()
top = window_height()/2
bottom = -top
right = window_width()/2
l = -right
if (x <= l and 90 <= heading() <= 270) or (right <= x and not 90 <= heading() <= 270):
f = 178 * heading()
left(f)
print "1"
elif (y <= bottom and heading() >= 180) or (top <= y and heading <= 180):
f = -2 * heading()
left(f)
print "2"
else:
print "3"
main()
【问题讨论】:
-
除了@lejlot 的回答之外,你的程序最终肯定会崩溃,因为它包含一个无限递归(你调用
main,它调用edge,它再次调用main等等)。 -
我知道了,我要细化代码,所以我真正完成项目时它不会调用这么多函数
-
如果您不使用
from <module> import *,问题的原因可能会更加明显。
标签: python int turtle-graphics