다음은 초등학교에서 배우는 나눗셈 계산표를 만들어주는 Python 소스 코드이다.
나눗셈 계산표를 완성하고 나서 약수, 배수 관계를 알려준다.
아래의 소스는 Jython에서는 수정없이 그대로 실행되지만,
IronPython에서는 인코딩 선언 부분을
# -*- encoding: ms949 -*-
대신
# -*- encoding: cp949 -*-
# -*- encoding: CP949 -*-
# -*- encoding: euc-kr -*-
# -*- encoding: EUC-KR -*-
중 하나로 수정해야 실행된다.
- # -*- encoding: ms949 -*-
- # Filename: makeDivisionTable.py
- #
- # Purpose: Make a division table in a handy written form.
- #
- # Execute: python makeDivisionTable.py 12345 32
- # python makeDivisionTable.py 500210 61
- #
- # Date: 2008/05/15
- # Author: PH Kim [ pkim ((AT)) scripts.pe.kr ]
- import sys
- def printUsage():
- # print("Using: python makeDivisionTable.py [numerator] [denominator]")
- # print("Make a division table in a handy written form.")
- print("사용법: python makeDivisionTable.py [피제수] [제수]")
- print("손으로 작성한 형태의 나눗셈 표를 만들어준다.")
- def simplify(v, width):
- t = "%ld" % v
- if t[-2:] == ".0":
- t = t[0:len(t) - 2]
- slen = len(t)
- if slen < width:
- t = " " * (width - slen) + t
- return t
- def getSuffix(v):
- t = v % 10L
- suffix = "은"
- if "2459".find("%d" % t) >= 0:
- suffix = "는"
- return suffix
- def makeTable(numer, denom, quotient):
- strNumer = "%ld" % numer
- strDenom = "%ld" % denom
- strQuotient = "%ld" % quotient
- lenN = len(strNumer)
- lenD = len(strDenom)
- lenQ = len(strQuotient)
- offsetLeft = 3 + lenD + 3
- spaces = " "
- uline = "_" * (lenN + 2)
- sline = "-" * lenN
- bias = lenN - lenQ
- print(spaces[0:offsetLeft] + spaces[0:bias] + "%ld" % quotient)
- print(spaces[0:offsetLeft - 2] + uline)
- sys.stdout.write(" " + strDenom + " ) " + strNumer)
- strTmpR = strNumer[0: bias + 1]
- tmpR = long(strTmpR)
- tmpSub = 0L
- oneDigit = None
- for i in range(0, lenQ):
- if strQuotient[i: i + 1] == "0":
- if i + 1 < lenQ:
- oneDigit = strNumer[bias + i + 1: bias + i + 2]
- sys.stdout.write(oneDigit)
- strTmpR = strTmpR + oneDigit
- tmpR = long(strTmpR)
- else:
- tmpSub = long(strQuotient[i: i + 1]) * denom
- print(spaces[0: offsetLeft] + simplify(tmpSub, bias + i + 1))
- print(spaces[0: offsetLeft] + sline)
- tmpR = tmpR - tmpSub
- if tmpR == 0L and i + 1 < lenQ:
- sys.stdout.write(spaces[0: offsetLeft] + spaces[0: bias + i + 1])
- else:
- sys.stdout.write(spaces[0: offsetLeft] + simplify(tmpR, bias + i + 1))
- strTmpR = "%ld" % tmpR
- if i + 1 < lenQ:
- oneDigit = strNumer[bias + i + 1: bias + i + 2]
- if oneDigit != None:
- sys.stdout.write(oneDigit)
- strTmpR = strTmpR + oneDigit
- tmpR = long(strTmpR)
- return tmpR
- if len(sys.argv) < 3:
- printUsage()
- exit(1)
- a = None
- b = None
- try:
- a = long(sys.argv[1])
- b = long(sys.argv[2])
- except ValueError:
- print("피제수: %s, 제수: %s" % (sys.argv[1], sys.argv[2]))
- print("숫자 입력에 오류가 있습니다.")
- sys.exit(1)
- if a <= 0L:
- print("피제수: %ld" % a)
- print("피제수는 양의 정수라야 합니다.")
- sys.exit(1)
- elif b <= 0L:
- print("제수: %ld" % b)
- print("제수는 양의 정수라야 합니다.");
- sys.exit(1)
- q = a / b
- r = a % b
- sys.stdout.write("나눗셈 %ld ÷ %ld 의 결과: " % (a, b))
- sys.stdout.write("몫: %ld, " % q)
- print("나머지: %ld" % r)
- k = makeTable(a, b, q)
- if k == r:
- print("\n나머지: %ld" % k)
- if k == 0L:
- print("%ld = %ld x %ld" % (a, b, q))
- print("%ld%s %ld의 배수(mupltiple)이다." % (a, getSuffix(a), b))
- print("%ld%s %ld의 약수(divisor)이다." % (b, getSuffix(b), a))
- else:
- print("%ld = %ld x %ld + %ld" % (a, b, q, r))
- print("%ld%s %ld의 배수(mupltiple)가 아니다." % (a, getSuffix(a), b))
실행> python makeDivisionTable.py 500210 61
나눗셈 500210 ÷ 61 의 결과: 몫: 8200, 나머지: 10 8200 ________ 61 ) 500210 488 ------ 122 122 ------ 10 나머지: 10 500210 = 61 x 8200 + 10 500210은 61의 배수(mupltiple)가 아니다.
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
'프로그래밍 > Python' 카테고리의 다른 글
손으로 계산하는 긴자리 곱셈표 만들기 with Python (0) | 2009.03.06 |
---|---|
문자열 거꾸로 하기 with Python (0) | 2009.01.23 |
클래스 상속(subclassing) 예제 with Python (or Jython or IronPython) (0) | 2008.04.05 |
삼각형 출력 예제를 통한 여러 가지 소스 비교 with Python (0) | 2008.04.05 |
Python에서 공백 문자 없이 연속적으로 출력하려면 (0) | 2008.04.04 |