2013-02-28 67 views
2

以下是單詞問題:完成產品需要2分7秒。不幸的是,生產了143件產品後,製造商必須冷卻5分13秒才能繼續使用。編寫一個程序,計算製造給定數量物品所需的時間量。Python Word Prob問題

測試編號爲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秒。

任何人都可以讓我知道我能做些什麼來改善嗎?

回答

2

您正在減去冷卻時間,而不是添加冷卻時間。而已。而我們在這裏不過

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

,:

  • 你定義produceitem,但使用produceitems

    因此,改變這種:

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

    ...這一點。如果這一切都有效,那可能是因爲你在交互式解釋器中運氣不錯,而且已經定義了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) 
+0

THX這麼多!一定會按照你的意見! 1340只是一個測試編號。我會改變它原始輸入:) @abarnert – user2006236 2013-02-28 01:33:52

+0

@ user2006236:是的,我想它要麼是在你的真實'int(raw_input())'或'int(sys.argv [1])'程序。 – abarnert 2013-02-28 01:54:13