簡體   English   中英

Python:在for循環中使用變量進行替換

[英]Python: Using variable in for loop for substitution

我正在嘗試在利用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:“模塊”對象沒有屬性“ K_currentKey”

我想我最近可能在BASH上花費了太多時間,因為這種構造對我的大腦來說是完全合理的。 我四處搜尋,卻不知道實施此方法的正確方法。

將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()

如果要從具有名稱的字符串中檢索類成員,請嘗試:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM