2009-12-29 3 views
1

저는 Python에 대한 멍청한 생각이 들었습니다. 세금 변수를 코드에 유지하여 변경해야하는 경우 쉽게 업데이트 할 수 있기를 원합니다. 나는 다른 방법으로 실험했지만 인쇄 세금 라인을 건너 뛰고 합계와 부분 합계에 대해 동일한 값을 인쇄 할 수만있었습니다. 세금 변수에 sum (items_count)을 곱하면 어떻게됩니까? 여기에 코드입니다 : 당신은 대신TypeError : 'float'유형의 non-int로 시퀀스를 곱할 수 없습니다.

'$%.2f' % sum(items_count) * tax 

오류가 당신이 ('$%.2f' % sum(items_count)) * tax로 평가됩니다 사용되는 하나의

'$%.2f' % (sum(items_count) * tax) 

를 사용할 필요가

items_count = [] 
tax = float(.06) 
y = 0 

count = raw_input('How many items do you have? ') 

while count > 0: 
    price = float(raw_input('Please enter the price of your item: ')) 
    items_count.append(price) 
    count = int(count) - 1 

print 'The subtotal of your items is: ' '$%.2f' % sum(items_count) 
print 'The amount of sales tax is: ' '$%.2f' % sum(items_count) * tax 
total = (sum(items_count) * tax) + sum(items_count) 
print 'The total of your items is: ' '$%.2f' % total 
+1

코드를 다시 붙여 넣으면 코드로 완전히 형식이 지정됩니다. 지금은 읽을 수 없습니다. 감사! – Kimvais

+0

내 질문에 답해 주신 모든 분들께 감사드립니다. @steveha, 좋은 설명, 그리고 예 처음에는 y 변수에 실제로 의미가있는 코드를 작성했습니다. @Kimvais, 나를위한 코드를 정리해 주셔서 감사합니다. – Timmay

답변

5

오류에 대한 역 추적을 제공하는 경우 그것은 도움이 될 것이다. 귀하의 코드를 실행하고 이것을 다시 추적 해 보았습니다.

Traceback (most recent call last): 
    File "t.py", line 13, in <module> 
    print 'The amount of sales tax is: ' '$%.2f' % sum(items_count) * tax 
TypeError: can't multiply sequence by non-int of type 'float' 

대답은 이것이 우선 순위 문제라는 것입니다. 당신은 단지 이런 짓을하는 경우 :

sum(items_count) * tax 
당신은 문자열과 % 연산자 표현을 가지고 있기 때문에,하지만, sum()에 대한 호출이 문자열에 연결되어 작동합니다 효과적으로 당신은

:

<string_value> * tax 

다음
print 'The amount of sales tax is: ' '$%.2f' % (sum(items_count) * tax) 

파이썬에서 연산자 우선 순위의 문서는 다음과 같습니다

이 솔루션은 당신이 원하는 우선 순위를 강제로 괄호를 추가하는 것입니다. %*가 동일한 우선 순위를 가지며, 따라서 다음 순서가 좌우 규칙에 의해 제어된다

http://docs.python.org/reference/expressions.html#summary

참고. 따라서 문자열과 sum()에 대한 호출은 % 연산자와 연결되어 있으며 <string_value> * tax으로 남습니다.

items_tax = sum(items_count) * tax 
print 'The amount of sales tax is: ' '$%.2f' % items_tax 

당신이 무슨 일이 일어나고 있는지 확실하지 않은 경우, 때로는 명시 적으로 임시 변수를 사용하여 시작하는 것이 좋습니다는, 그리고 체크 : 대신 괄호, 당신은 또한 명시 적으로 일시적으로 사용할 수

주 각각이 당신이 기대했던 값으로 설정되었는지 확인하십시오.

P. 실제로는 float()에 대한 모든 호출이 필요하지 않습니다.그것은 중요하지 않습니다

tax = 0.06 

내가 분수에 초기 제로를 넣어 좋아하지만, 당신은 tax = 0.06 또는 tax = .06 중 하나를 사용할 수 있습니다 값 0.06 이미 float 값, 그래서 그것은 단지에 충분들은 말한다.

나는 raw_input() 전화를 float()으로 감싸서 가격을 부유시키는 방법을 좋아합니다. count에 대해 동일한 작업을 수행하고 raw_input() 전화를 int()으로 호출하면 int 값을 얻을 수 있습니다. 그런 다음 나중에 표현은 단순히 그것은 count 처음에 문자열로 설정 한 다음 나중에 다시 바인딩되는 약간 까다로운

count -= 1 

수 있습니다. 어리석은 사용자 또는 미친 사용자가 잘못된 수를 입력하면 int()이 예외를 발생시킵니다. 예외가 바로 발생한다면 나중에는 겉으로보기에는 단순한 표현이 아닌 raw_input()으로 전화하는 것이 좋습니다.

물론 코드 샘플에서 아무 것도 사용하지 않고 y입니다.

1

은 (문자열을 곱하여 부유물로).

0

그냥 추가 괄호는 :

print 'The amount of sales tax is: ' '$%.2f' % (sum(items_count) * tax) 
1

당신은 sum(items_count) * tax 괄호가 필요합니다.

은 나뿐만 아니라 코드 조금 청소의 자유를 :)했다

items_count = [] 
tax = float(.06) 

count = int(raw_input('How many items do you have? ')) 

while count: 
    price = float(raw_input('Please enter the price of your item: ')) 
    items_count.append(price) 
    count -= 1 

print 'The subtotal of your items is: $%.2f' % sum(items_count) 
print 'The amount of sales tax is: $%.2f' % (sum(items_count) * tax) 
print 'The total of your items is: $%.2f' % ((sum(items_count) * tax) + 
     sum(items_count)) 
관련 문제