CodingBat Python make_chocolate代码在“其他测试”中失败

时间:2018-08-13 12:28:23

标签: python

CodingBat.com(逻辑2 Python部分)上存在一个编码问题,该问题要求一个函数来确定用于重量要求的巧克力棒的数量。问题如下:

我们要包装一包目标公斤的巧克力。我们有小酒吧(每个1公斤)和大酒吧(每个5公斤)。假设我们总是在小条之前使用大条,则返回要使用的小条的数量。如果无法完成,请返回-1。

make_chocolate(4,1,9)→4 make_chocolate(4,1,10)→-1 make_chocolate(4,1,7)→2

我想出了解决该问题的方法,但在“其他测试”中仍然失败。有什么问题引起这种情况吗?

代码:

def make_chocolate(small, big, goal):
    if (small + 5*big < goal) or (goal % 5 > small):
        return -1

    elif small >= goal:
        return small
    else:
        smallnum = 0
        for i in range(1,big+1):
            if 5*i + small >= goal:
                if 5*i > goal:
                    break
                smallnum = goal - 5*i
        return smallnum

编辑: 感谢Mariah Akinbi,我设法解决了这个问题。我已将代码更新如下:

def make_chocolate(small, big, goal):
    if (small + 5*big < goal) or (goal % 5 > small):
        return -1

    elif 5 <= goal:
        smallnum = 0
        for i in range(1,big+1):
            if 5*i + small >= goal:
                if 5*i > goal:
                    break
                smallnum = goal - 5*i
        return smallnum
  return goal

2 个答案:

答案 0 :(得分:0)

您的代码似乎在以下方面失败:

make_chocolate(8,1,7)->返回8而不是2

我相信问题是:

elif small >= goal:
    return small

说明说先使用大棒,然后使用金块达到目标。

答案 1 :(得分:0)

这里有更简单的解决方案:

def make_chocolate(small, big, goal):
  big_use = min(goal / 5, big)
  small_needed = goal - big_use * 5
  if small < small_needed:
    return -1
  return small_needed