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

Python秘密竞拍程序报TypeError 列表索引误用字典 类型转换无效

报错触发根因
  • 列表遍历逻辑完全错误:for x in bidder_list语法中,变量x会依次被赋值为列表内存储的每一个元素,也就是你在add_new_bidder函数里append进去的各个竞拍人字典对象,不是列表的整数索引值。
  • 后续代码用bidder_list[x]["bidder_offer"]取值时,相当于把一个字典对象传入列表的方括号索引位。Python语法规定列表索引必须是整数或切片类型,因此直接抛出TypeError: list indices must be integers or slices, not dict的报错,和你之前做的出价数值类型转换没有任何关联。
代码附带的隐性问题
  • 赢家判定逻辑存在冗余和缺失:原代码在判断当前出价比当前最高出价更高时,重复两次给winner_bid变量赋值,且完全没有记录最高出价对应的竞拍人姓名,最后只能输出最高出价数值,无法完成“找出赢家”的核心功能。
  • 存在冗余的类型转换:你在获取用户输入的出价时,已经通过int(input(...))把出价转为整数存入了竞拍人字典中,后续循环取值时不需要再额外套一层int()做转换。
修复方案
  • 修正列表遍历的取值逻辑,二选一即可:
    1. 直接遍历列表中的每个竞拍人字典对象,不需要再嵌套列表索引取值:
      # 原错误写法:x是字典,拿来当列表索引
      # for x in bidder_list:
      #     bidder_list[x]["bidder_offer"]
      # 正确写法1:直接拿遍历到的字典取值
      for bidder in bidder_list:
          current_bid = bidder["bidder_offer"]
      
    2. 如果需要通过索引遍历列表,要先取到从0开始的整数索引值再做取值:
      # 正确写法2:通过索引遍历
      for x in range(len(bidder_list)):
          current_bid = bidder_list[x]["bidder_offer"]
      
  • 补全赢家记录逻辑,删掉冗余赋值代码,修复后的the_winnner_goes_to函数完整代码如下:
    def the_winnner_goes_to():
      winner_bid = 0
      winner_name = ""
      for bidder in bidder_list:
          current_bid = bidder["bidder_offer"]
          if current_bid > winner_bid:
              winner_bid = current_bid
              winner_name = bidder["bidder_name"]
      print(f"竞拍赢家是 {winner_name},最终出价为 ${winner_bid}")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 08:45:03