2.1 연습문제의 첫 줄에는 100과 200의 합을 출력하기 위한 방법을 보여주고 있다. print() 함수와 + 연산을 이용하여 200, 300, 400의 합을 결과와 같이 화면에 출력해보자. 이때 print() 함수 내부에 들어갈 알맞은 값을 적으시오.
print( 100,'+', 200, '=', 100 + 200)
100 + 200 = 300
# 2.1 solution
print(200, '+', 300, '+', 400, '=', 200 + 300 + 400)
200 + 300 + 400 = 900
2.2 width(너비) 변수에는 30, height(높이) 변수에는 60 값이 출력되도록 하시오.
print(width)
print(height)
# 2.2 solution
width = 30
height = 60
print(f"width : {width}\nheight: {height}")
width : 30 height: 60
2.3 위의 코드에서 width와 height 변수를 두개의 줄에 걸쳐 선언하지 말고 한 줄에 할당하는 동시 할당문을 사용하여 width(너비) 변수에는 30, height(높이) 변수에는 60 값이 출력되도록 하시오.
# 2.3 solution
width, height = 30, 60
print(f"width : {width}\nheight: {height}")
width : 30 height: 60
2.4 width와 height라는 변수에 각각 40, 20 값을 할당한 후 이 두변수를 이용하여 곱셈 연산자를 적용한 후 다음과 같이 삼각형의 면적(area)을 구하는 프로그램을 작성하시오.
삼각형의 면적 : 400.0
# 2.4 solution
width, height = 40, 20
area = width*height/2
print(f"area : {area}")
area : 400.0
2.5 정사각형의 면적을 구하기 위하여 사용자로부터 밑변의 길이를 정수로 입력받아서 다음과 같이 출력하시오(힌트 : 정수값 입력을 받기 위하여 int(input("정사각형의 밑변을 입력하시오 : ")) 를 사용함).
정사각형의 밑변을 입력하시오 : 40
정사각형의 면적 : 1600
# 2.5 solution
base = int(input("정사각형의 밑변을 입력하시오 : "))
print(f"정사각형의 면적 : {base**2}")
정사각형의 밑변을 입력하시오 : 30 정사각형의 면적 : 900
2.6 섭씨(celsius)를 화씨온도(fahrenheit)로 변환하는 식은 다음과 같다.
fahrenheit = (9/5) * celsius + 32
이 식을 바탕으로 섭씨온도를 0도에서 50도까지 10도 단위로 증가시키면서 이에 해당하는 화씨온도를 다음과 같이 출력하는 코드를 작성하시오.
섭씨 화씨
0 32.0
10 50.0
20 68.0
30 86.0
40 104.0
50 122.0
# 2.6 solution
# 학생들은 for문을 안쓰고 작성해도 상관없음.
print("섭씨 화씨")
cel = 0
for i in range(6):
fah = 9/5*cel + 32
cel += 10
print(cel," ",fah)
섭씨 화씨 10 32.0 20 50.0 30 68.0 40 86.0 50 104.0 60 122.0
2.7 앞서 다룬 섭씨온도를 화씨온도로 변환하는 식을 바탕으로 사용자로부터 섭씨온도를 입력받아서 다음과 같이 화씨온도로 출력하시오.
섭씨온도를 입력하세요 : 30
섭씨 30 도는 화씨 86.0 도 입니다.
# 2.7 solution
cel = int(input("섭씨온도를 입력하세요 : "))
fah = fah = 9/5*cel + 32
print(f"섭씨 {cel}도는 화씨 {fah}도 입니다.")
섭씨온도를 입력하세요 : 30 섭씨 30도는 화씨 86.0도 입니다.
2.8 입력을 10으로 받아서 다음과 같이 10!의 값을 출력하는 코드를 작성하시오.
input : 10
10! = 3628800
# 2.8 solution
# 학생들은 직접 10! 값을 모두 작성해도 상관없음.
import math
num = int(input("input : "))
print(f"10! = {math.factorial(num)}")
input : 10 10! = 3628800
2.9 사용자로부터 반지름 값을 입력받아서, 이 반지름을 가진 원의 둘레와 면적을 다음과 같이 출력하라. 이 값을 구하기 위하여 $\pi$ = 3.141592 라는 변수를 사용하시오.
원의 반지름을 입력하세요 : 11
원의 둘레 = 69.115024, 원의 면적 = 380.13263200000006
# 2.9 solution
# 학생들은 pi 값을 직접 작성해도 상관없음
import math
radias = int(input("원의 반지름을 입력하세요 : "))
print(f"원의 둘레 = {2*math.pi*radias}, 원의 면적 = {math.pi*radias**2}")
원의 반지름을 입력하세요 : 30 원의 둘레 = 188.49555921538757, 원의 면적 = 2827.4333882308138
2.10
f-문자열
파이썬 3.6부터는 %를 사용하는 오래된 C스타일 형식화 문자열보다 더 표현력이 좋은 인터폴레이션(interpolation)을 통한 형식 문자열(짧게 f-문자열 이라고 부름)이 도입됐다. 이 새로운 언어 문법에서는 형식 문자열 앞에 f 문자를 붙여야한다. f-문자열은 형식화 식 안에서 현재 파이썬 영역에서 사용할 수 있는 모든 이름을 자유롭게 참조할 수 있도록 허용함으로써 이런 간결함을 제공한다. 다음 코드는 f-문자열의 간단한 예를 보여준다
참고 : 똑똑하게 코딩하는법 파이썬 코딩의기술, 길벗
apple = 4
banana = 3
cherry = 2
print(f"#1 apple의 개수: {apple}")
print(f"#2 banana의 개수: {banana}")
print(f"#3 cherry의 개수: {cherry}")
print(f"#4 과일의 총 개수: {apple+banana+cherry}")
#1 apple의 개수: 4 #2 banana의 개수: 3 #3 cherry의 개수: 2 #4 과일의 총 개수: 9
위의 예제를 참고하여 과제1의 1.8에서의 모든 변수를 선언 후, 고도를 입력받아서 공기밀도를 출력하는 코드를 작성하라.
Input1 : -
input2 : -
input3 : -
1km : 답1
2km : 답2
3km : 답3
# 2.10 solution
# 학생들은 함수를 사용하지 않아도 상관없음.
def cal_rho(alt):
p_0 = 101325
T_0 = 288.15
g = 9.80665
L = 0.0065
R = 8.31446
M = 0.0289652
return p_0*M/(R*T_0)*(1-L*alt/T_0)**(g*M/(R*L)-1)
alt1 = int(input("Input1 : "))
alt2 = int(input("Input2 : "))
alt3 = int(input("input3 : "))
rho1 = cal_rho(alt1)
rho2 = cal_rho(alt2)
rho3 = cal_rho(alt3)
print(f"1km : {rho1} \n2km : {rho2}\n3km : {rho3}")
Input1 : 1 Input2 : 2 input3 : 3 1km : 1.2248947614192756 2km : 1.2247771682439537 3km : 1.2246595837054925
2.11
인공 신경망은 수많은 머신 러닝 방법 중 하나이다. 그중 퍼셉트론(Perceptron)은 학습이 가능한 초창기 신경망 모델로 현대적 의미로 보면 아주 원시적인 신경망일 뿐이다. 하지만, 노드, 가중치, 층과 같은 새로운 개념이 도입되었으며, 주어진 데이터가 선형 분리할 수 있다면 미분을 활용한 학습 알고리즘은 반드시 100% 정확률로 수렴한다는 정리가 증명되었다. 퍼셉트론의 구조는 아래의 그림과 같이 아주 단순하며, 퍼셉트론이 동작하는 방식은 다음과 같다. 각 노드의 가중치와 입력치를 곱한 것을 모두 합한 값이 활성함수에 의해 판단되는데, 그 값이 임계치보다 크면 뉴런이 활성화되고 결괏값으로 1을 출력한다. 뉴련이 활성화되지 않으면 결과값으로 -1을 출력한다. 다음 예제는 OR 논리 게이트를 분류 문제로 간주하여 만든 데이터로 퍼셉트론의 동작을 이해한다.
2차원 특징 벡터로 표현되는 샘플을 4개 가진 훈련집합 $\mathbb{X} = \left\{\mathbf{x_1}, \mathbf{x_2}. \mathbf{x_3}. \mathbf{x_4} \right\}, \mathbb{Y} = \left\{\mathbf{y_1}, \mathbf{y_2}. \mathbf{y_3}. \mathbf{y_4} \right\}$ 를 생각하자. 다음 그림은 이 데이터를 보여준다.
$\mathbf{x_1} = {x_{11} \choose x_{12}} = {0 \choose 0}, \mathbf{y_1} = -1,\quad\mathbf{x_2} = {x_{21} \choose x_{22}} = {1 \choose 0}, \mathbf{y_2} = 1$
$\mathbf{x_3} = {x_{31} \choose x_{32}} = {0 \choose 1}, \mathbf{y_3} = 1,\quad\mathbf{x_4} = {x_{41} \choose x_{42}} = {1 \choose 1}, \mathbf{y_4} = 1$
다음 식은 위 그림을 식으로 표현 한 것이다.
\begin{equation} \tag{1} s = -0.5 + x_{n1} * 1.0 + x_{n2}*1.0,\quad \tau(s) = -1,1 \end{equation}2.11-(1) 위 샘플 4개 $x_1, x_2, x_3, x_4$ 를 하나씩 입력으로 받아서 제대로 분류하는지 확인해본다
2.11-(2) $\mathbb{X}$ 를 100% 정확하게 분류하는 만족하는 식 (1)의 상수를 찾아서 변경한 후, 제대로 분류하는지 확인해본다.
참고 : 기계학습- 오일석 (한빛아카데미)
# 2.10 solution
# 활성함수는 생략함.
# 학생들은 함수를 사용하지않아도 상관없음.
def or_gate(x1, x2):
s = -0.5 + x1*1 + x2*1
return s
def or_gate2(x1, x2):
s = -0.2 + x1*0.5 + x2*1
return s
x_11 ,x_12 = 0, 0
x_21, x_22 = 1, 0
x_31, x_32 = 0, 1
x_41, x_42 = 1, 1
s1 = or_gate(x_11,x_12)
s2 = or_gate(x_21, x_22)
s3 = or_gate(x_31, x_32)
s4 = or_gate(x_41, x_42)
print("2.11-(1) : ", s1, s2, s3, s4)
s1_2 = or_gate2(x_11,x_12)
s2_2 = or_gate2(x_21, x_22)
s3_2 = or_gate2(x_31, x_32)
s4_2 = or_gate2(x_41, x_42)
print("2.11-(2) : ", s1_2, s2_2, s3_2, s4_2)
2.11-(1) : -0.5 0.5 0.5 1.5 2.11-(2) : -0.2 0.3 0.8 1.3