<jupyter_start><jupyter_text>****** 6. 제어문과 함수 기초****** *** 1 파이썬 제어문***  1-1 들여쓰기와 제어문 - 파이썬은 들여쓰기를 강제하여 코드의 가독성을 높인다.- 블록 내부에 있는 statement들은 동일한 열에 위치해야 한다.- 블록의 끝은 들여쓰기가 끝나는 부분으로 간주된다.  - python에는 {, }, begin, end 등의 키워드가 존재하지 않는다.- 들여쓰기를 할 때에는 탭과 공백을 섞어 쓰지 않는다.<jupyter_code>a = 1 # 성공
 a = 1 # 실패
    a = 1
      b = 1
a = 2
if a > 1:
    print('big')
     print('really?')<jupyter_output><empty_output><jupyter_text>1-2 if문- if문의 형식> if 조건식1:> &nbsp;&nbsp;statements> elif 조건식2:> &nbsp;&nbsp;statements> elif 조건식3:> &nbsp;&nbsp;statements> else:> &nbsp;&nbsp;statements- 조건식이나 else 다음에 콜론(:) 표기 필요- 들여쓰기(indentation)를 잘 지켜야 함<jupyter_code>score = 90
if score >= 90:
    print('Congratulations!!! ')
a = 10
if a > 5:
    print('Big')
else:
    print('Small')<jupyter_output>Big<jupyter_text>- statement가 1개인 경우 조건식과 한 줄에 위치 가능 (추천하지는 않음)<jupyter_code>a = 10
if a > 5: print('Big')
else: print('Small')
n = -2
if n > 0:
    print('Positive')
elif n < 0:
    print('Negative')
else:
    print('Zero')
order = 'spagetti'

if order == 'spam':
    price = 500
elif order == 'ham':
    price = 700
elif order == 'egg':
    price = 300
elif order == 'spagetti':
    price = 900
    
print(price)<jupyter_output>900<jupyter_text>- 위 코드와 동일한 dictionary 자료구조를 사용한 코드<jupyter_code>order = 'spagetti'
menu = {'spam':500, 'ham':700, 'egg':300, 'spagetti':900}
price = menu[order]
print(price)<jupyter_output>900<jupyter_text>1-3 for문> for  in :> &nbsp;&nbsp;statements> else:> &nbsp;&nbsp;statements<jupyter_code>a = {'cat':1, 'cow':2, 'tiger':3}
for x in a:
    print(len(x), x)
for key, value in a.items():
    print(key, value)
for x in [1,2,3]:
    print(x, end=" ")
print(range(10))

print(list(range(10)))

for x in range(10):
      print(x, end=" ")
sum = 0
for x in range(1, 11):
    sum = sum + x
    
print(sum)
prod = 1
for x in range(1, 11):
    prod = prod * x
    
print(prod)<jupyter_output>3628800<jupyter_text>- enumerate() 내장 함수: 컨테이너 객체가 지닌 각 요소값뿐만 아니라 인덱스 값도 함께 반환한다.<jupyter_code>l = ['cat', 'dog', 'bird', 'pig']
for k, animal in enumerate(l):
    print(k, animal)
t = ('cat', 'dog', 'bird', 'pig')
for k, animal in enumerate(t):
    print(k, animal)
d = {'c':'cat', 'd':'dog', 'b':'bird', 'p':'pig'}
for k, key in enumerate(d):
    print(k, key, d[key])<jupyter_output>0 c cat
1 d dog
2 b bird
3 p pig<jupyter_text>- break: 루프를 빠져나간다.<jupyter_code>for x in range(10):
    if x > 3: 
        break
    print(x)
    
print('done')<jupyter_output>0
1
2
3
done<jupyter_text>- continue: 루프 블록 내의 continue 이후 부분은 수행하지 않고 루프의 시작부분으로 이동한다.<jupyter_code>for x in range(10):
    if x < 8:
        continue
    print(x)
    
print('done')<jupyter_output>8
9
done<jupyter_text>- else: 루프가 break에 의한 중단 없이 정상적으로 모두 수행되면 else 블록이 수행된다.<jupyter_code>for x in range(10):
    print(x, end=" ")         
else:
    print('else block')

print('done')<jupyter_output>0 1 2 3 4 5 6 7 8 9 else block
done<jupyter_text>- break에 의하여 루프를 빠져나가면 else 블록도 수행되지 않는다.<jupyter_code>for x in range(10):
    break
    print(x, end=" ")
else:
    print('else block')
    
print('done')<jupyter_output>done<jupyter_text>- for 루프의 중첩<jupyter_code>for x in range(2, 4):
    for y in range(2, 10):
        print(x, '*', y, '=', x*y)
    print()
for x in range(2, 4):
    for y in range(2, 10):
        print("{0} * {1} = {2}".format(x, y, x * y))
    print()
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt

im = Image.open('./dog.jpeg')
im = np.asarray(im)
plt.imshow(im)
def rgb2gray(rgb):
    return np.dot(rgb[...,:3], [0.2989, 0.5870, 0.1140])

im = rgb2gray(im)
print(im.shape)

