在列表或字典中存储代码?

2024-09-29 01:21:46 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一种方法可以将代码存储在要运行的list或字典中,而不是执行长if..elif?比如:

my_dict = {'up': 'y=y+1', 'down': 'y=y-1', 'left': 'x=x-1', 'right': x=x+1'}

然后将选择与dict匹配并运行结果?在

或者,传统的if..elif链的下一个最佳选择是条件表达式:

^{pr2}$

除了纯粹的好奇之外,我问这个问题的部分原因是我正在用Pygame编写一个游戏来帮助学习Python编码。我有12个键,我正在检查是否被按下,我使用了一个非常长且笨拙的if..elif结构,这让我觉得必须有一个更漂亮的方法来完成它。基本上我看到的是这样的:

for event in pygame.event.get():
        if event.type == pygame.QUIT:
            crashed = True
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_t:
                red += 10
            elif event.key == pygame.K_g:
                red -= 10
            elif event.key == pygame.K_5:
                red += 1
            elif event.key == pygame.K_b:
                red -= 1
            elif event.key == pygame.K_y:
                green += 10
            elif event.key == pygame.K_h:
                green -= 10
            elif event.key == pygame.K_6:
                green += 1
            elif event.key == pygame.K_n:
                green -= 1
            elif event.key == pygame.K_u:
                blue += 10
            elif event.key == pygame.K_j:
                blue -= 10
            elif event.key == pygame.K_7:
                blue += 1
            elif event.key == pygame.K_m:
                blue -= 1

这就是我的Python代码应该是的样子吗?或者有没有一种更像Python的方式来编写代码呢?在


Tags: 方法key代码eventif字典typegreen
2条回答

是的,有一种方法,但是通过使用函数:

def up():
    y=y+1

def down():
    y=y-1

def left():
    x=x-1

def right():
    x=x+1


d = {'up': up, 'down': down, 'left': left, 'right': right};

然后把它叫做d['up']()。在

为了避免使用全局变量,可以使用OOP方法:

^{pr2}$

示例用法:

^{3}$

对于这种情况,一种方法是将要加/减的值存储在字典中,然后检索并添加。像这样:

offsets = {
    'up': (0, 10),
    'down': (0, -10),
    'left': (-10, 0),
    'right': (10, 0)
}
xOffset, yOffset = offsets[choice]
x += xOffset
y += yOffset

您可以在字典中存储函数,但函数不能修改其调用上下文的变量。如果您发现存储的“代码段”都具有相同的结构(这里每个代码段都是“向x添加一些内容”或“向y添加一些内容”),那么您可以做的是将代码分解到一个位置,并且只将参数存储在字典中(在这里可以存储要添加的值)。在

相关问题 更多 >