Jupyter 경로 변경

주피터 노트북 혹은 주피터 랩의 기본 경로가 Users에 적용되어있고 간단한 설정으로 경로를 바꿀 수 없기에 메모를 남긴다.

주피터 설정을 변경하기 위해서는 구성을 변경할 수 있는 파일인 config 파일이 필요하다.
하지만 이 congif 파일은 기본적으로 설치되어있지 않기에 아래와 같이 cmd 창에서 jupyter 명령어로 세팅 방식이 적힌 config 파일을 생성해주는걸 권장한다.

1
> jupyter notebook --generate-config

config 생성

그러면 user 경로 .jupyter 디렉토리에 jupyter_notebook_config.py 파일이 생성된다.

jupyter_notebook_config.py

버전마다 다르지만 에디터를 이용해 385번줄에 있는

1
# c.NotebookApp.notebook_dir = ''

c.NotebookApp.notebook_dir

의 주석 처리를 제거하고 원하는 경로를 입력한다.

이 때, 경로는 리눅스 방식으로 변경해야되니 역슬래쉬(\)로 경로가 복사되었다면 슬래쉬(/)로 변경하거나 컴퓨터에게 특수문자임을 인식시키기 위해 역슬래쉬를 2번(\\) 입력한다.

1
c.NotebookApp.notebook_dir = 'E:/Fear/Univ/Big_data/Training/Github/Codding-base/Python/Python-jupyter'

혹은
1
c.NotebookApp.notebook_dir = 'E:\\Fear\\Univ\\Big_data\\Training\\Github\\Codding-base\\Python\\Python-jupyter'

경로 입력

이걸로 주피터 path 경로는 변경되었으나 Jupyter Notebook의 바로가기 path도 설정해야 notebook을 열었을 때 config에서 설정한 path 경로를 참조할 수 있다.
Jupyter Notebook 경로

notebook 설정을 열어서 아래 두 경로를 지워 config 설정을 참조하도록 바꿔준다.

1
2
대상: ~ "%USERPROFILE%/"
시작위치: %HOMEPATH%

path 변경

지정한 경로에서 잘 열리지만 path 내부에서만 작업하므로 작업환경에서 가장 편한 path를 설정하는걸 권장한다.

외부링크

ipynb 사용하기; Jupyter & Google Colab

IPython Notebook은 python 코딩과 html을 지원하고 수식까지 표현 가능한 markdown 텍스트 박스를 동시에 사용해 가독성을 올리기 위해 제안된 방식이다.

Jupyter

기본적으로 로컬환경에서 사용가능한 Jupyter 시리즈가 있다.
아나콘다
주피터는 아나콘다를 설치하면 따라오는 소프트웨어로 아나콘다 설치 방법 포스트를 참조하자.

ipynb 단축키는 커멘트 팔렛트에서 확인 및 수정할 수 있다.

자주 사용되는 단축키는

  • ctrl+m & m
  • d & d
  • tab
    등 다양하게 있으니 기호에 맞춰 설정하자.

Google Colab

온라인 환경에선 다양한 플렛폼이 ipynb 환경을 지원하지만 접근성이 좋고 작업 리소스까지 지원해주며 저장공간 연동까지 가능한 Google Colab이 대표적이다.
Google 플렛폼이므로 당연히 google drive 연동을 지원하고, Github 업로드도 가능하다.

유저 작업환경 사양이 좋지않다면 Colab에서 지원하는 하드웨어 가속기를 사용해서 저사양 GPU(혹은 TPU)를 대여할 수 있다.

수정 - 노트 설정

추가로 ipynb는 ‘Kaggle Notebook’ 등 다양한 플랫폼에서 작업 가능하다.

의사결정트리(Decision Tree)에 대한 간단 설명

간단 설명

의사결정트리는 여러 객체가 모인 집단에서 절차적 “Yes”||”No” 혹은 간단한 문답문을 이용해 원하는 특성을 가진 객체를 분류해내는 과정이다.

주변에서 한가지 예시를 살펴본다면 법률로 경차를 정의해서 고속도로 / 보험 등 각종 형식으로 혜택을 주는 경우가 있다.
돈과 관련된 문제인 만큼 경차를 분류하는 기준은 필수가 된다.

