【问题标题】:While loop program multiple prints and skips conditions?循环编程多个打印并跳过条件?
【发布时间】:2021-11-19 21:06:42
【问题描述】:

创建一个程序,我可以确定我是否可以将所需公斤的材料准确地装入一组 5 公斤和 1 公斤的容器中。问题是,由于某种原因,只有在所有条件都失败时,函数才应该打印 -1。此外,对于某些数字,它会随机停止工作。

程序有 3 个输入:

  • 5kg箱量,
  • 1kg 盒和
  • 需要包装的材料公斤数。

如果可能的话,它需要计算需要多少个盒子。如果可能,它必须首先使用所有 5 公斤的箱子。如果不能用精确的数量完成,它需要打印-1。


例如。

  1. 我有
  • 2x 5kg 箱子,

  • 6x 1kg 箱子

  • 14 公斤的材料。

    首先,我需要使用所有 5 公斤的箱子。现在我有 10 公斤装在 2 个 5 公斤的盒子里,剩下 4 公斤的材料。我有 6 个 1kg 的箱子,所以我从那里拿了 4 个箱子,剩下总共 6 个箱子用来包装它。

  1. 如果我有
  • 2x 5kg 盒子,
  • 2x 1kg 盒
  • 15公斤材料,

程序应该打印出-1,因为它不可能打包。

这是我迄今为止尝试过的:

s = int(input("Amount of 5kg boxes: "))
v = int(input("Amount of 1kg boxes: "))
k = int(input("Material in kg's: "))

def box(a, b, c):
    kar = 0
    while c>=5 and a>0:
        c = c-5
        a = a-1
        kar = kar + 1
        if c == 0:
            print(kar)
        else:
            if b>=c:
                kar = kar + c
                print(kar)
            else:
                print(-1)
        
        
box(s, v, k)

【问题讨论】:

  • 请使用更具描述性的变量名称。
  • 你根本不需要 while 循环。您将使用的 5 公斤箱子的数量是min(s, k//5)。然后,需要一个if 来查看剩余的东西是否适合您剩余的 1 公斤箱子。
  • 你为什么要为此使用循环?不只是一些简单的数学计算出来吗?
  • 只需...从material 中减去number of 5kg boxes * 5,然后再减去number of 1kg boxes,看看结果是否 >= 0...‽
  • 我的意思是a, b, c 变量。

标签: python function while-loop conditional-statements break


【解决方案1】:

你只需要一些数学

def box(box_5, box_1, amount):
    return (amount - min(box_5, amount // 5) * 5) <= box_1

# same but splitted to get it
def box(box_5, box_1, amount):
    nb_box5_that_can_be_used = min(box_5, amount // 5)
    amount -= nb_box5_that_can_be_used * 5
    return amount <= box_1

一个循环版本,所以你可以得到它不同

def box(box_5, box_1, amount):
    while amount >= 5 and box_5 > 0:
        amount -= 5
        box_5 -= 1
    return amount <= box_1

【讨论】:

  • 完全不知道这是在做什么,我感觉好像根本不用1kg的箱子?我也不明白这里的数学逻辑,猜我的解释很烂。
  • @RCWZX box_1是1公斤的箱子数量。问题是数量(移除 5 公斤后)低于 1 公斤盒子的数量,你是对的。 4公斤和5盒:好的,这就是为什么amount &lt;= box_1
猜你喜欢
  • 1970-01-01
  • 2021-06-13
  • 1970-01-01
  • 2012-12-10
  • 1970-01-01
  • 2022-10-18
  • 2014-05-07
  • 2018-09-07
  • 1970-01-01
相关资源
最近更新 更多