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

프리렉 - FREELEC

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

이강성저

1.

2.

리스트의 슬라이싱은 새로운 리스트 객체를 만들고 원래 리스트의 참조를 복사해오는 것으로 앝은 복사와 동일하다.

In [1]:
L = [1,2,3,4,5]
L1 = L[:]

3.

깊은 복사에 복사되는 객체는 리스트, 튜플, 사전과 같은 복합 객체이다. 문자열, 수치연산등과 같은 객체들은 복사되지 않는다.

In [2]:
import copy

x = ([500,1000], 2000)
y = copy.deepcopy(x)

print (id(x) != id(y))
print (id(x[0]) != id(y[0]))
print (id(x[1]) == id(y[1]))
True
True
True

4.

1단계 복합 객체로 이루어진 경우의 깊은 복사와 앝은 복사는 동일한 방식으로 복사된다.

In [3]:
x = [500, 1000]
y1 = copy.deepcopy(x)
y2 = copy.copy(x)

5.

In [4]:
s = '4124.8963'
In [5]:
dm = float(s) # 수치로 변환
dm
Out[5]:
4124.8963
In [6]:
deg = int(dm / 100)  # 각만 분리
deg
Out[6]:
41
In [7]:
minute = dm - deg*100  # 분 분리
minute
Out[7]:
24.896300000000338

6.

In [8]:
min = int(minute)
min
Out[8]:
24
In [9]:
sec = (minute % 1) * 60
sec
Out[9]:
53.778000000020256
In [10]:
round(sec)
Out[10]:
54

7.

In [11]:
import math, cmath
rad = [math.radians(d) for d in range(0, 361, 10)]

for d in range(0, 361, 10):
    r = math.radians(d)
    ejx = cmath.e ** complex(0, r)
    print ('deg={:3d}   x={:.4f} rad   e(jx)={:16.4f}'.format(d, r, ejx))
deg=  0   x=0.0000 rad   e(jx)=  1.0000+0.0000j
deg= 10   x=0.1745 rad   e(jx)=  0.9848+0.1736j
deg= 20   x=0.3491 rad   e(jx)=  0.9397+0.3420j
deg= 30   x=0.5236 rad   e(jx)=  0.8660+0.5000j
deg= 40   x=0.6981 rad   e(jx)=  0.7660+0.6428j
deg= 50   x=0.8727 rad   e(jx)=  0.6428+0.7660j
deg= 60   x=1.0472 rad   e(jx)=  0.5000+0.8660j
deg= 70   x=1.2217 rad   e(jx)=  0.3420+0.9397j
deg= 80   x=1.3963 rad   e(jx)=  0.1736+0.9848j
deg= 90   x=1.5708 rad   e(jx)=  0.0000+1.0000j
deg=100   x=1.7453 rad   e(jx)= -0.1736+0.9848j
deg=110   x=1.9199 rad   e(jx)= -0.3420+0.9397j
deg=120   x=2.0944 rad   e(jx)= -0.5000+0.8660j
deg=130   x=2.2689 rad   e(jx)= -0.6428+0.7660j
deg=140   x=2.4435 rad   e(jx)= -0.7660+0.6428j
deg=150   x=2.6180 rad   e(jx)= -0.8660+0.5000j
deg=160   x=2.7925 rad   e(jx)= -0.9397+0.3420j
deg=170   x=2.9671 rad   e(jx)= -0.9848+0.1736j
deg=180   x=3.1416 rad   e(jx)= -1.0000+0.0000j
deg=190   x=3.3161 rad   e(jx)= -0.9848-0.1736j
deg=200   x=3.4907 rad   e(jx)= -0.9397-0.3420j
deg=210   x=3.6652 rad   e(jx)= -0.8660-0.5000j
deg=220   x=3.8397 rad   e(jx)= -0.7660-0.6428j
deg=230   x=4.0143 rad   e(jx)= -0.6428-0.7660j
deg=240   x=4.1888 rad   e(jx)= -0.5000-0.8660j
deg=250   x=4.3633 rad   e(jx)= -0.3420-0.9397j
deg=260   x=4.5379 rad   e(jx)= -0.1736-0.9848j
deg=270   x=4.7124 rad   e(jx)= -0.0000-1.0000j
deg=280   x=4.8869 rad   e(jx)=  0.1736-0.9848j
deg=290   x=5.0615 rad   e(jx)=  0.3420-0.9397j
deg=300   x=5.2360 rad   e(jx)=  0.5000-0.8660j
deg=310   x=5.4105 rad   e(jx)=  0.6428-0.7660j
deg=320   x=5.5851 rad   e(jx)=  0.7660-0.6428j
deg=330   x=5.7596 rad   e(jx)=  0.8660-0.5000j
deg=340   x=5.9341 rad   e(jx)=  0.9397-0.3420j
deg=350   x=6.1087 rad   e(jx)=  0.9848-0.1736j
deg=360   x=6.2832 rad   e(jx)=  1.0000-0.0000j

