Posts 파이썬 기본 문법과 함수
Post
Cancel

파이썬 기본 문법과 함수

1. 주석과 출력


1.1 주석 : 앞에 #을 붙이면 코드로 실행이 안됨

1
2
3
4
# 1 2 3 을 출력하는 코드 <- 주석
print(1)
print(2)
print(3)
1
2
3
1
2
3
  • 코드에 대한 설명이나 중간에 코드를 실행시키고 싶지않을때 사용
  • 단축키 : ctrl + /
  • 블럭설정 : shift + 방향키

1.2 출력 : print 함수

1
2
3
4
5
6
a = 1
b = 2
print(b)
c = 3
b = 4
print(b)
1
2
2
4


1
2
print(1,2)
print(3)
1
2
1 2
3


1
print(1,2,3, end = ' ')
1
1 2 3 


1
2
print(1, 2, sep = '-', end='\t')
print(3)
1
1-2	3


1
2
print(1, 2, sep = '-', end='-')
print(3)
1
1-2-3


1
python_data_science = 1
1
python_data_science
1
1
  • 코드 중간에 변수에 들어있는 값을 확인하고 싶을때 사용
  • print 함수의 옵션
    • docsting : 함수에 대한 설명, 단축키 (shift + tap)
    • 기본은 end = ‘\n’ (new line)
    • 자동완성 : tab

2. 변수 선언


2.1 변수 선언이란?

1
2
3
4
a = 1
b = 2
c = a + b
c
1
3


1
2
3
d, e = 3, 4
f = g = 5
d, e, f, g
1
(3, 4, 5, 5)
  • RAM 저장공간에 값을 할당하는 행위


3. 식별자


3.1 식별자란?

  • 변수, 함수, 클래스, 모듈 등의 이름을 식별자라고 함
  • 식별자 규칙
    • 소문자, 대문자, 숫자, 언더스코어(_)를 사용
    • 가장 앞에 숫자 사용 불가
    • 예약어 사용 불가 : def, class, try…
  • 컨벤션
    • snake_case : fast_campus : 변수, 함수
    • CamelCase : FastCampus, Fastcampus : 클래스


4. 데이터 타입


4.1 데이터 타입의 종류

1
2
3
a = 1
b = 'python'
type(a), type(b)
1
(int, str)
  • RAM 저장공간을 효율적으로 사용하기 위해서 저장공간의 타입을 설정
  • 동적 타이핑
    • 변수 선언시 저장되는 값에 따라서 자동으로 데이터 타입이 설정
  • 기본 데이터 타입 : int, float, bool, str
  • 컬렉션 데이터 타입 : list, tuple, dict


5. 기본 데이터 타입


5.1 int, float, bool, str

1
2
3
4
5
a = 1
b = 2.2
c = False  # True
d = 'data'
type(a), type(b), type(c), type(d),
1
(int, float, bool, str)


1
a + b
1
3.2


5.2 Boolean

1
a + c 
1
1
  • bool은 True = 1, False = 0으로 인식


5.3 데이터 타입의 함수들

  • 문자열로 된 데이터 타입의 함수들

5.3.1 Upper

1
2
e = d.upper()
e
1
'DATA'
  • 대문자로 전환


1
d, e
1
('data', 'DATA')


1
f = ' Fast campus '


5.3.2 lower

1
f.lower()
1
' fast campus '
  • 소문자로 변환


5.3.3 Strip

1
f.strip()
1
'Fast campus'
  • 앞뒤에 공백제거


5.3.4 Replace

1
f.replace('Fast', 'Slow')
1
' Slow campus '
  • 특정 문자열 치환


5.3.5 Dir

