回购函数的递归计数
Recursive counting on buy back function
我正在尝试创建一个功能,本质上是一个带瓶子的回购程序,规则如下
money -> 客户拥有的金额
bottlesOwned -> 客户必须交换的瓶子数量
价格 -> 一瓶汽水的价格
exchangeRate -> 汇率,以元组表示。第一个元素是可以交换的瓶子组的最小尺寸。第二个参数是一组瓶子收到的退款。
顾客单次光顾商店可以退还任意多组瓶子,但退还的瓶子总数必须是 exchangeRate 第一个元素的倍数。
该函数必须输出客户在所有行程中能够购买的瓶子总数,直到客户用完钱。
def lightningBottle(money, bottlesOwned, price, exchangeRate):
if bottlesOwned >= exchangeRate[0]:
bottlesOwned -= exchangeRate[0]
money += exchangeRate[1]
if money >= price:
bottlesOwned += 1
bottlesbought += 1
money -= price
return lightningBottle(money, bottlesOwned, price, exchangeRate)
else:
print ("we bought",bottlesbought,"bottles")
return bottlesbought
这是我所了解的,但我无法弄清楚如何在不使用全局变量的情况下让 bottlesbought 计数器计数(我不能使用全局变量,因为它不会在并发测试中重置并且提供了错误的答案)
你很接近。您只需要 bottlesbought
作为函数的参数:
def lightningBottle(money, bottlesOwned, price, exchangeRate, bottlesbought=0):
if bottlesOwned >= exchangeRate[0]:
bottlesOwned -= exchangeRate[0]
money += exchangeRate[1]
if money >= price:
bottlesOwned += 1
bottlesbought += 1
money -= price
return lightningBottle(money, bottlesOwned, price, exchangeRate, bottlesbought)
else:
print ("we bought",bottlesbought,"bottles")
return bottlesbought
你可以给它一个默认值,这样你就不需要指定它在开始时等于零(它总是这样)。
我正在尝试创建一个功能,本质上是一个带瓶子的回购程序,规则如下
money -> 客户拥有的金额
bottlesOwned -> 客户必须交换的瓶子数量
价格 -> 一瓶汽水的价格
exchangeRate -> 汇率,以元组表示。第一个元素是可以交换的瓶子组的最小尺寸。第二个参数是一组瓶子收到的退款。
顾客单次光顾商店可以退还任意多组瓶子,但退还的瓶子总数必须是 exchangeRate 第一个元素的倍数。
该函数必须输出客户在所有行程中能够购买的瓶子总数,直到客户用完钱。
def lightningBottle(money, bottlesOwned, price, exchangeRate):
if bottlesOwned >= exchangeRate[0]:
bottlesOwned -= exchangeRate[0]
money += exchangeRate[1]
if money >= price:
bottlesOwned += 1
bottlesbought += 1
money -= price
return lightningBottle(money, bottlesOwned, price, exchangeRate)
else:
print ("we bought",bottlesbought,"bottles")
return bottlesbought
这是我所了解的,但我无法弄清楚如何在不使用全局变量的情况下让 bottlesbought 计数器计数(我不能使用全局变量,因为它不会在并发测试中重置并且提供了错误的答案)
你很接近。您只需要 bottlesbought
作为函数的参数:
def lightningBottle(money, bottlesOwned, price, exchangeRate, bottlesbought=0):
if bottlesOwned >= exchangeRate[0]:
bottlesOwned -= exchangeRate[0]
money += exchangeRate[1]
if money >= price:
bottlesOwned += 1
bottlesbought += 1
money -= price
return lightningBottle(money, bottlesOwned, price, exchangeRate, bottlesbought)
else:
print ("we bought",bottlesbought,"bottles")
return bottlesbought
你可以给它一个默认值,这样你就不需要指定它在开始时等于零(它总是这样)。