2

这是单词问题:生产一个项目需要 2 分 7 秒。不幸的是,在生产了 143 件产品后,制造商必须冷却 5 分 13 秒才能继续生产。编写一个程序,计算制造给定数量的物品所需的时间。

测试数量为1340项。

numItems = 1340
produceitem = 2 * 60 + 7  #2 minutes and 7 seconds
cooldown = 5 * 60 + 13 #5 minutes and 13 seconds
items_before_delay = 143
productiontime = 0

if numItems <= 143:
    productiontime = produceitem * numItems
if numItems > 143:
    productiontime = (produceitems * numItems) - (numItems / items_before_delay * cooldown) 
print str(productiontime) + "seconds"

测试号的输出应该是 172997 秒,但我的程序将其输出为 167363 秒。

谁能让我知道我可以做些什么来改善这一点?

4

1 回答 1

2

您正在减去冷却时间,而不是添加它。而已。

所以,改变这个:

productiontime = (produceitems * numItems) - (numItems / items_before_delay * cooldown) 

……对此:

productiontime = (produceitems * numItems) + (numItems / items_before_delay * cooldown) 

然而,当我们在这里时:

  • 您定义了produceitem,但使用了produceitems. 如果这确实有效,那可能是因为您在交互式解释器中很幸运,并且已经定义produceitems了。
  • 如果你要定义一个常量items_before_delay,不要直接使用数字 143,使用items_before_delay.
  • if a <= b:那就不要这样做if a > b:;只需将第二个更改为else:.
  • 事实上,你根本不需要if。如果numItems <= 143,(numitems / items_before_delay * cooldown)将是 0,所以第二个版本仍然会给出正确的答案。
  • 除非您处理的是相当旧的 Python 版本,否则通常显式使用//截断整数除法比使用/. 这意味着您的代码仍然可以在 Python 3.x 中运行,或者如果有人执行了__future__语句等,更重要的是,这意味着人类可以阅读和理解您的代码,而无需猜测它是用于 2.x 还是3.x。 X。
  • 为您的名字使用一致的风格。items_before_delay遵循 PEP8 建议,但numItems不遵循。
  • 无需像productiontime在设置变量之前那样“声明”变量。
  • 连接两个字符串之间不会有空格,而且您可能不希望172997seconds没有空格。
  • 尽量避免将行写得太长而无法容纳 80 列。即使您认为没有人关心老式的文本编辑器,它仍然是 StackOverflow 等新型 Web 界面的问题。(没有人喜欢不必要的水平滚动条。)

所以:

num_items = 1340
produce_item = 2 * 60 + 7  #2 minutes and 7 seconds
cooldown = 5 * 60 + 13 #5 minutes and 13 seconds
items_before_delay = 143

total_cooldown = num_items // items_before_delay * cooldown
production_time = (produce_item * num_items) + total_cooldown
print '{} seconds'.format(production_time)
于 2013-02-28T01:21:50.157 回答