for i in range(len(im[0])):
    for j in range(len(im[1])):
        if im[i][j] >= 100:
            im[i][j] = 255
        else:
            im[i][j] = 0

plt.imshow(im, cmap=plt.get_cmap('gray'), vmin=0, vmax=255)
a = [[[[1], [2], [3]], [2], [3]], [[1], [2], [3]], [[1], [2], [3]]]
a = np.asarray(a)
print(a[...,:0])<jupyter_output>[]<jupyter_text>1-4 while문 - while 조건식이 만족하는 동안 while 블록내의 statements 들을 반복 수행한다.<jupyter_code>count = 1
while count < 11:
    print(count)
    count = count + 1
sum = 0
a = 0
while a < 10:
    a = a + 1
    sum = sum + a
print(sum)
x = 0
while x < 10:
    print(x, end=" ")
    x = x + 1
else:
    print('else block')

print('done')<jupyter_output>0 1 2 3 4 5 6 7 8 9 else block
done<jupyter_text>*** 2 파이썬 함수 기초***  2-1. 함수의 장점 및 함수 사용법- 함수의 장점  - 함수는 반복적인 코드를 없에 주어 코드의 길이를 짧게 만들어 준다.  - 코드의 유지보수를 쉽게 만들어 준다.<jupyter_code>def add(a, b):
    return a + b

print(add(3, 4))

print(add([1,2,3], [4,5,6]))
c = add(10, 30)
print(c)<jupyter_output>40<jupyter_text>- 함수 이름에 저장된 레퍼런스를 다른 변수에 할당하여 그 변수를 이용한 함수 호출 가능<jupyter_code>f = add
print(f(4, 5))

print(f)

print(f is add)<jupyter_output>9
<function add at 0x1037c01e0>
True<jupyter_text>- 함수의 몸체에는 최소한 한개 이상의 statement가 존재해야 함  - 그러므로, 아무런 내용이 없는 몸체를 지닌 함수를 만들 때에는 pass 라는 키워드를 몸체에 적어주어야 함<jupyter_code>def simple():
    pass

print(simple())<jupyter_output>None<jupyter_text>- 함수에서 다른 함수 호출 가능<jupyter_code>def add(a, b):
    return a + b

def myabs(x):
    if x < 0: 
        x = -x
    return x

def addabs(a, b):
    c = add(a, b)
    return myabs(c)

print(addabs(-5, -7))<jupyter_output>12<jupyter_text>- 인자의 이름과 함께 인자 값을 넘겨줄 수 있다.<jupyter_code>def minus(a, b):
    return a - b
print(minus(a=12, b=20))
print(minus(b=20, a=12))<jupyter_output>-8
-8<jupyter_text>- 인자의 디폴트 값을 지정할 수 있다.<jupyter_code>def incr(x, y=1):
    return x + y

print(incr(5))

print(incr(5, 10))<jupyter_output>6
15<jupyter_text>- 두 개 이상의 값을 동시에 반환할 수 있다.<jupyter_code>def calc(x, y):
    return x + y, x - y, x * y, x / y

print(calc(10, 2))<jupyter_output>(12, 8, 20, 5.0)<jupyter_text>2-2 함수 호출시 동적인 자료형 결정 - 파이썬에서는 모든 객체는 동적으로 (실행시간에) 그 타입이 결정된다.  - 함수 인자는 함수가 호출되는 순간 해당 인자에 전달되는 객체에 따라 그 타입이 결정된다.  - 함수 몸체 내에서 사용되는 여러 가지 연산자들은 함수 호출시에 결정된 객체 타입에 맞게 실행된다.<jupyter_code>def add(a, b):
    return a + b

c = add(1, 3.4)
d = add('dynamic', 'typing')
e = add(['list'], ['and', 'list'])
print(c)
print(d)
print(e)<jupyter_output>4.4
dynamictyping
['list', 'and', 'list']<jupyter_text>2-3 재귀적 함수 호출- 재귀(Recursive) 함수: 함수 몸체에서 자기 자신을 호출하는 함수  - 수학에서 점화식과 유사한 코드  - 반드시 종결 조건 및 종결 조건이 만족할 때의 반환 값이 있어야 한다.- 1부터 N까지 더하는 재귀 함수<jupyter_code>def sum(N):
    if N == 1:           # 종결 조건
        return 1         # 종결 조건이 만족할 때의 반환 값
    return N + sum(N-1)  # 재귀 호출

print(sum(10))<jupyter_output>55
{'fraction_non_alphanumeric': 0.16708701134930642, 'fraction_numerical': 0.04366330390920555, 'mean_word_length': 3.3758620689655174, 'pattern_counts': {'":': 0, '<': 72, '<?xml version=': 0, '>': 85, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '21', 'dir': 'jupyter-structured-clean-dedup', 'id': '27404', 'license': 'MIT', 'n_tokens_mistral': 3661, 'n_tokens_neox': 3991, 'n_words': 820, 'path': 'python3.6/python06.ipynb', 'repo_name': 'gjbr5/python-link-e-learning', 'size': '6344'}