Python3如何优化for循环:解决Pygame敌群移动逻辑冗余问题
可行解决方案
方案1:嵌套遍历统一的敌人列表集合(最推荐,易扩展)
你只需要提前把所有敌人的列表整合到一个总列表中,后续新增敌人类型时,只要把新的列表加入这个总列表即可,不需要修改循环逻辑:
# 初始化敌人时定义总列表,后续加新敌人只需往这个列表里加对应列表即可 all_enemy_lists = [lst_enemy_giants, lst_enemy_spiders, lst_enemy_goblin] # 主循环内调用移动的代码简化为: for enemy_list in all_enemy_lists: for enemy in enemy_list: enemy.move()
方案2:拼接列表实现单层循环
如果希望只用一层循环,可以用itertools.chain把所有敌人列表拼接成一个大的迭代器遍历:
# 顶部导入模块 from itertools import chain # 主循环内调用移动的代码: for enemy in chain(lst_enemy_giants, lst_enemy_spiders, lst_enemy_goblin): enemy.move()
额外注意
你现有代码里有个笔误:遍历lst_enemy_goblin的循环内,你调用的是giant.move(),这会导致所有哥布林都不会执行自身的移动逻辑,而是调用最后一个巨人实例的移动方法,需要修改为goblin.move()。
你之前尝试拼接变量名的思路本身不符合Python的语法规范,变量名不能通过字符串拼接动态生成访问,即使可以通过globals()等特殊方法实现,可读性和可维护性都很差,不建议使用。
内容的提问来源于stack exchange,提问作者Chaotic Dwarf
相关产品推荐
相关产品推荐