1
dir(f)
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
['__add__',
 '__class__',
 '__contains__',
 '__delattr__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__getitem__',
 '__getnewargs__',
 '__gt__',
 '__hash__',
 '__init__',
 '__init_subclass__',
 '__iter__',
 '__le__',
 '__len__',
 '__lt__',
 '__mod__',
 '__mul__',
 '__ne__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__rmod__',
 '__rmul__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 'capitalize',
 'casefold',
 'center',
 'count',
 'encode',
 'endswith',
 'expandtabs',
 'find',
 'format',
 'format_map',
 'index',
 'isalnum',
 'isalpha',
 'isascii',
 'isdecimal',
 'isdigit',
 'isidentifier',
 'islower',
 'isnumeric',
 'isprintable',
 'isspace',
 'istitle',
 'isupper',
 'join',
 'ljust',
 'lower',
 'lstrip',
 'maketrans',
 'partition',
 'replace',
 'rfind',
 'rindex',
 'rjust',
 'rpartition',
 'rsplit',
 'rstrip',
 'split',
 'splitlines',
 'startswith',
 'strip',
 'swapcase',
 'title',
 'translate',
 'upper',
 'zfill']
  • 사용가능한 함수 확인


5.3.6 오프셋 인덱스

1
g = 'abcdefg'


1
g[2], g[-2], g[2:5], g[:2], g[3:], g[-2:], g[::2], g[::-1]
1
('c', 'f', 'cde', 'ab', 'defg', 'fg', 'aceg', 'gfedcba')


1
numbers = '123456789'
1
2
# 97531 출력(1)
numbers[::-2]
1
'97531'


1
2
# 97531 출력(2)
numbers[::2][::-1]
1
'97531'


6. 컬렉션 데이터 타입 : list, Tuple, Dict


6.1 List

1
2
ls = [1, 2, 3, 'four', [5, 6], True, 1.2]
type(ls), ls
1
(list, [1, 2, 3, 'four', [5, 6], True, 1.2])


1
ls[3], ls[1:3], ls[::-1]
1
('four', [2, 3], [1.2, True, [5, 6], 'four', 3, 2, 1])


  • 순서가 있는 수정이 가능한 데이터 타입
  • Offset index 사용이 가능


6.2 List 함수들

1
ls = [1, 5, 2, 4]


6.2.1 Append

1
2
ls.append(3)
ls
1
[1, 5, 2, 4, 3]
  • 가장 뒤에 값을 추가


6.2.2 Sort

1
2
ls.sort()
ls
1
[1, 2, 3, 4, 5]


1
ls[::-1]
1
[5, 4, 3, 2, 1]


1
2
ls.sort(reverse=True)
ls
1
[5, 4, 3, 2, 1]
  • 오름차순으로 정렬
  • 내림차순은 함수가 없음으로, 오름차순의 역순 혹은 (reverse = True)


6.3 리스트의 복사

  • 리스트의 복사는 얕은 복사와 깊은 복사가 있다.


6.3.1 얕은 복사

1
2
3
ls1 = [1, 2, 3]
ls2 = ls1
ls1, ls2
1
([1, 2, 3], [1, 2, 3])


1
2
ls1[2] = 5
ls1, ls2
1
([1, 2, 5], [1, 2, 5])
  • 리스트만 복사되어, ls2, ls1은 서로 같은 주소값을 참조
  • 위의 내용에 따라서 ls1이 바뀌면 ls2도 바뀌고 반대의 경우도 마찬가지


6.3.2 깊은 복사

1
2
ls3 = ls1.copy()
ls1, ls3
1
([1, 2, 5], [1, 2, 5])


1
2
ls1[2] = 10
ls1, ls3
1
([1, 2, 10], [1, 2, 5])
  • 리스트의 주소값이 복사되어 새로운 주소값이 생김


6.4 Tuple

1
2
3
tp1 = 1, 2, 3
tp2 = (4, 5, 6)
type(tp1), type(tp2), tp1, tp2
1
(tuple, tuple, (1, 2, 3), (4, 5, 6))


