首页 > 解决方案 > 来自codingbat的Make_bricks

问题描述

我是新手,正在从 codingbat 中寻找 make_bricks 的提示(请参见此处)。我写了一些代码,但并非一切正常。也许有人可以给我一个提示?


任务

我们想要制作一排目标英寸长的砖块。我们有许多小砖(每个 1 英寸)和大砖(每个 5 英寸)。True如果可以通过从给定的砖块中选择来实现目标,则返回。这比看起来要难一些,并且可以在没有任何循环的情况下完成。


漏洞

我有一个问题:


我的代码:

def make_bricks(small, big, goal):
    return small==goal or big==goal or goal%5==small or small*1+big*5==goal or 
    goal%5<=small or small+big!=goal or goal-5!=small or goal-small*1==big*5

make_bricks

标签: python

解决方案


当您得出不正确或与您预期不同的结果时,分解步骤以确定可能出错的地方通常很有帮助。例如,这里的代码分解略有不同,因此您可以更轻松地遵循逻辑流程。

# ======================================
# Your code written slightly differently
# ======================================

def make_bricks(small, big, goal):
    if small==goal:
        return 1
    elif big==goal:
        return 2
    elif goal%5==small:
        return 3
    elif small*1+big*5==goal:
        return 4
    elif goal%5<=small:
        return 5
    elif small+big!=goal:
        return 6
    elif goal-5!=small:
        return 7
    elif goal-small*1==big*5:
        return 8
    else:
        return False
        
print(make_bricks(3, 1, 9))
print(make_bricks(3, 2, 9))
print(make_bricks(1, 4, 12))

这为您提供了一个提示,说明您如何识别可能无法按照您期望的方式进行评估。在揭示解释之前,看看你是否能找出罪魁祸首。

您的代码的评估 #6Truesmall + big does not equal the goal. 因为此评估的结果是True(它不等于目标),所以您的脚本正在返回True. 事实上,您的代码将为True您测试的每个组合返回。

为了获得您期望的结果,您需要更正有问题的评估并稍微重构您的代码以解决这种False情况。

一旦你的代码按照你想要的方式工作,你总是可以整合操作或以其他方式重构,以使代码更精简和高效。


推荐阅读