如何用for循环精简Pygame数字按键代码?能否给pygame.K_传变量?
解决Pygame数字按键判断的代码简化问题
关于pygame.K_*能否传入变量的问题
可以通过Python的getattr()函数动态获取pygame模块中的K_1到K_9常量。这些按键常量本质是pygame模块下的属性,我们可以通过字符串拼接生成属性名,再用getattr()获取对应的值,以此实现“用变量动态调用”的效果。
用for循环简化重复代码
基于上述方法,你可以用for循环遍历1到9的数字,动态获取每个数字对应的按键常量,统一判断按键状态并赋值。简化后的代码如下:
keys = pygame.key.get_pressed() for num in range(1, 10): # 动态获取对应按键常量,比如num=1时,获取pygame.K_1 key_const = getattr(pygame, f"K_{num}") if keys[key_const]: numList[cell_num] = str(num)
这段代码和原逻辑完全一致,但大幅减少了重复代码。如果担心多个数字键同时按下导致的冲突,可在赋值后添加break退出循环,确保只响应一个按键:
keys = pygame.key.get_pressed() for num in range(1, 10): key_const = getattr(pygame, f"K_{num}") if keys[key_const]: numList[cell_num] = str(num) break # 找到按下的按键后立即退出循环
内容的提问来源于stack exchange,提问作者Lucas Gutheim
相关产品推荐
相关产品推荐

