파이썬3 바이블 - 제11장 연습문제

프리렉 - FREELEC

http://freelec.co.kr/book/catalogue_view.asp?UID=134

이강성저

1.

In [1]:
def frange(arg1, *args):
    if len(args) == 0:
        start, stop, step = 0.0, float(arg1), 1.0
    elif len(args) == 1:
        start, stop, step = float(arg1), float(args[0]), 1.0
    elif len(args) == 2:
        start, stop, step = float(arg1), float(args[0]), float(args[1])
    L = []
    v = start
    if step > 0:
        while v < stop:
            L.append(v)
            v += step
    elif step < 0:
        while v > stop:
            L.append(v)
            v += step
    return L
In [2]:
frange(10)
Out[2]:
[0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]
In [3]:
frange(1, 5)
Out[3]:
[1.0, 2.0, 3.0, 4.0]
In [4]:
frange(1, 3, 0.3)
Out[4]:
[1.0, 1.3, 1.6, 1.9000000000000001, 2.2, 2.5, 2.8]
In [5]:
frange(10, 0, -1)
Out[5]:
[10.0, 9.0, 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0]
In [6]:
frange(5, 0, -0.5)
Out[6]:
[5.0, 4.5, 4.0, 3.5, 3.0, 2.5, 2.0, 1.5, 1.0, 0.5]

2.

In [7]:
def adder(a, b):
    assert(a in (0,1))  # 0, 1 값만 허용
    assert(b in (0,1))
    c = a + b
    return (c & 0x02) >> 1, c & 0x01
In [8]:
adder(0,0)
Out[8]:
(0, 0)
In [9]:
adder(0,1)
Out[9]:
(0, 1)
In [10]:
adder(1,1)
Out[10]:
(1, 0)
In [11]:
adder(2,3)
---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
<ipython-input-11-4e536cd8036b> in <module>()
----> 1 adder(2,3)

<ipython-input-7-fe2f7fc8dd78> in adder(a, b)
      1 def adder(a, b):
----> 2     assert(a in (0,1))  # 0, 1 값만 허용
      3     assert(b in (0,1))
      4     c = a + b
      5     return (c & 0x02) >> 1, c & 0x01

AssertionError: 

3.

In [12]:
# 방법 1
def mysum(*args):
    return sum(args)

# 방법 2
def mysum(*args):
    s = 0.0
    for ele in args:
        s += ele
    return s
In [13]:
mysum()
Out[13]:
0.0
In [14]:
mysum(1,2,3)
Out[14]:
6.0

4.

In [15]:
fnames = ['a_thumb.jpg', 'b01_thumb.jpg', 'S100_thumb.jpg', 'S100.jpg', 'b01.jpg']
In [16]:
list(filter(lambda s: '_thumb' in s, fnames))
Out[16]:
['a_thumb.jpg', 'b01_thumb.jpg', 'S100_thumb.jpg']
In [17]:
list(filter(lambda s: '_thumb' not in s, fnames))
Out[17]:
['S100.jpg', 'b01.jpg']

5.

In [18]:
s = 'as soon as possible'
In [19]:
''.join(map(lambda s:s[0], s.split()))
Out[19]:
'asap'

6.

In [20]:
%%writefile data.txt
1 2 3
4 5 6
7 8 9
Overwriting data.txt

In [21]:
with open('data.txt') as f:
    L = list(map(lambda s: s.split(), f))
In [22]:
L  # 리스트 안의 값들이 문자열이다.
Out[22]:
[['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9']]
In [23]:
with open('data.txt') as f:
    L = list(map(lambda s: list(map(int, s.split())), f))
In [24]:
L  # 내부에서 한 번 더 map을 적용하여 정수로 바꾼 결과
Out[24]:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
In [25]:
x, y, z = L
In [26]:
x
Out[26]:
[1, 2, 3]

7.

In [27]:
def fact(n):
    if n < 2: return 1
    return n * fact(n-1)
In [28]:
fact(10)
Out[28]:
3628800

8.

In [29]:
def change_values(L, from_s, to_s):
    for k, ele in enumerate(L):
        if ele == from_s:
            L[k] = to_s
        elif type(ele) == list:
            change_values(ele, from_s, to_s)
    return L
In [30]:
L = [3, 2, [3, [[3], 4]]]

change_values(L, 3, 5)
Out[30]:
[5, 2, [5, [[5], 4]]]
In [30]: