다음과 같은 자체 주석 처리 된 코드를 고려하십시오. 난 당신이
>>> def Float2Arch(num):
num=Fraction(num)
ft,inch=Fraction(num.numerator/num.denominator),Fraction(num.numerator%num.denominator)/num.denominator*12
real,frac=inch.numerator/inch.denominator,Fraction(inch.numerator%inch.denominator,inch.denominator)
return '{0}\' {1}-{2}"'.format(ft,real,frac)
산을 구문 분석에 고통을하지 않는 쉬운 것입니다 아키텍처에 플로트에서 변환 간단한
>>> from fractions import Fraction
>>> def Arch2Float(num):
#First Partition from Right so that the Feet and Unit always
#Remains aligned even if one of them is absent
ft,x,inch=num.rpartition("\'")
#Convert the inch to a real and frac part after stripping the
#inch (") identifier. Note it is assumed that the real and frac
#parts are delimited by '-'
real,x,frac=inch.strip("\"").rpartition("-")
#Now Convert every thing in terms of feet which can then be converted
#to float. Note to trap Error's like missing or invalid items, its better
#to convert each items seperately
result=0
try:
result = int(ft.strip("\'"))
except ValueError:
None
#Convert the real inch part as a fraction of feet
try:
result += Fraction(int(real),12)
except ValueError:
None
#Now finally convert the Fractional part using the fractions module and convert to feet
try:
result+=Fraction(frac)/12
except ValueError:
None
return float(result)
산성 시험
>>> print Arch2Float('15-3/4"') # 15-3/4" (without ft)
1.3125
>>> print Arch2Float('12\' 6-3/4"') #12' 6-3/4"
12.5625
>>> print Arch2Float('12\'6-3/4"') #12'6-3/4" (without space)
12.5625
>>> print Arch2Float('3/4"') #3/4" (just the inch)
0.0625
>>> print Arch2Float('15\'') #15' (just ft)
15.0
>>> print Arch2Float('15') #15 (without any ascent considered as inch)
1.25
을 유지하려고 노력 시험
>>> print Float2Arch(Arch2Float('12\' 6-3/4"'))
12' 6-3/4"
>>> print Float2Arch(Arch2Float('15-3/4"'))
1' 3-3/4"
>>> print Float2Arch(Arch2Float('12\'6-3/4"'))
12' 6-3/4"
>>> print Float2Arch(Arch2Float('3/4"'))
0' 0-3/4"
>>> print Float2Arch(Arch2Float('15\''))
15' 0-0"
>>> print Float2Arch(Arch2Float('15'))
1' 3-0"
>>>
참고 *** 플로트 표현을 가장 낮은 분모 (인치) 또는 가장 높은 분모 (피트)로 유지하는 것이 중요합니다. 나는이 경우 가장 높은 것을 선택했다. 당신이 그것을 낮은 wan't 경우 (이 작업 우아하지만 않는 경우 확실하지 않음) 당신은 방법에 따라 반올림 요청 을 수용하기 위해 12
업데이트로
def Float2Arch(num):
num=Fraction(num)
ft,inch=Fraction(num.numerator/num.denominator),Fraction(num.numerator%num.denominator)/num.denominator*12
real,frac=inch.numerator/inch.denominator,Fraction(inch.numerator%inch.denominator,inch.denominator)
for i in xrange(1,17):
if Fraction(frac) < Fraction(1.0/16*i): break
frac=Fraction(1.0/16*i)
if frac>= 1:
real+=1
frac=0
return '{0}\' {1}-{2}"'.format(ft,real,frac)
는 방법이있다 : 규칙적인 패턴은 구문 분석을 할 str.partition을 사용할 수 있습니다. 그러나 그것들은 단위가있는 값이므로 직접 부동 소수점으로 변환하는 것은 또한 그것이 될 묵시적 단위를 정의해야 할 것입니다. 당신은 또한 정밀도를 잃을 수 있습니다. – Keith
또한 Django는 웹 프레임 워크 일 뿐이므로 실제로이 작업과 관련이 없습니다. 이제 개체를 만들 수 있습니다. 개체를 만들면 해당 형식이 만들어집니다. 그런 다음 모든 템플릿을 사용할 수 있습니다. – Keith
감사합니다 키스 ... 장고 부분을 제거했습니다. – Clayton