【问题标题】:Recursive counting on buy back function回购函数的递归计数
【发布时间】:2020-05-24 02:13:26
【问题描述】:

我正在尝试创建一个本质上是一个带有瓶子的回购程序的功能,规则如下

money -> 客户拥有的金额

bottlesOwned -> 客户必须交换的瓶子数量

price -> 一瓶汽水的价格

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

据我所知,但我无法弄清楚如何在不使用全局变量的情况下让瓶子购买计数器打勾(我不能使用全局变量,因为它不会在并发测试时重置并提供错误答案)

【问题讨论】:

    标签: python python-3.x recursion counter


    【解决方案1】:

    你已经接近了。您只需要 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
    

    你可以给它一个默认值,这样你就不需要在开始时指定它等于零(它总是这样)。

    【讨论】:

    • 我之前考虑过这样做,但我不知道是否考虑创建一个全局变量。无论如何我应该尝试一下,不过感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 2015-12-04
    • 2022-01-14
    • 1970-01-01
    • 2022-11-25
    • 2022-01-16
    • 2016-11-27
    • 1970-01-01
    相关资源
    最近更新 更多