python - 来自codingbat的Make_bricks
问题描述
我是新手,正在从 codingbat 中寻找 make_bricks 的提示(请参见此处)。我写了一些代码,但并非一切正常。也许有人可以给我一个提示?
任务
我们想要制作一排目标英寸长的砖块。我们有许多小砖(每个 1 英寸)和大砖(每个 5 英寸)。True
如果可以通过从给定的砖块中选择来实现目标,则返回。这比看起来要难一些,并且可以在没有任何循环的情况下完成。
漏洞
我有一个问题:
make_bricks(3, 1, 9) → False
- 我的代码是True
make_bricks(3, 2, 9) → False
- 我的代码是True
make_bricks(1, 4, 12) → False
- 我的代码是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
解决方案
当您得出不正确或与您预期不同的结果时,分解步骤以确定可能出错的地方通常很有帮助。例如,这里的代码分解略有不同,因此您可以更轻松地遵循逻辑流程。
# ======================================
# 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))
这为您提供了一个提示,说明您如何识别可能无法按照您期望的方式进行评估。在揭示解释之前,看看你是否能找出罪魁祸首。
您的代码的评估 #6
True
在small + big does not equal the goal
. 因为此评估的结果是True
(它不等于目标),所以您的脚本正在返回True
. 事实上,您的代码将为True
您测试的每个组合返回。
为了获得您期望的结果,您需要更正有问题的评估并稍微重构您的代码以解决这种False
情况。
一旦你的代码按照你想要的方式工作,你总是可以整合操作或以其他方式重构,以使代码更精简和高效。
推荐阅读
- python - 如何在同一台机器上的不同 GPU 上并行运行多个 TensorFlow 实例?
- sql - 转换未知的六位数日期格式,可能是 Julian 的一些变体
- swift - UITableViewCell 单元格视图设计
- php - MariaDB 10.2 json 插入对 PHP 无效
- firebase - 如何观察angularfireobject?
- python - 如何将单词字符串列表转换为字符串作为句子?
- apache-kafka - Kafka 连接到 HBase
- php - php多图上传处理错误
- python - Python qrcode模块未保存
- php - mysqli_*somemethod*()_expect 参数