You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

错误原因分析

  1. 递归调用参数错误:循环中调用flick_switch(i),这里的i是整数索引,但函数定义要求传入列表,导致函数内部执行len(lst)时,传入的是整数,触发TypeError。
  2. 状态变量重置错误:每次循环都将flick_count重置为0,无法记录切换次数,无法实现状态切换逻辑。
  3. 未定义变量:代码中使用的flick变量未定义,实际应该判断元素是否等于字符串'flick'。
  4. 结果列表初始化错误:flicker列表在每次循环中重新初始化,最终只会保留最后一次循环的结果。
  5. 错误的返回值类型:添加了字符串"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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 20:37:43