1
2
a, b = 1, 2
a, b
1
(1, 2)
  • 리스트와 같지만 수정이 불가능한 데이터 타입
  • tuple은 리스트보다 같은 데이터를 가졌을때 공간을 적게 사용


6.4.1 Offset index 사용

1
tp1[1], tp1[::-1]
1
(2, (3, 2, 1))


6.4.2 리스트와 튜플의 저장공간 차이 비교

1
2
3
4
5
6
import sys

ls = [1, 2, 3]
tp = (1, 2, 3)

print(sys.getsizeof(ls), sys.getsizeof(tp))
1
80 64


6.5 Dict

1
2
3
4
5
6
dic = {
    1 : 'one',
    'two' : 2,
    'three' : [1, 2, 3]
}
type(dic), dic
1
(dict, {1: 'one', 'two': 2, 'three': [1, 2, 3]})


1
dic[1], dic['three']
1
('one', [1, 2, 3])


1
2
dic['two'] = 123
dic
1
{1: 'one', 'two': 123, 'three': [1, 2, 3]}
  • 순서가 없고 {키 : 값}으로 구성되어 있는 데이터 타입
  • 선언 : 키는 정수, 문자열 데이터 타입만 사용, 이 가능
  • 인덱스 대신 키를 사용


6.6 List와 Dict 실습

  • 아래의 데이터를 list와 dict으로 선언
  • 도시 : seoul, busan, deagu
  • 인구 : 9,700,000 3,400,000 2,400,000


6.6.1 List

1
2
3
city = ['seoul', 'busan', 'deagu']
population = [9700000, 3400000, 2400000]
city, population
1
(['seoul', 'busan', 'deagu'], [9700000, 3400000, 2400000])


1
sum(population)
1
15500000


6.6.2 Dict

1
2
3
4
5
6
data = {
    'seoul' : 9700000,
    'busan' : 3400000,
    'deagu' : 2400000
}
data
1
{'seoul': 9700000, 'busan': 3400000, 'deagu': 2400000}


1
sum(data.values())
1
15500000


7. 형변환


7.1 형변환 이란

  • 여러가지 데이터들의 형태를 변환 하는것
  • str -> int or float은 불가능할수도 있음함 (‘일’은 숫자가 아니고 문자이기 떄문에)
  • object -> float -> int -> str로 변경 가능
  • int, float, bool, str, list, tuple, dict


7.1.1 string은 int형태로 형변환이 불가

1
2
stirng = 'python'
int(string)
1
2
3
4
5
6
7
8
9
10
---------------------------------------------------------------------------

NameError                                 Traceback (most recent call last)

<ipython-input-50-8259ae7e8a1a> in <module>
      1 stirng = 'python'
----> 2 int(string)


NameError: name 'string' is not defined


7.2 데이터 타입이 다른변수들의 연산

1
2
3
a = 1
b = "2"
a + b
1
2
3
4
5
6
7
8
9
10
11
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-42-f421d2a6e030> in <module>
      1 a = 1
      2 b = "2"
----> 3 a + b


TypeError: unsupported operand type(s) for +: 'int' and 'str'
  • 데이터 타입이 다른 변수들은 오류가 날수 있음


7.2.1 int로 변환

1
a + int(b)
1
3
  • 변수 b가 str타입이고, 2로 되어있어서 int로 변환 가능


7.2.2 str로 변환

1
str(a) + b
1
'12'
  • 혹은 a변수의 1을 str로 변환가능
  • 다만 두개의 결과가 다른것을 주목 int + int = sum이고, str + str = strstr이 됨


7.3 zip

1
list(zip(city, population))
1
[('seoul', 9700000), ('busan', 3400000), ('deagu', 2400000)]


1
2
result = dict(zip(city, population))
result
1
{'seoul': 9700000, 'busan': 3400000, 'deagu': 2400000}