한국에서의 경차를 보자면

  • 배기량 1,000cc 이하
  • 길이 3.6m 이하
  • 너비 1.6m 이하
  • 높이 2.0m 이하

인 자동차로 정의한다.

그러면 의사결정트리는 어떻게 만들어질까?

우선 나라마다 정의한 경차에 대한 포멧이 다르기 때문에 간단한 문답문을 이용해 어느 나라의 포멧을 불러올지 결정한다.

국가포멧

다음으로 배기량이나 차량의 크기같은 포멧이 만족하는지 하나씩 Y/N 문답을 절차적으로 진행한다. 효율성에 관해선 다음에 설명하고 이번 포스팅에선 배기량부터 순차적으로 진행한다.

배기량
높이

위와 같은 의사결정트리(Decision Tree) 과정을 통해 한국의 법률에서 경차로 정의되는 차량을 나눌 수 있다.
객체의 종류가 적다면 큰 문제는 없겠지만, 차량 객체 각각에 대한 데이터를 가지고 있고 법률적인 포멧이 있다면 수 많은 차량에 대한 포멧을 컴퓨터 작업을 통해 간단히 나눌 수 있을 것이다.

추가정보

Matplotlib의 pyplot과 pyplot.subplots

Matplotlibmatlab 수치해석 프로그램을 python 기반 작업공간에서 다양한 작업을 하기 위해 개발된 외부 라이브러리다.
이 라이브러리에서 그래프를 그리는 방식은 크게 2종류가 있는데, 간편하게 사용할 수 있는 pyplot가 첫번째다. 두번째 방식은 객체지향형 모듈에 좀 복잡한 객체 생성을 거쳐야하지만 다양한 설정 및 한 그래프 공간에 여러 축을 표현할 수 있는 pyplot.subplots가 있다.

Matplotlib 튜토리얼

pyplot API

pyplot 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import pandas as pd       ## pandas 라이브러리

f1 = "E:\\Fear\\Univ\\4-2\\대기정보전산학\\실습\\co2.csv"
f2 = "E:\\Fear\\Univ\\4-2\\대기정보전산학\\실습\\1880-2019.csv"

data1 = pd.read_csv(f1, engine='python')

styr = 1900
edyr = 2014+1 # [이상:미만] 이므로 2014 -> 2015

year = data1['year'] ### ['year'] -> year 열만 읽어낸다.
conc = data1['data_mean_global']

time = year[styr:edyr]
co2 = conc[styr:edyr]

print(co2)
## [n번째 줄] [co2값]

print(co2.head(3)) ## 위에서 n개
print(co2.tail(3)) ## 아래서 n개
1900    295.674998
1901    296.006998
1902    296.324997
1903    296.653997
1904    296.953996
           ...    
2010    388.717029
2011    390.944015
2012    393.015993
2013    395.724979
2014    397.546977
Name: data_mean_global, Length: 115, dtype: float64
1900    295.674998
1901    296.006998
1902    296.324997
Name: data_mean_global, dtype: float64
2012    393.015993
2013    395.724979
2014    397.546977
Name: data_mean_global, dtype: float64
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import numpy as np        ## numpy 라이브러리

data2 = np.genfromtxt(f2, encoding='utf8',dtype=None,delimiter=',',names=('year','value'), skip_header=5)
## 변수 / 인코딩 / 혼합 데이터 : dtype=None / 값 사이 구분 / 열 이름 지정 / 머릿말 생략 열 수

size=len(data2)

print(size)

for i in range(0,size):
t = data2['year'][i] ## year 열의 i번째 값을 t에 저장
if t == 1900:
styr = i
elif t == 2015:
edyr = i
i=i+1

print(styr)
print(edyr)

temp = data2['value'][styr:edyr]

