2 回答

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個(gè)贊
在運(yùn)行循環(huán)之前,將價(jià)格從最小到最大排序。對(duì)于您的示例,它先添加 2,然后添加 3,然后添加 5,發(fā)現(xiàn)大于 7,因此返回 2。如果按順序排列,則會(huì)添加 1、2 和 3,然后再添加到 5。

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊
您設(shè)置程序來(lái)嘗試每個(gè)選項(xiàng)的方式是違反直覺(jué)的。如果先對(duì)列表進(jìn)行排序,則無(wú)需每次都從頭開(kāi)始重試,只需瀏覽列表一次。您可以通過(guò)在開(kāi)始處放置 來(lái)非常簡(jiǎn)單地完成此操作outfits=sorted(outfits)。這消除了對(duì)大部分代碼的需求,因?yàn)樽畋阋说倪x項(xiàng)永遠(yuǎn)是第一個(gè)。
您可以做出的另一個(gè)改進(jìn)是,您實(shí)際上不需要跟蹤諸如花費(fèi)和結(jié)果之類的事情。由于您唯一關(guān)心的是您可以購(gòu)買多少商品,因此您可以創(chuàng)建一個(gè)變量(從 0 開(kāi)始),并在每次您買得起另一件商品時(shí)為其添加 1。
另一個(gè)可能的改進(jìn)是,您不必每次都檢查,if spent<money只需將錢視為“余額”,然后從總數(shù)中減去您花費(fèi)的金額,直到錢小于 0。
只是作為一個(gè)快速的側(cè)面觀點(diǎn),而不是寫(xiě)
for i in len(outfits):
spent+=outfits[i]
您可以迭代列表本身
for i in outfits:
spent+=i
并得到相同的結(jié)果
您的最終代碼應(yīng)該如下所示:
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
有任何問(wèn)題請(qǐng)隨時(shí)詢問(wèn)我(們 ;)
添加回答
舉報(bào)