2013-02-28 2 views
2

다음은 단어 문제입니다. 항목을 생성하는 데 정확히 2 분 7 초가 걸립니다. 불행히도, 143 품목이 생산 된 후에, 제조업자는 5 분 13 초 동안 식혀야 계속할 수 있습니다. 지정된 수의 제품을 제조하는 데 필요한 시간을 계산하는 프로그램을 작성하십시오.Python Word Prob Issue

테스트 번호는 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) 

을 ... 여기에 :

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

을하지만, 우리가 여기있는 동안 :

  • 당신은 produceitem를 정의하지만, produceitems을 사용했다. 이것이 전혀 효과가 없다면 아마도 대화 형 통역사에서 운이 좋았고 이미 produceitems을 정의했기 때문일 것입니다.
  • 상수를 items_before_delay으로 정의하려면 143을 직접 사용하지 말고 items_before_delay을 사용하십시오.
  • Do do do if a <= b: then if a > b:; 두 번째 것을 else:으로 변경하십시오.
  • 실제로 if은 전혀 필요하지 않습니다. numItems <= 143 인 경우 (numitems/items_before_delay * cooldown)은 0이되므로 두 번째 버전에서도 올바른 대답을 얻을 수 있습니다.
  • 꽤 오래된 파이썬 버전을 다루지 않는 한 일반적으로 /보다 정수 나누기를 줄이려면 //을 명시 적으로 사용하는 것이 좋습니다. 즉, 코드가 여전히 Python 3.x에서 작동하거나 다른 사람이 __future__ 문을 사용하는 경우 - 더 중요한 것은 사람이 코드를 읽고 이해할 수 있음을 의미합니다. 2.x 또는 3인지 여부를 추측 할 필요가 없습니다. .엑스.
  • 이름에 일관된 스타일을 사용하십시오. items_before_delay은 PEP8 권장 사항을 따르지만 numItems은 권장하지 않습니다.
  • 변수를 설정하기 전에 productiontime과 같은 변수를 "선언"할 필요가 없습니다.
  • 두 문자열을 연결해도 사이에 공백이 없으며 공백없이 172997seconds을 원하지 않을 수도 있습니다.
  • 80 열에 너무 길게 작성하지 않도록하십시오. 구식 텍스트 편집기에 대해 아무도 신경 쓰지 않는다고 생각하더라도 StackOverflow와 같은 새로운 웹 인터페이스에 여전히 문제가 있습니다. (. 아무도 불필요한 수평 스크롤 막대를 좋아한다) 그래서

:

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

들으을 너무 많이! 확실히 통해 UR 조언을 따를 것이다! 1340은 테스트 번호였습니다[email protected] – user2006236

+0

@ user2006236 : 그래, 내가 진짜로 (int) (raw_input()) 또는 int (sys.argv [1]) 될 것이라고 생각했다. 프로그램. – abarnert