Python:在for循环中使用变量进行替换

时间:2014-03-31 21:21:18

标签: python pygame

我正在尝试在使用pygame的Python程序中压缩重复。我目前有一些像这样的行:

if pygame.key.get_pressed()[pygame.K_q]: q.PerformNote()
if pygame.key.get_pressed()[pygame.K_w]: w.PerformNote()
if pygame.key.get_pressed()[pygame.K_e]: e.PerformNote()
if pygame.key.get_pressed()[pygame.K_r]: r.PerformNote()
if pygame.key.get_pressed()[pygame.K_t]: t.PerformNote()

我想实现这样的目标:

keyList = ['q', 'w', 'e', 'r', 't']
for currentKey in keyList:
    if pygame.key.get_pressed()[pygame.K_currentKey]:
        currentKey.PerformNote()

产生的错误是

  

AttributeError:'module'对象没有属性'K_currentKey'

我想我最近可能在BASH花了太多时间,因为这个结构对我的大脑非常有意义。我一直在搜索,不知道实现这个的正确方法。

2 个答案:

答案 0 :(得分:6)

将pygame键映射到相应的变量:

keyMap = {
    pygame.K_q: q,
    pygame.K_w: w,
    pygame.K_e: e,
    pygame.K_r: r,
    pygame.K_t: t,
}

然后你可以这样做:

pressed = pygame.key.get_pressed()
for key, toProc in keyMap.items():
    if pressed[key]:
        toProc.PerformNote()

答案 1 :(得分:1)

如果要从具有名称的字符串中检索类成员,请尝试:

keyList = ['q', 'w', 'e', 'r', 't']
for currentKey in keyList:
    if pygame.key.get_pressed()[getattr(pygame, 'K_' + currentKey)]:
        currentKey.PerformNote()