微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

嘿,我需要python的帮助

如何解决嘿,我需要python的帮助

我想制作一个程序,以生成具有随机形状的块的线。到目前为止,我表现不错。但是我不想定义每个块。有没有一种方法可以在每次发生其他定义时都可以执行def功能?如果不是,我如何定义10个对象,而不仅仅是复制和粘贴10次并更改名称。我想让我的代码更紧凑,谢谢阅读!如果我没有很好地解释我要做什么,我还添加一个项目

import random
import pygame

pygame.init()
black = 0,0
white = 255,255,255
red = 255,0
green = 0,0
blue = 0,255

screen = pygame.display.set_mode((800,600))

BlockImg = pygame.image.load('cobblestone.png')
blockX = random.randint(0,800)
blockY = random.randint(0,600)

position = random.randint(1,6)
if position == 1:
    block2X = blockX - 16
    block2Y = blockY
if position == 2:
    block2X = blockX + 16
    block2Y = blockY
if position == 3:
    block2X = blockX
    block2Y = blockY - 16
if position == 4:
    block2X = blockX + 16
    block2Y = blockY - 16
if position == 5:
    block2X = blockX + 16
    block2Y = blockY + 16
if position == 6:
    block2X = blockX - 16
    block2Y = blockY + 16

positionoftwo = random.randint(1,6)
if positionoftwo == 1:
    block3X = blockX - 16
    block3Y = blockY
if positionoftwo == 2:
    block3X = block2X + 16
    block3Y = block2Y
if positionoftwo == 3:
    block3X = block2X
    block3Y = block2Y - 16
if positionoftwo == 4:
    block3X = block2X + 16
    block3Y = block2Y - 16
if positionoftwo == 5:
    block3X = block2X + 16
    block3Y = block2Y + 16
if positionoftwo == 6:
    block3X = block2X - 16
    block3Y = block2Y + 16


# can I automate that?

def one(x,y):
    screen.blit(BlockImg,(x,y))


def two(x,y))


def three(x,y))


def four(x,y))


def five(x,y))


def six(x,y))


def seven(x,y))


running = True
while running:
    screen.fill(black)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
    one(blockX,blockY)
    two(block2X,block2Y)
    three(block3X,block3Y)

    pygame.display.update()

解决方法

您在 let credentials; let coldstart = false; exports.handler = async (event,context) => { if(!coldstart){ credentials = await getSecrets(); coldstart=true; } } one()two()等中具有相同的代码,因此您只能保留其中一个并多次运行,但要使用不同的参数

three()

您应该将代码放入函数中,并使用one(blockX,blockY) one(block2X,block2Y) one(block3X,block3Y) 多次运行并将返回值分配给不同的变量

return

def generate_block():

    X = random.randint(0,800)
    Y = random.randint(0,600)
    
    position = random.randint(1,6)

    if position == 1:
        X = X - 16
    if position == 2:
        X = X + 16
    if position == 3:
        Y = Y - 16
    if position == 4:
        X = X + 16
        Y = Y - 16
    if position == 5:
        X = X + 16
        Y = Y + 16
    if position == 6:
        X = X - 16
        Y = Y + 16

    resturn X,Y

但最好将其保留在列表中

blockX,blockY = generate_block()
block2X,block2Y = generate_block()
block3X,block3Y = generate_block()
# ... 10 times ...

或更简单

all_blocks = []

x,y = generate_block()
all_blocks.append( (x,y) )

x,y) )

# ... 10 times ...

然后您可以使用all_blocks = [] for _ in range(10): # <- it will repeate it 10 times x,y = generate_block() all_blocks.append( (x,y) ) 循环使用所有块

for

编辑:

工作代码

for x,y in all_blocks:  # <- `all_blocks` has 10 items 
    one(x,y)            #     so it will repeate it 10 times

square-1.png,square-2.png,square-3.png,

enter image description here enter image description here enter image description here

结果:

enter image description here

文档:FontRectClock


PEP 8 -- Style Guide for Python Code

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。