有没有一种方法可以将代码存储在if..elif
或要运行的字典中,而不是长list
?类似的东西:
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方法来编码吗?
答案 0 :(得分:1)
是的,有一种方法,但通过使用功能:
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..