print(temp)
140
20
135
[-0.07 -0.15 -0.25 -0.37 -0.46 -0.28 -0.21 -0.38 -0.43 -0.44 -0.4  -0.44
 -0.34 -0.32 -0.14 -0.09 -0.32 -0.39 -0.3  -0.25 -0.23 -0.16 -0.24 -0.25
 -0.24 -0.18 -0.07 -0.17 -0.18 -0.32 -0.11 -0.06 -0.13 -0.26 -0.11 -0.16
 -0.12 -0.01 -0.02  0.01  0.16  0.27  0.11  0.1   0.28  0.18 -0.01 -0.04
 -0.05 -0.07 -0.15  0.    0.04  0.13 -0.1  -0.13 -0.18  0.07  0.12  0.08
  0.05  0.09  0.1   0.12 -0.14 -0.07 -0.01  0.   -0.03  0.1   0.06 -0.07
  0.03  0.19 -0.06  0.01 -0.07  0.21  0.12  0.23  0.28  0.32  0.19  0.36
  0.17  0.16  0.24  0.38  0.39  0.29  0.45  0.39  0.24  0.28  0.34  0.47
  0.32  0.51  0.65  0.44  0.43  0.57  0.62  0.64  0.58  0.67  0.64  0.62
  0.54  0.65  0.73  0.58  0.64  0.67  0.74]

설정값이 적은 pyplot에선 아래와 같이 기본형태가 정해진 matplotlib를 로드해서 사용한다.

1
2
%matplotlib notebook  
## matplotlib 그림툴 로드
1
2
3
4
5
6
import matplotlib.pyplot as plt

plt.plot(time,co2,'b') ## 'matplotlib named color' 참고
plt.xlabel('Year')
plt.ylabel('CO₂concentration') ## 한글 유니코드, 특수문자 모두 사용가능
plt.show()
<IPython.core.display.Javascript object>

1
plt.close()
1
2
3
4
plt.plot(time,temp,'r')
plt.xlabel('Year')
plt.ylabel('Global Mean Surface Temperature')
plt.show()
<IPython.core.display.Javascript object>

1
plt.close()

pylot.subplots (객체지향 API)

pylot.subplots 예제1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
fig, ax1 = plt.subplots()   ## matplotlib.pyplot.subplots 참고
ax2 = ax1.twinx() ## 축을 하나 더 추가하기 위한 함수 twinx

ax1.set_ylabel('GMST anomaly (C)') ##
ax1.set_xlabel('Year') ## 라벨 지정
ax2.set_ylabel('CO₂(ppm)') ##

line1 = ax1.plot(time, temp, color='crimson', label='Global temperature anomaly',linewidth = 1.5)
line2 = ax2.plot(time, co2, color='limegreen', label='CO₂concentration',linewidth = 2.)

lines = line1 + line2 ## 두 장의 line 그림을 합친 변수
labels = [l.get_label() for l in lines]
ax1.legend(lines, labels, loc='upper left') ## loc 'location' ## matplotlin.axes.Axes.legend 참고


plt.show
<IPython.core.display.Javascript object>

<function matplotlib.pyplot.show(block=None)>
1
plt.close()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
fig, ax1 = plt.subplots() 
ax2 = ax1.twinx()

ax1.set_ylabel('GMST anomaly (C)')
ax1.set_xlabel('Year')
ax2.set_ylabel('CO₂(ppm)')
ax1.set_ylim([-0.46,0.72]) ## 범위 조정
ax2.set_ylim([280,390]) ##
ax1.set_xlim([1900,2014])

line1 = ax1.plot(time, temp, color='crimson', label='Global temperature anomaly',linewidth = 1.5)
line2 = ax2.plot(time, co2, color='limegreen', label='CO₂concentration',linewidth = 2.)

lines = line1 + line2
labels = [l.get_label() for l in lines]
ax1.legend(lines, labels, loc='upper left')


plt.show
<IPython.core.display.Javascript object>

<function matplotlib.pyplot.show(block=None)>
1
plt.close()

Hexo 테마변경(Feat. icarus)

Hexo 블로그 만들기

테마 선택

hexo themes에서 다양한 오픈소스 테마를 얻을 수 있다.

icarus 시작하기

icarus에서 지원하는 여러 테마중에 바닐라 Icarus로 설정할 예정이다.

테마를 설치하면서 Error 메세지를 보고 해당하는 hexo 랜더러 플러그인을 npm으로 설치해줘도 문제없지만,
에러 메세지에 알러지가 있다면

1
$ npm install --save bulma-stylus@0.8.0 hexo-renderer-inferno@^0.1.3

