【问题标题】:Buy X Get X for free formula in Python在 Python 中购买 X 获得 X 免费公式
【发布时间】:2018-12-05 08:03:29
【问题描述】:

在买一送一的情况下,计算起来很简单,只需要除以我们想要的数量(例如:买3送3,所以我们得到6)。

但是当它变得更复杂时,比如买 4 送 1,如果我们想买 13,最好的购买选择是什么(答案是买 11,因为你可以免费获得 2)?我发现有趣的是,它很容易计算,但把它放在代码中,我迷路了。

买4送1,这是我找到的模式,但是我不知道如何将它实际放入代码中。

基本上,我想制定“买X送X”,所以当给定情况时,它会输出最佳购买选项。例如,如果我要购买其中的 13 个,它将输出“11”。

the quantity we need:    we only need to buy:    what we end up having:

          1                        1                       1
          2                        2                       2
          3                        3                       3
          4                        4                       5
          5                        4                       5
          6                        5                       6
          7                        6                       7
          8                        7                       8
          9                        8                       10
         10                        8                       10
         11                        9                       11
         12                       10                       12
         13                       11                       13
         14                       12                       15
         15                       12                       15
          .                        .                        .
          .                        .                        .
          .                        .                        .

【问题讨论】:

  • what 放入代码中,对吗?您是否需要根据所需的最少物品和折扣计划来制定最佳购买策略的功能?
  • 这不是python 问题(到目前为止,鉴于当前问题的形式),或者与编程有关的任何事情。您应该解算术并向我们展示您在编码这些计算时遇到的问题。
  • 很抱歉没有说清楚,我想制定“买X送X”,所以当给定情况时,它会输出最佳购买选项。例如,如果我想购买其中的 13 个,它将输出“11”。希望有意义
  • 请在问题中包含该内容,还请包含您编写该代码的尝试。如果你真的不知道从哪里开始,那就从 Python 教程开始
  • 嗨@timgeb,抱歉没有说清楚,是的,我尝试根据最低项目和折扣计划制定最佳购买策略。根据下面的答案,我将尝试改进我的代码,非常感谢您的帮助。

标签: python python-3.x shopping-cart price promotions


【解决方案1】:

这很简单:您想知道有多少完整的包装,以及您需要获得多少非包装物品。积分除法很方便。

def buy_to_acquire(desired, buy=1, free=0):
    pack = buy + free
    buy_packs = desired // pack
    buy_individual = desired % pack
    return buy * buy_packs + buy_individual

buy_to_acquire(13, buy=4, free=1)
# => 11

替代版本不是那么容易理解,但对计算机来说速度有点快:

import math
def buy_to_acquire(desired, buy=1, free=0):
    return math.ceil(desired * buy / (buy + free))

【讨论】:

  • 哇...为什么我没有想到...你让它如此简单。谢谢
猜你喜欢
  • 2021-03-18
  • 1970-01-01
  • 2014-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-02
  • 2022-11-15
相关资源
最近更新 更多