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

Python ATM交易日志搜索函数问题:类型错误与匹配失败求助

问题修复方案

先梳理你的代码核心错误,再给出修复后的完整代码:

核心错误点

  1. 行数获取逻辑错误:rows = len(str(array)) 是把二维列表转成字符串后取长度,完全不是你需要的记录行数,应该直接遍历原二维列表array。
  2. 遍历对象错误:之前遍历rows(整数类型)导致TypeError,正确操作是遍历array里的每一条交易记录。
  3. 结果收集错误:search_result = array.append(str(elem)) 中,append是原地修改列表,返回值为None,且你应该把整条匹配的记录加入search_result,而非单个字段。
  4. 匹配逻辑错误:每个if分支未处理字段与记录索引的对应关系,比如"id"对应每条记录的第0个元素,原代码直接拿错误的遍历对象去比较,完全不符合需求。
  5. 打印时机错误:原逻辑每循环一次不匹配就打印"未找到",正确做法是收集完所有匹配记录后,判断结果为空再提示。
  6. 代码冗余:三个if分支逻辑重复,可通过字段映射简化。

修复后的完整代码

def search_records(array, search_field, search_value):
    search_result = []
    # 映射搜索字段到二维列表的索引
    field_index = {
        "id": 0,
        "account": 1,
        "operation": 2
    }
    # 校验搜索字段合法性
    if search_field not in field_index:
        print(f"无效的搜索字段:{search_field}")
        return
    
    target_index = field_index[search_field]
    # 遍历所有交易记录
    for record in array:
        # 统一类型后比较,避免数字与字符串不匹配问题
        if str(record[target_index]) == str(search_value):
            search_result.append(record)
    
    # 打印结果
    if search_result:
        # 根据搜索字段生成对应标题
        title_map = {
            "id": f"ATM ID: {search_value}",
            "account": f"账号: {search_value}",
            "operation": f"操作类型: {search_value}"
        }
        print(f"匹配{title_map[search_field]}的记录:")
        print(" ")
        print("ATM ID : 账号     : 操作类型 : 金额")
        print("---------------------------------------")
        for elem in search_result:
            # 用ljust简化对齐逻辑
            atm_id = str(elem[0]).ljust(8)
            account = str(elem[1]).ljust(10)
            operation = str(elem[2]).ljust(7)
            amount = str(elem[3]).ljust(3)
            print(f"{atm_id}: {account}: {operation}: {amount}")
    else:
        tip_map = {
            "id": f"ATM ID: {search_value}",
            "account": f"账号: {search_value}",
            "operation": f"操作类型: {search_value}"
        }
        print(f"未找到匹配{tip_map[search_field]}的记录")

代码说明

  • 用field_index字典关联搜索字段与记录索引,消除重复代码
  • 统一转换类型后比较,避免数字与字符串类型不匹配导致的漏匹配
  • 先收集所有匹配记录再统一打印,避免错误提示频繁输出
  • 用ljust()方法简化对齐逻辑,替代手动计算空格的繁琐操作
  • 增加非法字段校验,提升函数容错性

内容的提问来源于stack exchange,提问作者Loree

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:10:22