2013-09-10 3 views
1

추가, 그것은 나에게파이썬 - 소수

(1,0) 
을 줄 것이다 난 (16) oz2lboz 계산 있었다면 나는 지금 파운드 & 온스

def oz2lboz(oz): 
    oz, lbs = oz - int(oz), int(oz) 

    l = lbs * 0.062500 
    o = oz 

    print "(%d,%d)" % (l,o) 

에 온스 변환 다음과 같은 기능을 가지고 말할 수 있습니다

는 그러나, 나는

(1,0.0) 

어떻게 그 일에 대해 갈 것, 그것은 나를 포기해야합니까?

+1

'oz, lbs = oz - int (oz), int (oz)'절대적으로 필요하지 않다면 이런 식으로 인라인하지 말아라. – ThiefMaster

+0

귀하가 겪고있는 문제 중 일부는 귀하의 전환이 적절하지 않다는 것입니다. 나는이 답변을 아래에 충고했습니다. –

답변

1

우선 변환 알고리즘이 올바르지 않습니다.

이 라인 :

oz, lbs = oz - int(oz), int(oz) 

세트 oz는 소수점 부분의 값과 정수 부분의 나머지를 lbs disguards한다. 그런 다음 파운드를 1/16으로 곱하면 대부분의 경우 소수점 이하 자릿수가 다시 주어지며 이는 보통이 유형의 변환에서 원하지 않는 것입니다.

def oz2lboz(oz): 
    oz, lbs = oz - int(oz), int(oz) 

    l = lbs * 0.062500 
    o = oz 
    return (l,o) 

그리고 전화 : 우리가 지점을 만들 값을 반환하기 위해 원래의 코드를 변경합니다 아래

print "(%d,%.1f)" % oz2lboz(16) 
>>> (1,0.0) 
print "(%d,%.1f)" % oz2lboz(17) 
>>> (1,0.0) 
print "(%d,%.1f)" % oz2lboz(18) 
>>> (1,0.0) 

음을, 즉, 16, 17 옳지 않아 18 온스는 모두 1 파운드입니다! 기본적으로,

print "(%.4f,%.1f)" % oz2lboz(16) 
>>> (1.0000,0.0) 
print "(%.4f,%.1f)" % oz2lboz(17) 
>>> (1.0625,0.0) 
print "(%.4f,%.1f)" % oz2lboz(18) 
>>> (1.1250,0.0) 

를 따라서 :

print "(%.1f,%.1f)" % oz2lboz(16) 
>>> (1.0,0.0) 
print "(%.1f,%.1f)" % oz2lboz(17) 
>>> (1.1,0.0) 
print "(%.1f,%.1f)" % oz2lboz(18) 
>>> (1.1,0.0) 

더 나은,하지만 17, 18는 우리가 얻을 더 소수점을 사용하여 ... 여전히 동일합니다 ... 수레를 사용하여 파운드를 다시 시도 및 출력 수 있습니다 소수점 이하가 아니라면 뒤에서 일을 처리 할 것입니다. 왜냐하면 변환이 꺼져 있기 때문입니다.

이하 정확하고 약간 간단한 방법으로 변환을 다시 작성했습니다. 값을 다시 인쇄하지 않고 출력하므로 다시 출력하거나 필요에 따라 다시 사용할 수 있습니다.

(1, 1.0) 

당신은 다음과 같이 필요한 그것으로 출력 정상 파이썬 string formatting를 사용할 수 있습니다 :

print "(%d,%.1f)" % oz2lboz(17) #using decimal integer and float formatting 
>>> (1,1.0) 
print "The baby weighed about, %d pounds and %d ounces." % oz2lboz(42) # just decimals 
>>> The baby weighed about, 2 pounds and 10 ounces. 

또는 우리의 원래의 "문제"데이터를이 출력을 제공

def oz2lboz(oz): 
    lb=int(oz/16) 
    oz=float(oz%16) 
    return lb,oz 
print oz2lboz(17) 

예상되는 결과를 얻을 수 있습니다 :

print "(%d,%.1f)" % oz2lboz(16) 
>>> (1,0.0) 
print "(%d,%.1f)" % oz2lboz(17) 
>>> (1,1.0) 
print "(%d,%.1f)" % oz2lboz(18) 
>>> (1,2.0) 
+0

이해해 주셔서 감사합니다. –