我正在尝试在使用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花了太多时间,因为这个结构对我的大脑非常有意义。我一直在搜索,不知道实现这个的正确方法。
答案 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()