코딩을 먼저 보면
def frange(*factor) : def oper(start, stop, step=0.25) : result = [] while start <= stop : result.append(start) start += step return result if factor == () : print 'Error : There must be One argument' elif len(factor) == 1 : return oper(0.0, factor[0]) elif (len(factor) == 2) or (len(factor) == 3) : return oper(*factor) else : print 'Error : Max argument is Three'와 같이 코딩을 해볼 수 있다.
frange의 인수 개수가 가변일 뿐더러 한개만 주면 stop 의 인수이고, 두개를 주면 처음 것은 start, 나중 것은 stop 이기 때문에 frange 자체에 디폴트 값도 줄 수가 없다.
따라서 가변 인수로 받은 다음 인수가 한개, 두개 또는 세개, 그 이상으로 나누어서 분류 처리를 하였다.
2번 문제는 조합 논리 회로 1비트 덧셈기 adder를 시뮬레이션 하는 문제이다.
여기서 논리와 1비트를 빨강색으로 강조한 이유는 이 문제를 쉽게 코딩 하는데, 핵심 단어이기 때문이다.
논리라는 말과 1비트라는 말을 힌트로 해서 이 문제를 2진법 문제로 풀 수 있다.
문제에서 adder(0, 0)은 (0, 0), adder(1, 1)은 (1, 0), adder(1, 0) 이나 adder(0, 1)은 (0, 1) 이라고 했다.
2진법 문제로 따지면 adder(1, 1) 에서 1 + 1 = 10 이 되므로 이진법 10은 2이다. 즉, 2를 나누어서 이진법 10을 구하므로 코딩을 다음과 같이 해볼 수가 있다.
def adder(a, b) : if a<0 or b<0 or a>1 or b>1 : print 'Argument is more than 0 and less than 1' else : return divmod(a+b, 2)즉, 인수 두개를 받아서 두 개의 합을 구한 다음 2로 나눈 몫과 나머지로 분류를 하는 것이다.
댓글 없음:
댓글 쓰기