如何实现Shoe对象列表shoes按itemsellingprice属性冒泡排序
问题核心原因
你当前的代码直接对Shoe类实例做大小比较,Python没有默认的自定义类比较规则,所以需要将比较对象替换为__itemsellingprice属性的取值结果,你可以按如下步骤修改:
修改方案
- 调整冒泡排序的比较逻辑
原来的比较行if shoes[j] > shoes[j + 1]:改为调用取值方法获取售价后再比较:
if shoes[j].get_itemsellingprice() > shoes[j + 1].get_itemsellingprice():
- 修正打印逻辑
原来的打印行print("% d" % shoes[i])尝试把Shoe对象格式化为整数会报错,因为你已经实现了__str__方法,可以直接打印对象,也可以选择单独打印售价:
# 直接打印对象完整信息 print(shoes[i]) # 如果只需要打印售价 # print(shoes[i].get_itemsellingprice())
- 可选:补充返回值避免打印None
原bubblesort函数没有显式返回值,直接调用print(bubblesort(shoes))会输出None,如果需要返回排序后的列表可以在函数末尾加return shoes,不需要的话删掉最后那行print(bubblesort(shoes))即可。
修改后完整的bubblesort代码
def bubblesort(shoes): n = len(shoes) for i in range(n - 1 , 0 ,-1): for j in range(i): # 改为比较售价属性 if shoes[j].get_itemsellingprice() > shoes[j + 1].get_itemsellingprice(): tmp = shoes[j] shoes[j] = shoes[j + 1] shoes[j + 1] = tmp for i in range(len(shoes)): # 直接打印Shoe对象,触发__str__方法输出完整信息 print(shoes[i]) # 可选:返回排序后的列表 return shoes # 调用排序 bubblesort(shoes)
内容的提问来源于stack exchange,提问作者Newbie stint
相关产品推荐
相关产品推荐

