如何在达到特定打击次数时调用列表中的函数?
问题修正与实现方案
你的代码存在两处关键问题,以下是修正后的索引调用实现逻辑:
第一步:修正函数列表定义
当前代码里的draw_order = [draw_head(), draw_body(), ...]会立即执行所有函数,而非将函数对象存入列表。要存储函数引用,需去掉括号:
# 仅保存函数对象,不立即执行 draw_order = [draw_head, draw_body, draw_bothlegs, draw_botharms]
第二步:用索引实现按打击次数调用函数
场景1:按累计打击次数触发对应函数
如果需求是累计打击数strikes达到1-4时,依次调用列表中的函数:
# 初始化全局累计打击数 strikes = 0 def strikecount(): global strikes strikes += 1 # 防止索引越界,仅在有效范围内调用 if 1 <= strikes <= len(draw_order): # 打击数1对应索引0,以此类推,通过索引调用函数 draw_order[strikes - 1]()
场景2:按传入的strikenum参数触发对应函数
如果需求是根据传入的strikenum值直接调用对应位置的函数:
draw_order = [draw_head, draw_body, draw_bothlegs, draw_botharms] def strikecount(strikenum): global strikes strikes += 1 # 校验参数是否在有效范围内 if 1 <= strikenum <= len(draw_order): draw_order[strikenum - 1]()
关键说明
- 列表索引从0开始,所以打击次数1对应索引0,用
数值-1完成转换即可匹配正确的函数位置。 - 添加范围判断是为了避免出现索引越界报错。
内容的提问来源于stack exchange,提问作者Christopher Chang
相关产品推荐
相关产品推荐

