闪电函数Python
我目前正在编写一个函数,作为函数任务的一部分。我正在使用python 2.7.5和pygame。我们应该编写一个绘制灯光的递归函数。我目前的代码有一个错误,但我不知道它是什么。这是我的密码:闪电函数Python,python,function,random,pygame,Python,Function,Random,Pygame,我目前正在编写一个函数,作为函数任务的一部分。我正在使用python 2.7.5和pygame。我们应该编写一个绘制灯光的递归函数。我目前的代码有一个错误,但我不知道它是什么。这是我的密码: from math import * from pygame import * from random import * screen=display.set_mode((800,600)) def lightning(screen,x,y,size,ang): if size > 5:
from math import *
from pygame import *
from random import *
screen=display.set_mode((800,600))
def lightning(screen,x,y,size,ang):
if size > 5:
rang = radians(ang)
x2 = x-size*cos(rang)
y2 = y+size*sin(rang)
draw.line(screen,(200,180,0),(x,y),(x2,y2))
lightning(screen,x2,y2,size-randint(1,10),ang-randint(-20,10))
lightning(screen,x2,y2,size-randint(1,10),ang+randint(-10,30))
lightning(screen,400,0,100,randint(60,100))
running=True
while running:
for evt in event.get():
if evt.type==QUIT:
runnning=False
screen.fill((0,0,0))
lightning(screen,400,0,100,randint(60,100))
time.wait(500)
display.flip()
quit()
目前,当我尝试添加另一行lightning(“lightning(…)”)时,它不会在shell中显示任何错误,也不会在pygame窗口中显示任何内容。当我只有一条线路时,闪电功能正常。我只想知道我的错误在哪里,以及导致错误的原因。感谢您的帮助。谢谢。对于
size=100
函数ligthning()
的调用次数为800000到350000次
如果你再加一条闪电线,它甚至会给你打7000个电话
也许你看不到结果,因为它工作时间太长。请尝试使用较小的大小的代码
我的代码用于计数ligthning()
调用
from math import *
from pygame import *
from random import *
#---------------------------------------------------------------------
def lightning(screen, x, y, size, ang, count):
if size > 5:
rang = radians(ang)
x2 = x-size*cos(rang)
y2 = y+size*sin(rang)
draw.line(screen,(200,180,0),(x,y),(x2,y2))
count = lightning(screen,x2,y2,size-randint(1,10),ang-randint(-20,10), count)
count = lightning(screen,x2,y2,size-randint(1,10),ang+randint(-10,30), count)
return count + 1
#---------------------------------------------------------------------
screen = display.set_mode((800,600))
#lightning(screen,400, 0, 100, randint(60,100))
running = True
while running:
for evt in event.get():
if evt.type == QUIT:
running = False
elif evt.type == KEYDOWN:
if evt.key == K_ESCAPE:
running = False
screen.fill((0,0,0))
print 'count: ', lightning(screen, 400, 0, 100, randint(60,100), 0)
display.flip()
#time.wait(500)
quit()
编辑:
从理论上讲,radint(1,10)
总是能给出1
,所以你总是能得到lightning(…,size-1,…)
,对于size=100
它能给出2**95次呼叫
2**95=39 614 081 257 132 168 796 771 975 168L可能是因为您从未真正退出该功能?它只是一个接一个的循环。请根据PEP-8设置python代码的格式。我建议在lightning()
中添加print
语句,并查看它运行时打印的内容。如果在运行时看不到输出,请将打印的语句写入日志文件,并在运行后查看。