闪电函数Python

闪电函数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:

我目前正在编写一个函数,作为函数任务的一部分。我正在使用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:
        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
语句,并查看它运行时打印的内容。如果在运行时看不到输出,请将打印的语句写入日志文件,并在运行后查看。