Python函数报错TypeError: int无len()方法,求实现列表布尔翻转功能
问题解决:实现flick_switch函数并修复TypeError错误
需求说明
编写Python函数,需满足以下规则:
- 默认对列表的每个元素返回
True - 当元素为小写的
'flick'时,切换后续返回的布尔值(包括该元素本身) - 列表可包含多个
'flick'
示例输入:["codewars","flick","code","wars"],预期输出:[True, False, False, False]
遇到的错误
尝试编写的函数运行时抛出TypeError: object of type 'int' has no len()错误,尝试的代码如下:
def flick_switch(lst): for i in range(len(lst)): global flick_count flick_count = 0 flicker=[] if flick_count % 2 == 0: if flick_switch(i) != flick: flicker.append("True") else: flicker.append("False") flick_count = flick_count+1 else: if flick_switch(i) != flick: flicker.append("False") else: flicker.append("True") flick_count = flick_count+1 return flicker
错误原因分析
- 递归调用参数错误:循环中调用
flick_switch(i),这里的i是整数索引,但函数定义要求传入列表,导致函数内部执行len(lst)时,传入的是整数,触发TypeError。 - 状态变量重置错误:每次循环都将
flick_count重置为0,无法记录切换次数,无法实现状态切换逻辑。 - 未定义变量:代码中使用的
flick变量未定义,实际应该判断元素是否等于字符串'flick'。 - 结果列表初始化错误:
flicker列表在每次循环中重新初始化,最终只会保留最后一次循环的结果。 - 错误的返回值类型:添加了字符串
"True"/"False",而需求是返回布尔类型的True/False。
正确实现代码
def flick_switch(lst): current_state = True result = [] for item in lst: if item == 'flick': current_state = not current_state result.append(current_state) return result
代码说明
- 使用
current_state变量跟踪当前应返回的布尔值,初始值为True(符合默认规则)。 - 遍历列表中的每个元素:
- 若元素是
'flick',则翻转current_state的值(实现切换逻辑)。 - 将当前状态添加到结果列表中。
- 若元素是
- 该实现可以正确处理多个
'flick'的情况,每次遇到都会切换后续的返回值,完全符合需求。
测试示例:
print(flick_switch(["codewars","flick","code","wars"])) # 输出: [True, False, False, False]
内容的提问来源于stack exchange,提问作者Blosse12
相关产品推荐
相关产品推荐

