우선 변환 알고리즘이 올바르지 않습니다.
이 라인 :
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)
'oz, lbs = oz - int (oz), int (oz)'절대적으로 필요하지 않다면 이런 식으로 인라인하지 말아라. – ThiefMaster
귀하가 겪고있는 문제 중 일부는 귀하의 전환이 적절하지 않다는 것입니다. 나는이 답변을 아래에 충고했습니다. –