#!/usr/bin/env python # coding: utf-8 # Open In Colab # # ASE1302 - Assignment \#02 # __
ASE1302: Computer programming, Inha University.
__ # _
Jong-Han Kim (jonghank@inha.ac.kr)
_ # _
Ho-Young Jeon (hy13776@inha.edu)
_ # # #
# # --- # **2.1 연습문제의 첫 줄에는 100과 200의 합을 출력하기 위한 방법을 보여주고 있다. print() 함수와 + 연산을 이용하여 200, 300, 400의 합을 결과와 같이 화면에 출력해보자. 이때 print() 함수 내부에 들어갈 알맞은 값을 적으시오.** # In[ ]: print( 100,'+', 200, '=', 100 + 200) # In[ ]: # 2.1 solution print(200, '+', 300, '+', 400, '=', 200 + 300 + 400) #
# # --- # **2.2 width(너비) 변수에는 30, height(높이) 변수에는 60 값이 출력되도록 하시오.** # ~~~ # print(width) # print(height) # ~~~ # In[ ]: # 2.2 solution width = 30 height = 60 print(f"width : {width}\nheight: {height}") #
# # --- # **2.3 위의 코드에서 width와 height 변수를 두개의 줄에 걸쳐 선언하지 말고 한 줄에 할당하는 동시 할당문을 사용하여 width(너비) 변수에는 30, height(높이) 변수에는 60 값이 출력되도록 하시오.** # In[ ]: # 2.3 solution width, height = 30, 60 print(f"width : {width}\nheight: {height}") #
# # --- # **2.4 width와 height라는 변수에 각각 40, 20 값을 할당한 후 이 두변수를 이용하여 곱셈 연산자를 적용한 후 다음과 같이 삼각형의 면적(area)을 구하는 프로그램을 작성하시오.** # ~~~ # 삼각형의 면적 : 400.0 # ~~~ # In[ ]: # 2.4 solution width, height = 40, 20 area = width*height/2 print(f"area : {area}") #
# # --- # **2.5 정사각형의 면적을 구하기 위하여 사용자로부터 밑변의 길이를 정수로 입력받아서 다음과 같이 출력하시오(힌트 : 정수값 입력을 받기 위하여 int(input("정사각형의 밑변을 입력하시오 : ")) 를 사용함).** # ~~~ # 정사각형의 밑변을 입력하시오 : 40 # 정사각형의 면적 : 1600 # ~~~ # In[ ]: # 2.5 solution base = int(input("정사각형의 밑변을 입력하시오 : ")) print(f"정사각형의 면적 : {base**2}") #
# # --- # **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 # ~~~ # In[ ]: # 2.6 solution # 학생들은 for문을 안쓰고 작성해도 상관없음. print("섭씨 화씨") cel = 0 for i in range(6): fah = 9/5*cel + 32 cel += 10 print(cel," ",fah) #
# # --- # **2.7 앞서 다룬 섭씨온도를 화씨온도로 변환하는 식을 바탕으로 사용자로부터 섭씨온도를 입력받아서 다음과 같이 화씨온도로 출력하시오.** # >섭씨온도를 입력하세요 : **30** # 섭씨 **30** 도는 화씨 **86.0** 도 입니다. # # In[ ]: # 2.7 solution cel = int(input("섭씨온도를 입력하세요 : ")) fah = fah = 9/5*cel + 32 print(f"섭씨 {cel}도는 화씨 {fah}도 입니다.") #
# # --- # **2.8 입력을 10으로 받아서 다음과 같이 10!의 값을 출력하는 코드를 작성하시오.** # ~~~ # input : 10 # 10! = 3628800 # ~~~ # In[ ]: # 2.8 solution # 학생들은 직접 10! 값을 모두 작성해도 상관없음. import math num = int(input("input : ")) print(f"10! = {math.factorial(num)}") #
# # --- # **2.9 사용자로부터 반지름 값을 입력받아서, 이 반지름을 가진 원의 둘레와 면적을 다음과 같이 출력하라. 이 값을 구하기 위하여 $\pi$ = 3.141592 라는 변수를 사용하시오.** # # > 원의 반지름을 입력하세요 : **11** # 원의 둘레 = **69.115024**, 원의 면적 = **380.13263200000006** # In[ ]: # 2.9 solution # 학생들은 pi 값을 직접 작성해도 상관없음 import math radias = int(input("원의 반지름을 입력하세요 : ")) print(f"원의 둘레 = {2*math.pi*radias}, 원의 면적 = {math.pi*radias**2}") #
# # --- # # **2.10** # > **f-문자열** # 파이썬 3.6부터는 %를 사용하는 오래된 C스타일 형식화 문자열보다 더 표현력이 좋은 인터폴레이션(interpolation)을 통한 형식 문자열(짧게 f-문자열 이라고 부름)이 도입됐다. 이 새로운 언어 문법에서는 형식 문자열 앞에 f 문자를 붙여야한다. f-문자열은 형식화 식 안에서 현재 파이썬 영역에서 사용할 수 있는 모든 이름을 자유롭게 참조할 수 있도록 허용함으로써 이런 간결함을 제공한다. # 다음 코드는 f-문자열의 간단한 예를 보여준다 # # # # # # 참고 : 똑똑하게 코딩하는법 파이썬 코딩의기술, 길벗 # # # In[ ]: 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의 1.8에서의 모든 변수를 선언 후, 고도를 입력받아서 공기밀도를 출력하는 코드를 작성하라. # # ~~~ # Input1 : - # input2 : - # input3 : - # # 1km : 답1 # 2km : 답2 # 3km : 답3 # ~~~ # # In[ ]: # 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}") #
# # --- # **2.11** # >인공 신경망은 수많은 머신 러닝 방법 중 하나이다. 그중 퍼셉트론(Perceptron)은 학습이 가능한 초창기 신경망 모델로 현대적 의미로 보면 아주 원시적인 신경망일 뿐이다. 하지만, 노드, 가중치, 층과 같은 새로운 개념이 도입되었으며, 주어진 데이터가 선형 분리할 수 있다면 미분을 활용한 학습 알고리즘은 반드시 100% 정확률로 수렴한다는 정리가 증명되었다. 퍼셉트론의 구조는 아래의 그림과 같이 아주 단순하며, 퍼셉트론이 동작하는 방식은 다음과 같다. 각 노드의 가중치와 입력치를 곱한 것을 모두 합한 값이 활성함수에 의해 판단되는데, 그 값이 임계치보다 크면 뉴런이 활성화되고 결괏값으로 1을 출력한다. 뉴련이 활성화되지 않으면 결과값으로 -1을 출력한다. 다음 예제는 OR 논리 게이트를 분류 문제로 간주하여 만든 데이터로 퍼셉트론의 동작을 이해한다. # # #

# Sublime's custom image #

# # # **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$ # #

# Sublime's custom image #

# # # **다음 식은 위 그림을 식으로 표현 한 것이다.** # # \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)의 상수를 찾아서 변경한 후, 제대로 분류하는지 확인해본다.** # # # # 참고 : 기계학습- 오일석 (한빛아카데미) # # In[ ]: # 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) # In[ ]: