unique 요소만 포함하는 set

특정 집합을 만들다보니 같은 값이 저장되지 않는 리스트를 만들 필요가 생겼다.
set() 형식을 사용하면 unique한 객체만 포함하는 집합을 만들 수 있다.

단, 사용하려면 set()으로 객체를 초기화 해야한다.

1
2
set = set([1,1,1,1,2,3,10,10,31])
print(set)
{1, 2, 3, 10, 31}

dictionary와 동일한 {, }로 사용되지만 dictionary와 다르게 key가 없는 list 형식이다.

외부링크

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]

python 비교연산자

비교 연산자

    <   작다
    >   크다
    ==  같다
    !=  같지 않다
    >=  크거나 같다
    <=  작거나 같다

비교 연산 결과는 반드시 bool(참 or 거짓)이 되야한다.

    x or y     둘 중 하나만 참이면 된다.
    x and y    둘 모두 참일 경우
    not x      x가 거짓이면 참이다
1
2
# ex
1>3 and 2<4 ## false and ture
False
1
True and False or True or False and True   ## 연산은 왼쪽부터 수행한다.
True
1
not False
True
1
not False or not True
True
1
1 or 0 or -1       ## 0 : 거짓(0) , 0 이외 : 참(1 혹은 다른 수)
1
1
bool(5)         ## bool 값으로 변경
True

x in s , x not in s

x in list,튜플,문자열 / x not in list,튜플,문자열
: list,튜플,문자열 안에 x가 있는가?

1
1 in [1,2,3]      ## 존재하면 ture 하지 않으면 false
True
1
'a' not in ['a','b']
False
1
't' in 'pythone'    ## 문자열 같은 경우 해당 문자가 존재하는가로 결정
True
1
2
3
4
5
6
pocket = ['phone','money','card']

if ('money' in pocket) or ('card' in pocket): ## 괄호 설정으로 확실히하기
print("택시")
else:
print("보도")
택시
1
2
3
4
5
6
pocket = ['phone','money','card']

if not ('money' in pocket) or not ('card' in pocket):
print("보도")
else:
print("택시")
택시
1
2
3
4
5
6
7
# elif (else if)   elif 문 사용 수에 제한은 없다.

pocket = ['phone','card']

if 'money' in pocket: print("택시 by money") ## 수행문이 1줄일 경우 줄이기 가능
elif 'card' in pocket: print("택시 by card")
else: print("보도")
택시 by card

python 제어문

제어문

파이썬 프로그래밍의 첫번째 단계 : 변수(variable)를 선언해서 객체(object)를 메모리에 담는 것
파이썬 프로그래밍의 두번째 단계 : 객체로 뭔가 컴퓨터가 일을 하게 만든다.
컴퓨터가 할 수 있는 일은 크게 나누어 판단과 반복 밖에 없음을 기억한다.
1) 판단 : 컴퓨터가 객체들을 비교하여 판단하게 만들기 : if 문
2) 반복 : 사람보다 수만배 빠른 두뇌회전 속도를 이용하여 반복계산 시키기 : for 문
3) 판단 + 반복 : 두 과정을 결합하여 조건이 맞는 동안만 반복하기 : while 문

if 문

1
2
3
4
5
6
# ex1
money = True ## 불(bool) 타입: True or False ; 판단에 쓰이는 자료이기에 매우 중요하다.
if money: ## if 다음 불(bool)이 나온다.
print("택시를 타고 가라") ## 실행문에는 반드시 들여쓰기를 해줘야 한다.
else:
print("걸어 가라") ## **동일한 수행 동작은 줄을 맞춰야한다.** ## Tab 이용
택시를 타고 가라

money에 True를 입력했으므로 money는 참이다. 따라서 if문 다음 문장이 수행되어 ‘택시를 타고 가라’가 출력된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
# if 문 기본구조
'''

if 조건문:
수행할 문장1 ## 조건문 = ture 일 경우 수행 문장
수행할 문장2
...
else:
수행할 문장A ## 조건문 = false 일 경우 수행 문장
수행할 문장B
...
'''

