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,未利用传入的参数,不符合函数封装逻辑,易引发意外问题。
修复方案
- 修正
find_highest_bidder遍历逻辑:直接从遍历得到的字典元素中提取竞价金额和姓名,无需通过列表索引。 - 修正
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
相关产品推荐
相关产品推荐