위 명령어로 우선 CSS 프레임워크 bulma-stylusinferno 랜더러 플러그인을 받아오자.

icarus 테마 페이지에서 install via NPM 탭 명령어로 icarus 테마 기본설정을 설치한다

1
$ npm install -S hexo-theme-icarus

이카루스 테마를 설치했으면 _config.ymlExtensions 영역의 theme 값을 변경해준다.

1
2
3
4
# Extensions
## Plugins: https://hexo.io/plugins/
## Themes: https://hexo.io/themes/
theme: icarus

hexo s로 local에서 적용을 확인하고 hexo g -d로 적용, 배포를 진행하면된다.

추가링크

파이썬 라이브러리 math와 numpy

파이썬 모듈 기초

내장 라이브러리 Math

파이썬에는 기본적으로 수학 관련 작업을 위해 자주 사용되는 Math 내장 라이브러리가 존재한다.

1
2
3
4
import math    # math 라이브러리를 불러오는 명령어.
''' 라이브러리 명령어는 [라이브러리명(혹은 as로 지정한 임의의 명칭)].[명령어]로 사용할 수 있으며.
명령어 자동완성(혹은 명령어 목록)은 tap 키로 사용 및 확인 가능하다.
'''

math 라이브러리는 수학 연산을 도와주는 라이브러리로 삼각함수부터 1~N까지 값을 곱해주는 factorial 함수 등 다양한 작업이 가능한 기본 함수들을 제공한다.

1
2
print(math.cos( (300 / 180) * math.pi ))
print(math.factorial(4))
0.5000000000000001
24

파이썬에서 기본적으로 제공하는 List 형식의 행은 사용할 수 있으나 Math 라이브러리가 추가해주는 method 및 상수는 기본적인 식과 pi 등의 상수 뿐으로 다차원 연산으로 인해 행렬이 필요한 vector나 선형대수 등의 작업 형식에 대해선 복잡해지는 불편함이 있다.

외부 라이브러리 Numpy

위 문제를 해결해주는 라이브러리가 C언어 기반으로 만들어진 Numpy 외부 라이브러리로 작업 공간에서 행렬 형식의 변수를 사용할 수 있게 도와준다.

numpy 명령어 튜토리얼

1
2
import numpy as np
print(np.__version__)
1.20.1

python 모듈

모듈