1
2
3
data1 = list(result.keys())
data2 = list(result.values())
data1, data2
1
(['seoul', 'busan', 'deagu'], [9700000, 3400000, 2400000])
  • 같은 인덱스 데이터끼리 묶어주는 함수
  • 위에서 실습한 list 데이터를 하나로 묶어줌 (리스트안에 튜플)
  • zip으로 묶고 난뒤에는 list, tuple, dict로 형 변환를 해주어야 함


8. 연산자


8.1 산술 연산자

1
2
3
a = 1
b = 2
a + b
1
3


1
(1 + 4) / 2 ** 2
1
1.25
  • + : 더하기
  • - : 빼기
  • * : 곱하기
  • / : 나누기
  • // : 몫
  • % : 나머지
  • ** : 제곱


8.2 할당 연산자

1
2
3
a = 3
a //= 3
a
1
1


1
2
3
4
a = 10
a = a + 10
a = a + 10
a
1
30


1
2
3
4
a = 10
a += 10
a += 10
a
1
30
  • 변수에 누적시키면서 연산하는것
  • += : 변수에 누적해서 더함
  • -= : 변수에 누적해서 뺌
  • **= : 변수에 누적해서 제곱
  • //= : 변수가 누적해서 나머지


8.3 비교 연산자

1
2
print(a, b)
a > b, a == b, a < b
1
2
30 2
(True, False, False)
  • > : 작다
  • < : 크다
  • == : 같다
  • != : 같지 않다
  • >= : 작거나 같다
  • <= : 크거나 같다
  • 결과로 True, False가 반환됨


8.4 논리 연산자

1
True and False, True or False, not True or False
1
(False, True, False)
  • True, False를 연산 or and not


8.5 멤버 연산자

1
2
ls = ['jin', 'andy', 'john']
'andy' in ls, 'mm' in ls, 'jin' not in ls
1
(True, False, False)
  • 특정 데이터가 있는지 확인할때 사용하는 연산자
  • in : 있다
  • not in : 없다
  • True, False로 return됨


9.그 외 함수


9.1 random 함수

1
import random
  • 랜덤한 값을 출력해주는 함수 import random으로 불러옴


9.1.1 randint

1
random.randint(1,10)
1
2
  • 설정한 숫자값 사이에서 랜덤한 정수를 출력


9.1.2 randrange

1
random.randrange(1,10)
1
3
  • 설정한 숫자값 사이에서 최대설정값 -1 중 랜덤한 정수를 출력


9.1.3 shuffle

1
2
3
sample = ['밥', '라면', '떡볶이']
random.shuffle(sample)
sample
1
['라면', '떡볶이', '밥']
  • 순서가 있는 자료형을 랜덤하게 섞어줌


9.1.4 choice

1
random.choice(sample)
1
'라면'
  • 리스트와 같은 자료형에서 랜덤하게 한개를 뽑아줌


9.2 입력함수

1
2
data = input('insert string : ')
data
1
2
insert string :  안녕하세요
'안녕하세요'
  • input : 사용자가 직접 어떠한 값을 입력할수 있음, 기본으로 stirng형


10. 실습 해결의책


10.1 해결의 책

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 해결책을 리스트로 작성
solutions = [
    '밥을 드세요',
    '그건 하지 마세요',
    '좋은 생각 입니다',
    '잘 안될겁니다. 포기하세요',
    '좋아요. 좋은 선택이에요'
]

# 질문 입력
input('질문을 입력하세요')
idx = random.randint(0, len(solutions)-1)

# index에 해당하는 솔루션 출력
solutions[idx]
1
2
질문을 입력하세요 안녕하세요
'좋아요. 좋은 선택이에요'
  • 질문을 하면 질문에 대한 답변을 해주는 책
  • 솔루션을 리스트로 작성
  • 질문 입력받음
  • 솔루션의 갯수에 맞게 랜덤한 index 정수 값을 생성
  • index에 해당하는 솔루션 리스트의 데이터를 출력
This post is licensed under CC BY 4.0 by the author.