gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 17:34:10 25 4
gpt4 key购买 nike

有没有办法将代码存储在要运行的列表或字典中,而不是执行很长的if..elif?像这样的东西:

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

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

或者是传统 if..elif 链条件表达式的次佳选择:

x = x+1 if choice == 'right' else x-1 if choice == 'left' else x
y = y+1 if choice == 'up' else y-1 if choice == 'down' else y

除了纯粹的好奇之外,我提出这个问题的部分原因是我正在用 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 代码应该的样子吗?还是有更 Pythonic 的方式来编写代码?

最佳答案

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

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 方法:

class player:
def __init__(self, x=0, y=0):
self.x = x
self.y = y

def up(self):
self.y += 1

def down(self):
self.y -= 1

def left(self):
self.x -= 1

def right(self):
self.x += 1

def move(self, direction):
# call the appropriate method that corresponds to given direction
getattr(self, direction)()

使用示例:

p = player(0,0)
p.move('up') # and so on..

关于python - 将代码存储在列表或字典中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32029554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com