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’ 등 다양한 플랫폼에서 작업 가능하다.

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()

파이썬 라이브러리 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 (파일)

python while문

While 문 (조건과 반복의 콤비네이션)

조건이 참인 동안에 while 문 아래의 문장이 반복 수행된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# while 문의 기본 구조

"""

while <조건문>:
<수행 문장1>
<수행 문장2>
<수행 문장3>
...


"""

treehit = 0

while treehit <10: ## 조건이 ture 일 경우에 실행된다. -> fulse일 경우 중단
treehit = treehit + 1
print("나무를 %d번 찍었습니다" %treehit)
if treehit == 10: print("나무가 넘어갑니다")
나무를 1번 찍었습니다
나무를 2번 찍었습니다
나무를 3번 찍었습니다
나무를 4번 찍었습니다
나무를 5번 찍었습니다
나무를 6번 찍었습니다
나무를 7번 찍었습니다
나무를 8번 찍었습니다
나무를 9번 찍었습니다
나무를 10번 찍었습니다
나무가 넘어갑니다
1
2
3
4
5
6
7
8
prompt = """
1. Add
2. Del
3. List
4. Quit

Enter number:"""

1
2
3
4
5

num = 0
while num != 4:
print(prompt)
num = int(input())
    1. Add
    2. Del
    3. List
    4. Quit

    Enter number:
1

    1. Add
    2. Del
    3. List
    4. Quit

    Enter number:
1

    1. Add
    2. Del
    3. List
    4. Quit

    Enter number:
3

    1. Add
    2. Del
    3. List
    4. Quit

    Enter number:
2

    1. Add
    2. Del
    3. List
    4. Quit

    Enter number:
4

quit 의미의 4를 입력하지 않으면 계속 prompt를 출력하는 형식
여기서 input()은 사용자의 입력을 받는 함수

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# while 문 :커피머신

coffee = 3

while True: ## while 문 무한반복 문구
money = int(input())
if money >= 300 and coffee != 0: ##커피를 뽑기에 충분한 돈인지 판단
coffee = coffee - 1
if money > 300:
print("커피")
print("거스름돈 %d원" %(money - 300))
else : print("커피")
elif money < 300 :
print("잔액부족")
elif coffee == 0 :
print("재고부족")
break ##if 특정조건이면 while을 빠져나가자 (break) <-> continue
1000
커피
거스름돈 700원
10
잔액부족
300
커피
301
커피
거스름돈 1원
500
재고부족
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 홀수만 출력하는 while 문
a=0
while a<10:
a=a+1
if a%2==0:continue
print(a)
print("")

x= list(range(1,10,2))
print(list(range(5)))
for i in range(5):
print(x[i])
print("")

a=1
while True:
print(a)
a=a+2
if a> 10:
break
1
3
5
7
9

[0, 1, 2, 3, 4]
1
3
5
7
9

1
3
5
7
9

python for문

FOR 문 (반복문)

1
2
3
4
5
6
# for

test_list = ['one','two','three']

for i in test_list:
print(i)
one
two
three
1
2
3
x = [1,'2',3]
for i in x:
print(i,type(i))
1 <class 'int'>
2 <class 'str'>
3 <class 'int'>
1
2
3
4
a = [(1,2),(3,4),(5,6)]

for (first, last) in a:
print(first,last)
1 2
3 4
5 6
1
2
3
4
5
a = [(1,2),(3,4),(5,6)]

for i in a:
print(i)
print(i[0]+i[1]) ## a : 튜플 [ ]
(1, 2)
3
(3, 4)
7
(5, 6)
11

formatted print %a

%d : 정수 , %f : 실수 , %s : 문자

%#d : # 만큼의 칸을 변수에 할당한다.
%#.?f : # 만큼의 칸을 할당하고 ?만큼의 소수점 이하 자리를 표현한다. ‘.’도 #의 칸 수에 해당한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
# 응용

# '총 5명의 학생이 시험을 보았는대 60점이 넘으면 합격 아니면 불합격'

marks =[90,25,97,45,80]

number = 0
for mark in marks:
number = number + 1 ## x = x + 1
if mark >= 60:
print("%4d번 학생은 합격입니다." % number) ## 문자열 외부에 % (변수) 지정
else:
print("%d번 학생은 불합격입니다." % number)
   1번 학생은 합격입니다.
2번 학생은 불합격입니다.
   3번 학생은 합격입니다.
4번 학생은 불합격입니다.
   5번 학생은 합격입니다.
1
2
3
4
5
6
7
8
# range(시작 수, 끝 수) 함수. 단 끝 수는 해당하지 않는다. (시작 수 =< range < 끝 수)
# 시작 수 생략 가능 ex) range(6) == (0,1,2,3,4,5)

add = 0
for i in range(1,11):
add = add + i

print(add)
55
1
2
3
4
marks = [90,25,67,45,80]
for mark in marks:
if mark >= 60:
print("%d번 학생 합격" %(marks.index(mark)+1)) ## '+1' index의 경우 0번부터 시작하기 때문에
1번 학생 합격
3번 학생 합격
5번 학생 합격
1
2
3
4
5
marks = [90,25,67,45,80]
for number in range(len(marks)): ## for number in range(5) -> (0,1,2,3,4)
if marks[number] < 60:
continue ## 아무 작업을 하지 않고 'for'문으로 돌아간다.
print("%d번 학생 합격" %(number+1))
1번 학생 합격
3번 학생 합격
5번 학생 합격
1
2
3
4
5
6
# 2중 루프

for i in range(2,5):
for j in range(1,5):
print(i*j)
print('')
2
4
6
8

3
6
9
12

4
8
12
16
1
2
3
4
5
6
# 2중 루프

for i in range(2,5):
for j in range(1,5):
print(i*j,end=' ') ## end = '' 이 문장에 끝은 \n이 아닌 '' 내부 문자로 대신한다.
print('')
2 4 6 8 
3 6 9 12 
4 8 12 16 
1
2
3
4
5
6
7
8
9
10
11
12
13
#for 구문  ## range(#1,#2,#3) 를 이용한 리스트 만들기  #1 : 시작값 / #2 : 종료값 / #3 : 간격

result = [x*y for x in range(2,10)
for y in range(1,10)]

print(result)



range(1,30,2)
print(type(range(1,30,2)))
print(list(range(1,30,2))) ### range 는 list 와 비슷한 형식이다.

[2, 4, 6, 8, 10, 12, 14, 16, 18, 3, 6, 9, 12, 15, 18, 21, 24, 27, 4, 8, 12, 16, 20, 24, 28, 32, 36, 5, 10, 15, 20, 25, 30, 35, 40, 45, 6, 12, 18, 24, 30, 36, 42, 48, 54, 7, 14, 21, 28, 35, 42, 49, 56, 63, 8, 16, 24, 32, 40, 48, 56, 64, 72, 9, 18, 27, 36, 45, 54, 63, 72, 81]
<class 'range'>
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29]