In [12]:
# 참고 외부 모듈 numpy를 이용한 방법
import numpy as np

deg = np.arange(0, 361, 10)
rad = np.radians(deg)
ejx = np.power(np.e, 1j*rad)

for e in ejx:
    print ('e(jx)={:16.4f}'.format(e))
e(jx)=  1.0000+0.0000j
e(jx)=  0.9848+0.1736j
e(jx)=  0.9397+0.3420j
e(jx)=  0.8660+0.5000j
e(jx)=  0.7660+0.6428j
e(jx)=  0.6428+0.7660j
e(jx)=  0.5000+0.8660j
e(jx)=  0.3420+0.9397j
e(jx)=  0.1736+0.9848j
e(jx)=  0.0000+1.0000j
e(jx)= -0.1736+0.9848j
e(jx)= -0.3420+0.9397j
e(jx)= -0.5000+0.8660j
e(jx)= -0.6428+0.7660j
e(jx)= -0.7660+0.6428j
e(jx)= -0.8660+0.5000j
e(jx)= -0.9397+0.3420j
e(jx)= -0.9848+0.1736j
e(jx)= -1.0000+0.0000j
e(jx)= -0.9848-0.1736j
e(jx)= -0.9397-0.3420j
e(jx)= -0.8660-0.5000j
e(jx)= -0.7660-0.6428j
e(jx)= -0.6428-0.7660j
e(jx)= -0.5000-0.8660j
e(jx)= -0.3420-0.9397j
e(jx)= -0.1736-0.9848j
e(jx)= -0.0000-1.0000j
e(jx)=  0.1736-0.9848j
e(jx)=  0.3420-0.9397j
e(jx)=  0.5000-0.8660j
e(jx)=  0.6428-0.7660j
e(jx)=  0.7660-0.6428j
e(jx)=  0.8660-0.5000j
e(jx)=  0.9397-0.3420j
e(jx)=  0.9848-0.1736j
e(jx)=  1.0000-0.0000j

8.

In [13]:
s = '세종대왕의 한글'
for c in s:
    print ('{:3s} {:5d} {:6s}'.format(c, ord(c), hex(ord(c))))
세   49464 0xc138
종   51333 0xc885
대   45824 0xb300
왕   50773 0xc655
의   51032 0xc758
       32 0x20  
한   54620 0xd55c
글   44544 0xae00

9.

In [14]:
s = '세종대왕의 한글'
b = s.encode('utf-8')
b
Out[14]:
b'\xec\x84\xb8\xec\xa2\x85\xeb\x8c\x80\xec\x99\x95\xec\x9d\x98 \xed\x95\x9c\xea\xb8\x80'
In [15]:
import binascii

binascii.hexlify(b)
Out[15]:
b'ec84b8eca285eb8c80ec9995ec9d9820ed959ceab880'

10.

In [16]:
n = 123456789
In [17]:
format(n, ',')
Out[17]:
'123,456,789'
In [18]:
'{:,}'.format(n)
Out[18]:
'123,456,789'
In [18]: