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

Python 3 TypeError求助:列表索引需为整数/切片而非字典问题修复

竞价程序TypeError错误分析与修复

错误原因

触发的TypeError核心问题是列表不能用字典做索引:

  • 你定义的bidding_log是列表类型,每次调用add_new_bid都会向其中添加一个字典元素。
  • 在find_highest_bidder函数中,遍历bidding_record(即传入的bidding_log)时,bidder变量是列表中的单个字典对象,而你用bidding_record[bidder]试图用字典作为索引访问列表,违反了列表仅支持整数/切片作为索引的规则,因此报错。

另外代码存在隐性问题:add_new_bid函数声明了name和bid参数,但内部直接使用全局变量user_name和user_bid,未利用传入的参数,不符合函数封装逻辑,易引发意外问题。

修复方案

  1. 修正find_highest_bidder遍历逻辑:直接从遍历得到的字典元素中提取竞价金额和姓名,无需通过列表索引。
  2. 修正add_new_bid参数使用:改用函数传入的name和bid参数构建字典,避免依赖全局变量。

修复后完整代码

import action_program_with_lists_and_dictionaries_logo
import replit
print(action_program_with_lists_and_dictionaries_logo.logo)

switch = True

bidding_log = []
def add_new_bid(name, bid):
    new_bidder = {}
    new_bidder["name"] = name  # 使用函数参数而非全局变量
    new_bidder["bid"] = bid
    bidding_log.append(new_bidder)

def find_highest_bidder(bidding_record):
    highest_bid = 0
    winner = ""
    for bidder in bidding_record:
        bid_amount = bidder["bid"]  # 直接从字典中获取竞价金额
        if bid_amount > highest_bid:
            highest_bid = bid_amount
            winner = bidder["name"]  # 从字典中获取中标者姓名
    print(f"The winner is {winner} with a bid of {highest_bid}")

while switch:
    user_name = input("What is your name?: ")
    user_bid = int(input("What is your bid?: "))
    add_new_bid(name=user_name, bid=user_bid)

    stop_button = input("Do you want to continue bidding? type yes, if not type no")
    if stop_button == "no":
        switch = False
        find_highest_bidder(bidding_log)
    elif stop_button == "yes":
        replit.clear()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 14:15:48