Python Word Prob问题

时间:2013-02-28 01:18:02

标签: python

这是单词问题:制作一个项目需要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秒。

任何人都可以让我知道我可以做些什么来改善这一点吗?

1 个答案:

答案 0 :(得分: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。
  • 为您的名字使用一致的样式。 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)