给定两个容量不同的桶,以及先装满哪个桶,通过有策略地在两个桶之间倒水,确定量出精确升数需要多少次操作。
你的解答必须遵守以下规则:
你的程序接收以下输入:
你的程序应确定:
注意:只要任意一个桶发生变化,都算作 1 次操作。
示例: 一号桶最多能装 7 升,二号桶最多能装 11 升。 假设在某一时刻,一号桶里有 7 升,二号桶里有 8 升(7,8)。 如果你清空一号桶,二号桶不变,两个桶分别剩下 0 升和 8 升(0,8),这算作一次操作。 相反,如果你把一号桶倒入二号桶,直到二号桶装满,结果一号桶里有 4 升,二号桶里有 11 升(4,11),同样只算作一次操作。
另一个例子: 一号桶能装 3 升,二号桶最多能装 5 升。 题目要求你必须从一号桶开始。 所以你的第一个操作是装满一号桶。 第二个操作你选择清空一号桶。 对于第三个操作,你不能装满二号桶,因为这会违反第三条规则:任何操作之后,都不能出现起始桶为空而另一个桶已满的状态。
由 Lindsay Levine 在 Fullstack Academy 用 <3 写成。
有时需要引发异常。引发异常时,应该始终附上一条有意义的错误消息,说明错误的来源是什么。这样能让代码更易读,对调试也有很大帮助。如果已经知道错误来源是某种特定类型,可以选择引发某个内置错误类型,但仍然应该附上一条有意义的消息。
这道练习要求你使用 raise 语句 来“抛出”ValueError。只有同时raise这个exception并附上消息,测试才会通过。
要引发一个带消息的ValueError,就把消息写成exception类型的实参:
raise ValueError("A meaningful error message here.")