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

Python自定义rent方法传参报错、无参调用错误删除列表元素问题

问题原因解析

1. 传参触发TypeError的原因

你定义的rent是类的实例方法,声明的形参只有self(实例方法的self参数会在调用时自动传入,不需要手动传递),所以该方法实际只支持0个额外入参。你调用account.rent(2)时额外传入了数值2,参数数量不匹配,就会触发对应报错。

2. 无参调用误删除2个元素的原因

这是Python遍历列表时同步修改列表的经典问题:遍历过程中调用remove删除元素会导致列表长度动态缩短、索引整体前移,遍历逻辑会跳过部分元素。
你初始化的BookList初始为["Book n1", "Book n2", "Book n3"],执行逻辑如下:

  • 第一轮遍历取索引0的元素Book n1,删除后列表变为["Book n2", "Book n3"]
  • 第二轮遍历按顺序取索引1的元素,此时列表索引1对应的元素是Book n3,删除后列表变为["Book n2"]
  • 第三轮遍历要取索引2的元素,当前列表长度仅为1,超出范围后循环终止
    最终只留下Book n2,正好符合你观察到的「删除前2个元素」的现象。
修复方案

首先给rent方法新增要删除的书籍ID形参,删除逻辑改用pop按索引删除(避免遍历修改列表的问题),修改后的代码如下:

def rent(self, book_id):
    if self.logged:
        # 先校验ID合法性
        if 0 <= book_id < len(lib.bib.BookList):
            lib.bib.BookList.pop(book_id)
        else:
            print("指定的书籍ID不存在")
    else:
        print("No Access")

修改后调用account.rent(2)即可正常删除对应ID的书籍。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 18:45:07