'\n\nif 조건문:\n    수행할 문장1    ## 조건문 = ture 일 경우 수행 문장\n    수행할 문장2\n    ...\nelse:\n    수행할 문장A    ## 조건문 = false 일 경우 수행 문장\n    수행할 문장B\n    ...\n'

python 변수

변수(Variable), 객체(Object), 자료(Data), 자료형(Data type)

자료는 우리가 컴퓨터 메모리에 입력할 컴퓨터 외부에 존재하는 수, 문자 등을 의미
자료를 컴퓨터에 입력하기 위해서 일정한 규칙이 필요하고 그 규칙은 자료형으로 규정된다.
컴퓨터 외부에 존재하는 자료를 컴퓨터 머리에 입력하는 독특한 방식은 ‘=’ 기호를 쓰고 주로 ‘변수 = 자료’ 형태를 취한다
일단 컴퓨터 메모리에 자료를 입력하면 그 자료는 ‘자료’라 부르지 않고 파이썬에선 ‘객체(Object)’라 칭한다.
변수란 컴퓨터 메모리 어딘가에 존재하는 객체가 어디에 있는지를 알려주는 주소 개념이다.
타 프로그래밍 언어인 C나 Java에선 자료형(Data type)이 무엇인지 친절히 알려줘야한다.
반면, 파이썬은 자료를 스스로 살펴보고 자료형이 무엇인지 판단한다. 따라사 그 과정이 필요 없다.
변수를 만들 때는 반드시 ‘=’(assignment) 기호를 사용한다.
예 : a = [1,2,3] 이면, [1,2,3] 값을 가지는 리스트 자료형(객체)은 메모리에 자동생성되고 변수 a는 리스트가 저장된 메모리 주소를 가리킨다.

1
2
a = [1,2,3]
id(a) # id() : 변수가 가리키고 있는 객체의 주고 값을 돌려주는 함수
2456107858688
1
2
3
4
# 여러 변수 한번에 만들기
a, b = 1, 2
print(a)
print(b)
1
2
1
2
3
4
# null 변수 만들기
a = None
print(a)
type(a)
None





NoneType
1
2
3
4
5
6
# 변수에 변수를 할당할 경우
b = a ## 주소값 공유
print(a)
print(b)
print(id(a))
print(id(b))
None
None
140715255699584
140715255699584
1
2
# a와 b가 가리키는 객체가 동일한지 묻는 방법 (is)
a is b
True
1
2
3
4
5
# * 주의 *
a[1] = 4
print(a)
print(b)
## 주소값 공유란, 자료를 복사하는 것이 아니라 메모리 주소를 서로 공유한다는 것.
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-72-a5aa4d30ec01> in <module>
      1 # * 주의 *
----> 2 a[1] = 4
      3 print(a)
      4 print(b)
      5 ## 주소값 공유란, 자료를 복사하는 것이 아니라 메모리 주소를 서로 공유한다는 것.


TypeError: 'NoneType' object does not support item assignment
1
2
3
4
5
6
7
8
9
# [:] 사용

a = [1,2,3]
b = a[:]
a[1] = 4
print(a)
print(b)
## [:]는 리스트 전체를 가리키는 방법이기에 자료를 복사하는 경우다.
a is b
[1, 4, 3]
[1, 2, 3]





False
1
2
3
4
#1 자연수 a 홀수 짝수 판별
a = 13
b = a%2
print(b) # print 값이 0일 경우 짝수, 1일 경우 홀수
1
1
2
3
#2 주민등록번호 13자리를 생년월일(YYMMDD)과 그 외 숫자로 분류
a = "0101011234567"
print(a[:6],"-",a[6:]) ## a[:6] : 0 =< print < 6 , a[6:] : 6 =< print
010101 - 1234567
1
2
3
4
5
#3 [1,3,5,4,2] 리스트를 [5,4,3,2,1]로 변경 ## 오름차순 내림차순
a = [1,3,5,4,2]
a.sort()
a.reverse()
print(a)
[5, 4, 3, 2, 1]