함수나 변수를 모아 놓은 파이썬 파일 (파일명(.py) = 모듈명
다른 파이썬 프로그램에서 불러와 사용할 수 있게끔 나든 파이썬 파일
여러 모듈을 묶어서 편리하게 관리하기 위해 패키지(디렉토리) 안에 넣어둘 수 있다.
패키지 내부 모듈 안의 특정 함수를 사용하기 위해서는 ‘패키지.모듈명.특정함수명’ 형태로 사용한다.
불러들이는 명령어 : import

아래의 matplotlib는 외부 모듈로 cmd 창을 통해 따로 다운받아야한다.

1
2
3
4
import matplotlib.pyplot as plt   # matplotlib (패키지)  pyplot (모듈)      # A as B  -> 변수 A를 B로 설정
#여기서 plt는 object 이다. / object(객체)는 .을 찍을 수 있다.

plt.plot([1,2,3,4])
[<matplotlib.lines.Line2D at 0x23bdd9b5880>]

그래프 예시

1
2
3
4
5
6
# import '모듈 이름' : 모듈 불러오는 명령어

import math # math 는 객체 - . 을 찍을 수 있다.
# 수학 작업을 할 때 : math library(파이썬 내장) 혹은 numpy library(외부 다운로드)
n = math.factorial(5)
print(n)
120
1
2
3
4
5
6
7
%%writefile my_module.py
my_variable = 10
def my_factorial(n) :
x=1
for i in range(1,n+1):
x=x*i
return(x)
Overwriting my_module.py
1
2
import my_module as math_lib        ## 원하는 이름으로 변경
print(math_lib.my_variable)
10
1
2
3
4
5
# from '모듈 이름' import '함수 이름' : factorial 함수만 import

from math import factorial ## math.factorial -> factorial
n = factorial(5)/factorial(3)
print(n)
20.0
1
2
3
4
5
6
7
8
9
10
11
12
# 여러 함수를 import

from math import (factorial, acos, pi, sin)
n = factorial(3) + acos(1)
print(n)


# 모든 함수를 import, * : 모든 것

from math import *
n = sqrt(5) + fabs(-12.5) ## sqrt : 루트 / fabs : 절대값
print(n)
6.0
14.73606797749979

모듈 만들기

1
2
3
4
5
6
7
%%writefile mod1.py

def add(x,y):
return x+y

def sub(x,y):
return x-y
Overwriting mod1.py
1
2
3
import mod1
i = mod1.add(3,4)
print(i)
7
1
2
3
from mod1 import *
i = add(3,4)
print(i)
7
1
2
i = mod1.sub(4,2)
print(i)
2
1
2
3
4
5
6
7
8
%%writefile mod2.py

PI = 3.141592

def add(x,y):
return x+y

# 모듈에 변수 포함 가능
Overwriting mod2.py
1
2
import mod2
print(mod2.PI)
3.141592

python 파일

파일 생성

파일 객체 = open(파일 이름, *파일 열기 모드)

[파일 열기 모드]

r : 읽기 모드
w : 쓰기 모드
a : 추가 모드 (파일의 마지막에 새로운 내용을 추가할 때 사용) , append

1
2
3
4
# open 명령어 : 파일에 작업을 한다.

f = open("새파일.txt", 'w') # w 모드로 파일을 열면 기존 파일의 내용을 전부 지우고 처음부터 작업한다. 추가 입력은 a
f.close # 작업 이후 반드시 close로 파일과 연결을 끊어줘야 함
<function TextIOWrapper.close()>
1
2
3
4
5
6
7
# 파일 쓰기 모드로 출력값 입력

f = open("새파일.txt", 'w')
for i in range(1,11): # 1부터 10까지 i에 대입
data = "%d번째 줄입니다. \n" %i #formatted str # \n은 줄바꿈 기호
f.write(data) # data를 파일 객체 f에 입력
f.close()

프로그램 외부에 저장된 파일을 읽는 방법

1
2
3
4
5
6
# readline 함수

f = open("새파일.txt", 'r')
line = f.readline() # 파일의 첫 줄을 읽는다.
print(line)
f.close()
1번째 줄입니다. 
1
2
3
4
5
6
f = open("새파일.txt", 'r')
while True:
line = f.readline()
if not line: break # line(str) 인 경우 공백이면 fulse , 글자인 경우 true
print(line)
f.close()
1번째 줄입니다. 

2번째 줄입니다. 

3번째 줄입니다. 

4번째 줄입니다. 

5번째 줄입니다. 

6번째 줄입니다. 

7번째 줄입니다. 

8번째 줄입니다. 

9번째 줄입니다. 

10번째 줄입니다. 
1
2
3
4
5
6
f = open("새파일.txt", 'r')
lines = f.readlines()
f.close()
print(lines)
for i in range(1,11):
print(lines[i-1])
['1번째 줄입니다. \n', '2번째 줄입니다. \n', '3번째 줄입니다. \n', '4번째 줄입니다. \n', '5번째 줄입니다. \n', '6번째 줄입니다. \n', '7번째 줄입니다. \n', '8번째 줄입니다. \n', '9번째 줄입니다. \n', '10번째 줄입니다. \n']
1번째 줄입니다. 

2번째 줄입니다. 

3번째 줄입니다. 

4번째 줄입니다. 

5번째 줄입니다. 

6번째 줄입니다. 

7번째 줄입니다. 

8번째 줄입니다. 

9번째 줄입니다. 

10번째 줄입니다. 
1
2
3
4
5
6
# read 함수 사용하기
f = open("새파일.txt", 'r')
data = f.read()
print(data)
print(type(data))
f.close()
1번째 줄입니다. 
2번째 줄입니다. 
3번째 줄입니다. 
4번째 줄입니다. 
5번째 줄입니다. 
6번째 줄입니다. 
7번째 줄입니다. 
8번째 줄입니다. 
9번째 줄입니다. 
10번째 줄입니다. 

<class 'str'>

파일에 새로운 내용 추가하기

1
2
3
4
5
f = open("새파일.txt", 'a')
for i in range(11,20):
data = "%d번째 줄입니다. \n" %i
f.write(data)
f.close()

write문과 함께 사용하기

1
2
3
f = open("foo.txt",'w')
f.write("Life is too short")
f.close()
1
2
3
# with 문
with open("foo.txt",'w') as f:
f.write("Life is too short") # 자동으로 close 되는 문장

python 입출력

입력

input: input 에 입력되는 모든 것을 문자열로 취급한다 (내부입력 : 메모리로부터 자료를 읽어옴)

1
2
3
4
5
6
7
8
9
10
11

a = input() # input 함수의 출력 타입 'str'

print(a)
print(type(a))

a = int(a) # type : str -> int
print(a)
print(type(a))
# 일단 str 타입으로 받아들인 후 type 전환을 통해 변수 가공
print(10+a)
3
3
<class 'str'>
3
<class 'int'>
13
1
2
3
# 프롬프트 값을 띄워서 사용자 입력받기

number = input("숫자를 입력하세요 : ")
숫자를 입력하세요 : 3
1
print(number)
3
1
2
3
4
5
6
# split: value 나누기
a,b = input('숫자 두개를 입력하세요: ').split()
a = int(a)
b = int(b)

print(a+b)
숫자 두개를 입력하세요: 5 7
12
1
2
# sep(separator): 변수 사이값(구분) 지정
print(1920,1000,sep=' * ')
1920 * 1000
1
2
3
4
5
# end: print 끝 값 임의로 지정(default: \n)
for i in range(2,5):
for j in range(1,5):
print(i*j,end='') ## end = '' 이 문장에 끝은 \n이 아닌 '' 내부 문자로 대신한다.
print()
2468
36912
481216

출력

print : 입력 자료형을 출력 (내부출력)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
a = 123
print(a)

a = "Python"
print(a)

a = [1,2,3]
print(a)

a = "이번달은 %d 월 입니다." %11
print(a)

a = "오늘은 %d 월 %d 일 입니다." %(11,11)
print(a)

a = "시험 성적은 %3.1f점 입니다." %85.2345 ## 기말test :
print(a)

123
Python
[1, 2, 3]
이번달은 11 월 입니다.
오늘은 11 월 11 일 입니다.
시험 성적은 85.2점 입니다.
1
2
3
4
print("Life" + "is" + "too stort")
print("Life" "is" "too stort") # 큰 따옴표 문자열 연산은 + 와 동일
print("Life " "is " "too stort")
print("Life", "is", "too stort") # 문자열 띄어쓰기는 콤마(,)로 가능
Lifeistoo stort
Lifeistoo stort
Life is too stort
Life is too stort
1
2
3
4
# 한 줄에 결과값 출력하기

for i in range(10) :
print(i, end=' ')
0 1 2 3 4 5 6 7 8 9 

python 함수(define)

함수

반복적으로 사용되는 가치 있는 부분을 한 뭉치로 묶어 불필요한 반복을 줄일 수 있다.
‘어떤 입력값을 주었을 때 어떤 결과값을 돌려준다.’ 라는 식의 함수를 작성하는 것이 유리하다.

1
2
3
4
5
6
7
8
9
10
# 파이썬 함수 구조
"""
def 함수 이름(매개변수들):
수행할 문장1
수행할 문장2
...

return 결과값

"""
'\ndef 함수 이름(매개변수들):\n    수행할 문장1\n    수행할 문장2\n    ...\n\n    return 결과값\n\n'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 함수

def add(a,b): ## a 와 b는 add라는 함수를 작동시키기 위한 변수
return a+b ## 함수 이름은 ad고 입력으로 2개의 값을 받으며, 결과값은 2개의 입력값을 더한 값이다.



# 메인 프로그램

a=3
b=4
c=add(a,b)
print(c)

# Or

result=add(a=3,b=4)
print(result)

# Or

result=add(b=3,a=4) ## 변수 이름만 맞추면 변수 순서가 바뀌어도 작동된다.
print(result)
7
7
7
1
2
3
4
# 입력값이 없는 함수

def say():
return 'Hi'
1
2
a=say()
print(a)
Hi
1
2
3
# retrun(결과값)이 없는 함수
def add(a,b):
print("%d + %d = %d"%(a,b,a+b))
1
add(3,4)
3 + 4 = 7
1
2
3
4
5
6
7
8
9
# 입력값이 몇 개가 될지 모를 때는?

# 여러 개의 입력값을 받는 함수

def add_many(*arg): # '*' 는 임의의 여러 변수 지정
result=0
for i in arg:
result=result+i # *arg에 입력받는 모든 값을 더한다.
return result
1
2
result = add_many(1,2,3,4,5)
print(result)
15
1
2
3
4
5
6
7
8
9
10
11
12
# 사칙 연산 선택 가능

def add_mul(choice, *args) :
if choice =='add': ## choice 매개변수가 add 일 경우
result = 0
for i in args:
result = result+i
elif choice =='mul': ## choice 매개변수가 mul 일 경우
result = 1
for i in args:
result = result*i
return result
1
2
3
4
5
result = add_mul('add',1,2,3,4)
print(result)

result2 = add_mul('mul',1,2,3,4)
print(result2)
10
24
1
2
3
4
5
6
# 함수의 결과값은 항상 하나  # 함수 결과값은 언제나 하나이기에 오류가 나는 것이 아니라 (7,12)라는 하나의 튜플 값으로 돌려준다.
def add_mul (a,b):
return a+b,a*b

result = add_mul(3,4)
print(result)
(7, 12)
1
2
3
4
5
6
7
8
9
# 매개변수에 초기값 미리 정하기

def sayself(name,old,man=True): ## 초기값 "Ture(or something)" 의 경우 변수 가장 끝에 지정하지 않으면 에러가 발생한다.
print("이름 %s" %name)
print("나이 %d" %old)
if man:
print("남성")
else:
print("여성")
1
sayself("박응",27,True)
이름 박응
나이 27
남성
1
sayself("박선",27,False)
이름 박선
나이 27
여성
1
sayself("박응",27)           ## 초기값이 True로 설정되어있다.
이름 박응
나이 27
남성

함수에서 매우 중요한 부분

1
2
3
4
5
6
7
8
# 함수 안에서 선언한 변수의 효력 범위

a = 1 # 함수 밖의 변수 a
def vartest(a): # 여기서 a는 함수 안에서 a라서 함수 안에서만 작동한다. 함수 밖과는 다른 셀이다.
a=a+1

vartest(a) # 여기서 입력값 a는 함수 바깥 a=1을 입력한다는 의미
print(a) # 함수에서 a+1 = 2 가 되었지만 retrun도 없고 함수 안에서의 a만 a=2이 되었다. 메인 셀에서 a는 여전히 1이다.
1
1
2
3
4
5
6
7
8
9
# 함수 안에서 함수 밖의 변수를 변경하는 법

a = 1
def vartest(a):
a=a+1
return a # 메인 프로그램 지정변수에 결과값을 돌려준다.

a = vartest(a) # 결과값을 지정변수 a에 대입
print(a)
2
1
2
3
4
5
6
# lambda (한줄 함수)
'lambda 매개변수1,매개변수2, ...: 매개변수를 사용한 표현식'

add = lambda a,b: a+b
result=add(3,4)
print(result)
7
1
2
3
4
5
6
7
8
#1 for문, while문, if문 등 제어문을 사용하여 1부터 100까지의 숫자를 출력
a=0
while a<100:
a=a+1
print(a,end=' ')
print()

for i in range(0,100):print(i+1,end=" ")
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#2 A학급에 총 10명의 학생이 있다. 이 학생들의 중간고사 점수는 다음과 같다.
# [ 70, 60, 55, 75, 95, 90, 80, 80, 85, 100 ]
# 제어문(반복문)을 사용하여 A학급의 평균 점수를 구하라.

score = [ 70, 60, 55, 75, 95, 90, 80, 80, 85, 100 ]

score_sum = 0

for i in range(0,len(score)):
score_sum = score_sum + score[i]
i=i+1

score_avg = score_sum/len(score)

print(score_avg)
79.0
1
2
3
# 메모리 : 내부 입출력 장치 (Internal I/O) -> 전원과 동시에 소멸
# 하드 : 외부 입력 장치 (External I/O) -> 지속
#file (파일)