Python 为什么我的程序没有延迟1秒?

Python 为什么我的程序没有延迟1秒?,python,for-loop,pygame,Python,For Loop,Pygame,我正在用python编写一个random walker程序,并使用Pygame进行图形处理 程序运行良好,但是我希望在每个for循环中代码结束时,它应该将程序延迟1秒,因此程序在几秒钟内完成,但我可以看到连续的随机游动 因此,当我在代码末尾添加time.sleep(1)时,它反而会使程序运行变慢,并且不会每秒画一个圆: import pygame import random import time #Initialize the pygame pygame.init() #create t

我正在用python编写一个random walker程序,并使用Pygame进行图形处理

程序运行良好,但是我希望在每个
for循环中
代码结束时,它应该将程序延迟1秒,因此程序在几秒钟内完成,但我可以看到连续的随机游动

因此,当我在代码末尾添加
time.sleep(1)
时,它反而会使程序运行变慢,并且不会每秒画一个圆:

import pygame
import random
import time


#Initialize the pygame
pygame.init()

#create the screen
screen = pygame.display.set_mode((800,800)) # Width and Height 

startX = 400
startY = 400


def returnRandomNumber():
    options = [1,-1]
    
    random_sample = random.choice(options)

    return random_sample

def returnRandomInt():
    random_sample = random.randint(0,255)

    return random_sample


running = True
while running:
    #update display
    pygame.display.update()


    for x in range(10000):
        pygame.draw.circle(screen, (returnRandomInt(),returnRandomInt(),returnRandomInt()), (startX, startY), 2, 2)
        if startX <= 0:
            startX += 1
        elif startX >= 800:
            startX += -1
        else:
            startX += returnRandomNumber()
        
        if startY <= 0:
            startY += 1
        elif startY >= 800:
            startY += -1
        else:
            startY += returnRandomNumber()
    time.sleep(1)
导入pygame
随机输入
导入时间
#初始化pygame
pygame.init()
#创建屏幕
screen=pygame.display.set_模式((800800))#宽度和高度
startX=400
星度=400
def returnRandomNumber():
选项=[1,-1]
随机样本=随机选择(选项)
返回随机样本
def returnRandomInt():
random_sample=random.randint(0255)
返回随机样本
运行=真
运行时:
#更新显示
pygame.display.update()
对于范围(10000)内的x:
pygame.draw.circle(屏幕,(returnRandomInt(),returnRandomInt(),returnRandomInt()),(startX,startY),2,2)
如果startX=800:
startX+=-1
其他:
startX+=returnRandomNumber()
如果startY=800:
startY+=-1
其他:
startY+=returnRandomNumber()
时间。睡眠(1)

为什么会这样?或者,我如何让程序画一个圆圈,然后延迟x秒并继续运行?

尝试在for循环中插入更新和睡眠,以便每次迭代后显示都会更新:

while running:
#update display
pygame.display.update()


for x in range(10000):
    pygame.draw.circle(screen, (returnRandomInt(),returnRandomInt(),returnRandomInt()), (startX, startY), 2, 2)
    if startX <= 0:
        startX += 1
    elif startX >= 800:
        startX += -1
    else:
        startX += returnRandomNumber()
    
    if startY <= 0:
        startY += 1
    elif startY >= 800:
        startY += -1
    else:
        startY += returnRandomNumber()
    pygame.display.update()
    time.sleep(1)
运行时:
#更新显示
pygame.display.update()
对于范围(10000)内的x:
pygame.draw.circle(屏幕,(returnRandomInt(),returnRandomInt(),returnRandomInt()),(startX,startY),2,2)
如果startX=800:
startX+=-1
其他:
startX+=returnRandomNumber()
如果startY=800:
startY+=-1
其他:
startY+=returnRandomNumber()
pygame.display.update()
时间。睡眠(1)

尝试在for循环中插入update和sleep,以便每次迭代后显示都会更新:

while running:
#update display
pygame.display.update()


for x in range(10000):
    pygame.draw.circle(screen, (returnRandomInt(),returnRandomInt(),returnRandomInt()), (startX, startY), 2, 2)
    if startX <= 0:
        startX += 1
    elif startX >= 800:
        startX += -1
    else:
        startX += returnRandomNumber()
    
    if startY <= 0:
        startY += 1
    elif startY >= 800:
        startY += -1
    else:
        startY += returnRandomNumber()
    pygame.display.update()
    time.sleep(1)
运行时:
#更新显示
pygame.display.update()
对于范围(10000)内的x:
pygame.draw.circle(屏幕,(returnRandomInt(),returnRandomInt(),returnRandomInt()),(startX,startY),2,2)
如果startX=800:
startX+=-1
其他:
startX+=returnRandomNumber()
如果startY=800:
startY+=-1
其他:
startY+=returnRandomNumber()
pygame.display.update()
时间。睡眠(1)
time.sleep(1)需要与pygame.display.update()交换位置

代码: 导入pygame 随机输入 导入时间

初始化pygame pygame.init()

创建屏幕 screen=pygame.display.set_模式((800800))#宽度和高度

startX=400 星度=400

def returnRandomNumber(): 选项=[1,-1]

random_sample = random.choice(options)

return random_sample
def returnRandomInt(): random_sample=random.randint(0255)

运行=真 运行时: #更新显示 时间。睡眠(1)

范围(10000)内x的
:
pygame.draw.circle(屏幕,(returnRandomInt(),returnRandomInt(),returnRandomInt()),(startX,startY),2,2)
如果startX=800:
startX+=-1
其他:
startX+=returnRandomNumber()
如果startY=800:
startY+=-1
其他:
startY+=returnRandomNumber()
pygame.display.update()
time.sleep(1)需要与pygame.display.update()交换位置

代码: 导入pygame 随机输入 导入时间

初始化pygame pygame.init()

创建屏幕 screen=pygame.display.set_模式((800800))#宽度和高度

startX=400 星度=400

def returnRandomNumber(): 选项=[1,-1]

random_sample = random.choice(options)

return random_sample
def returnRandomInt(): random_sample=random.randint(0255)

运行=真 运行时: #更新显示 时间。睡眠(1)

范围(10000)内x的
:
pygame.draw.circle(屏幕,(returnRandomInt(),returnRandomInt(),returnRandomInt()),(startX,startY),2,2)
如果startX=800:
startX+=-1
其他:
startX+=returnRandomNumber()
如果startY=800:
startY+=-1
其他:
startY+=returnRandomNumber()
pygame.display.update()

谢谢!这确实奏效了!然而,我注意到在几秒钟后程序崩溃了,之前也发生过,但我认为这是因为无限的while循环,有什么想法吗?你画了很多圈-每次迭代10000圈,它不会停止。因此,您可能希望专注于这段代码并绘制较少的圆圈-可能会在几天后停止。但是,在投入时间之前,我曾想象过。睡眠在崩溃之前绘制数千个圆圈,但投入时间之后。睡眠(1)它绘制了10个圆圈,然后崩溃。可能python滞后,但重要的是,你画的是无限的圆圈,所以你破坏了脚本。是的,我不知道这是python还是pygame的问题,谢谢你的输入,它成功了。然而,我尝试了最后一件事,我在程序中添加了一个计数器变量,这样每个for循环都会添加1,当它达到与for循环中的范围相同的数字时。它将停止该程序。所以我注意到程序崩溃了,停止了绘图,但几秒钟后它关闭了,在一瞬间我可以看到其他的x圆在关闭前被画出来。谢谢!这确实奏效了!然而,我注意到在几秒钟后程序崩溃了,之前也发生过,但我认为这是因为无限的while循环,有什么想法吗?你画了很多圈-每次迭代10000圈,它不会停止。因此,您可能希望专注于这段代码,并绘制较少的圆圈-可能在几圈后停止。但是,在投入时间之前,我曾想象过。睡眠在崩溃之前绘制数千个圆圈,但在投入时间之后。睡眠(1)它绘制10个圆圈,然后cr