열혈강의 파이썬 10장 연습문제 풀이
Programming/Python 2013. 4. 30. 23:56 |한번 풀어 본 연습문제
"""
# Q1) range 함수와 유사한 frange 함수를 만들어라. frange는 실수 리스트를 리턴한다.
# frange의 기본 시작 값은 0.0이고, 기본 단계 값은 0.25 이다.
# frange(5.0), frange(1.0, 5.0), frange(1.0, 3.0, 0.1) 등이 동작하도록 하라.
def frange(val, basic=0.0, step=0.25):
l=[]
if val < basic:
start=val
stop=basic
else:
start=basic
stop=val
while start < stop:
l.append(start)
start+=step
return l
if __name__=='__main__':
print frange(2)
print frange(1.0, 2.0)
print frange(1.0, 3.0, 0.5)
"""
"""
# Q2) 조합 논리 회로 1비틑 덧셈기 adder를 시뮬레이션 하고자 한다. adder는 두 개의
# 0 또는 1의 값을 가지는 인수를 받고 두 개의 값을 리턴한다. 리턴 값은 덧셈 결과를
# 두 자리로 한 결과이다. adder(0,0) 의 결과는 (0,0)이고 adder(1,1)은 (1,0)이다.
# adder(0,1)이나 adder(1,0)은 (0,1)의 결과를 낳는다. 이 adder 함수를 작성하라.
def adder(n1, n2):
if (not n1) and (not n2):
return (0,0)
elif n1 and n2:
return (1,0)
else:
return (0,1)
if __name__=='__main__':
print adder(0,0)
print adder(1,1)
print adder(1,0)
print adder(0,1)
"""
"""
# Q3) 함수 sum을 정의하라. 이 함수는 임의의 개수의 인수를 받아서 그 합을 계산한다.
# 예를 들면 sum()은 0을, sum(1,2)은 3을 sum(1,5,7,2,3)은 18을 리턴한다. (가변 인수)
def sum(*args):
return reduce(lambda x, y: x+y, args, 0)
if __name__=='__main__':
print sum(*range(0,101))
"""
"""
# Q4)이미지 파일을 작게 표시하기 위한 썸네일이라는 작은 이미지 파일들이 있다.
# 이 파일들은 원래의 이미지 파일에 _thumb란 이름이 추가로 붙는다.
# 예를 들면 a.jpg의 썸네일 파일은 a_thumb.jpg 이다.
# 이미지 파일 이름들이 리스트에 담겨 있을 때,
# filter를 이용하여 여기서 일반 이미지 파일만 혹은 썸네일 파일만 골라 내어라.
imgList = ['a_thumb.jpg', 'toto', 'ajaj.jpg', 'haha.jjj']
def ImgFileFilter(img):
return filter(lambda x: (x.find('.jpg') > 0) or (x.find('_thumb') > 0), img)
if __name__=="__main__":
print ImgFileFilter(imgList)
"""
"""
# Q5) 주어진 문자열(예: 'as soon as possible')에서 각 단어의 첫 글자를 취해서
# 하나의 단어를 만들어라. (split, map, join 이용)
def MakeChar(string):
tmpList = map(lambda x: x[0], string.split())
return ''.join(tmpList)
if __name__=='__main__':
print MakeChar('as soon as possible')
"""
"""
# Q6) data.txt 파일에 다음과 같은 내용이 저장되어 있다. 이들을 읽어 리스트 x에
# [1,4,7], 리스트 y에 [2,5,8], 리스트 z에 [3,6,9]가 저장되도록 map 함수를 이용하여
# 작성하라. (리스트 안의 숫자는 모두 정수형이어야 한다.)
def NumList(f):
strList = f.readlines() # readlines는 리스트로 리턴
x = map(lambda i: int(i[0]), strList)
y = map(lambda i: int(i[2]), strList)
z = map(lambda i: int(i[4]), strList)
return x,y,z
if __name__=='__main__':
import os
os.chdir(os.getenv('HOME') + '/Desktop')
f = open('data.txt', 'r')
x, y, z = NumList(f)
print 'x =',x
print 'y =',y
print 'z =',z
"""
"""
# Q7) N! (팩토리얼) 을 계산하는 함수 fact를 재귀적 함수로 만들어라.
def fact(num):
if num==1:
return 1
return num * fact(num-1)
if __name__=='__main__':
print fact(5)
"""
"""
# Q8) 리스트의 구조를 변경하지 말고 리스트의 값을 바꾸는 함수를 작성하고 시험하라.
# 예를 들어, [3,2[3,[3],[4]]] 에서 3을 5로 바꾼다면 [5,2,[5,[5],[4]]] 결과가
# 나와야 한다. (재귀적 프로그래밍)
def ChangeValue(listVal):
for i in range(len(listVal)):
if listVal[i] == 3:
listVal[i] = 5
if type(listVal[i]) == type([]):
ChangeValue(listVal[i])
if __name__=="__main__":
tmpList = [3,2,[3,[3],[4]]]
ChangeValue(tmpList)
print tmpList
"""
'Programming > Python' 카테고리의 다른 글
모듈의 실행 ( __name__ == '__main__' ) (0) | 2013.05.01 |
---|---|
Module (0) | 2013.05.01 |
함수 객체의 속성 (0) | 2013.04.28 |
함수적 프로그래밍 - reduce 내장 함수 (0) | 2013.04.28 |
함수적 프로그래밍 - filter 내장 함수 (0) | 2013.04.28 |