2012-10-17 3 views
0

다음은 슈퍼마켓의 청구서를 계산하는 코드입니다. 모든 것은 괜찮습니다. 그러나 문제는 입력이 사과 인 경우이 솔루션이 작동하지 않는다고 들었습니다.수퍼 마켓의 청구서 계산

저는 사과가 재고가 없기 때문에 사과의 가치가 0이어야한다고 생각하지만, 여전히 제가 잘못하고있는 것이 있다고 생각합니다. 도와주세요.

groceries = ["apple","banana", "orange",] 

stock = {"banana": 6, 
    "apple": 0, 
    "orange": 32, 
    "pear": 15 
    } 

prices = {"banana": 4, 
    "apple": 2, 
    "orange": 1.5, 
    "pear": 3 
    } 

def computeBill(food): 
    total = 0 
    for item in food: 
     tot = prices[item] * stock[item] 
     print item, tot 
     total += tot 
    return total 

computeBill(groceries) 
+4

항목에 재고가 없으면 어떻게 하시겠습니까? 이 코드는 실제로 문제가 아닙니다. 단지 ... 원하는 것은 무엇입니까? – jdi

+1

입력 내용이'[ "apple"]'이면 사람이 뭐라고 말 했나요? –

+1

또한,'computeBill'에서 코드를 설정하는 방식으로 아이템의 전체 재고를 청구합니다. 너가 원하는게 그거야? 그리고 "바나나"를 여러 번 넣으면 사용 가능한 재고량이 두 배가됩니다. – jdi

답변

1

처럼 보일 수 있습니다.

품목에 재고가없고 강사가이 경우 0을 반환 할 수 없다고 말하는 경우 다른 옵션은 예외를 발생시키는 것이거나 오류 상태를 나타내는 센티널 값입니다.

def computeBill(food): 
    total = 0 
    for item in food: 
     stock_count = stock[item] 
     if stock_count == 0: 
      raise ValueError("item %s is out of stock" % item) 
     tot = prices[item] * stock_count 
     print item, tot 
     total += tot 
    return total 

아니면 예외를 발생하지 않으려면 당신이 어쨌든 유효한 총 아닌 느낀다면, 당신은 -1를 반환 할 수 있습니다 : 함수에서 몇 가지 다른 문제가 있습니다

 if stock_count == 0: 
      return -1 

그것이리스트를 계산하는 방법과 주식을 계산하는 방법에 대해,하지만 당신은 지금 당장 그것에 대해 관심이 없다고 말했습니다.

+0

나는 stock_count가 필요한 것임을 짐작하고 있습니다. 그 밖의 모든 것은 동일하기 때문입니다. 감사. – ronak

+0

'stock_count'는 변수에'stock [item]을 미리 저장하고 있기 때문에'if'와'*'에 대해 두 번 입력 할 필요가 없습니다. 그것은별로 변하지 않습니다. 이것은 실제로 예외를 발생 시키거나 -1을 반환하여 함수의 동작을 변경합니다. – jdi

1

왜 이런 식으로 작동하지 않을지 모르겠다. 귀하의 의견은 ['apple'] 인 경우,이 일어날 것 :

computeBill(['apple']) 
total = 0 
item = 'apple' 
tot = price['apple'] * stock['apple'] 
tot = 2 * 0 
print 'apple',0 
total += 0 
return total 
return 0 

가 목록에 포장하지 않고 단일 항목에서 통과 할 수 있기를 기대하지 않는, 그래서`computeBill ('사과')를 호출. 이 경우 함수 시작시 유형 확인을 수행해야합니다. 그것은 잘 정의되지 않은 사용자의 computeBill 기능에 대한 사양을 보이기 때문에 즉, 난 그냥이 답변으로 내 자신에 터질과 제안을 만들려고하고이

if type(food) is not list: 
    food = [food] 
0
def compute_bill(food): 
    total=0 
    for item in food: 
    if stock[item]>0: 
     tot=prices[item] 
     total+=tot 
     stock[item]-=1 
    return total 
관련 문제