2 回答
TA贡献1805条经验 获得超9个赞
在运行循环之前,将价格从最小到最大排序。对于您的示例,它先添加 2,然后添加 3,然后添加 5,发现大于 7,因此返回 2。如果按顺序排列,则会添加 1、2 和 3,然后再添加到 5。
TA贡献1812条经验 获得超5个赞
您设置程序来尝试每个选项的方式是违反直觉的。如果先对列表进行排序,则无需每次都从头开始重试,只需浏览列表一次。您可以通过在开始处放置 来非常简单地完成此操作outfits=sorted(outfits)。这消除了对大部分代码的需求,因为最便宜的选项永远是第一个。
您可以做出的另一个改进是,您实际上不需要跟踪诸如花费和结果之类的事情。由于您唯一关心的是您可以购买多少商品,因此您可以创建一个变量(从 0 开始),并在每次您买得起另一件商品时为其添加 1。
另一个可能的改进是,您不必每次都检查,if spent<money只需将钱视为“余额”,然后从总数中减去您花费的金额,直到钱小于 0。
只是作为一个快速的侧面观点,而不是写
for i in len(outfits):
spent+=outfits[i]
您可以迭代列表本身
for i in outfits:
spent+=i
并得到相同的结果
您的最终代码应该如下所示:
def getMaximumOutfits(money,outfits):
outfits=sorted(outfits)#sorts the list from smallest --> biggest
items=0
max_size=0
for i in outfits: #goes through each element in the outfit list
money-=i #subtracts the cost of this item from the remaining money
if money<0: #if they couldn't afford this item
max_size=items #the amount of items they had before this one is their max
else: #if they can afford this item
items+=1 #the total items goes up by 1
return(max_size)
print(getMaximumOutfits(7,[2,3,5,1]))
>>> 3
有任何问题请随时询问我(们 ;)
添加回答
举报