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
答案 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