Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- dp
- stable diffusion
- 코딩테스트
- Generative Models
- posco 채용
- classifier-free guidance
- Image Generation
- 과제형 코딩테스트
- ip-adapter
- controlNet
- kt인적성
- 논문 리뷰
- 프로그래머스
- KT
- colorization
- ddim
- diffusion models
- DDPM
- 포스코 채용
- 포스코 코딩테스트
- manganinja
Archives
- Today
- Total
Paul's Grit
[Python] 파이썬 문법 기초 본문
파이썬 문법¶
1. 주석(comment)¶
In [1]:
# 주석: 앞에 #을 붙이면 파이썬 코드로 실행하지 않습니다.
# ctrl + /
In [2]:
print(1)
# print(2)
print(3)
1
3
2. print() 출력 함수¶
In [3]:
a = 1
b = 2
In [4]:
print(a)
1
In [5]:
# print 함수의 옵션
# shift + tab(only jupyter): docstring 함수에 대한 설명
print(1, 2, sep = '\t')
print(b, a, b, a, b, a, sep = '\t')
1 2
2 1 2 1 2 1
In [6]:
# tab으로 자동 완성 가능
print('자동완성 기능을 잘 써주세요')
print('오타를 방지할 수 있습니다')
자동완성 기능을 잘 써주세요
오타를 방지할 수 있습니다
3. 변수 선언¶
- RAM 저장 공간에 값을 할당
In [7]:
# 1 이라는 값을 a라는 변수에 할당
a = 1
b = 2
In [8]:
print(a, b)
1 2
In [9]:
d, e = 3, 4
print(d, e)
3 4
In [10]:
f = g = 5
print(f, g)
5 5
In [11]:
print(z)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[11], line 1
----> 1 print(z)
NameError: name 'z' is not defined
In [12]:
type(a), type('글자')
Out[12]:
(int, str)
In [13]:
# 동적 할당
a = 10
type(a)
Out[13]:
int
4. 식별자¶
- 변수, 함수, 클래스, 모듈 등의 이름을 식별자라고 합니다
- 식별자 규칙
- 소문자, 대문자, 숫자, 언더스코어(_) 사용
- 가장 앞에 숫자 사용 불가
- 예약어 사용 불가
- def, class, list, str, int, float...
In [14]:
# 가능한 형태
name = 'Jone'
age = 25
my_var = 3.14
hello_world = 'Hello, World'
IsValid = True
In [15]:
# 불가능한 형태
# 한글, 띄어쓰기, 특수 문자 X
# def = 'func'
# fisrt-name = 'John'
# 2nd_number = 45
# hello world = 'hello_world'\
In [16]:
%whos
Variable Type Data/Info
--------------------------------
IsValid bool True
a int 10
age int 25
b int 2
d int 3
e int 4
f int 5
g int 5
hello_world str Hello, World
my_var float 3.14
name str Jone
In [17]:
%reset
%whos
Interactive namespace is empty.
5. 데이터 타입¶
- RAM이라는 저장공간을 효율적으로 사용하기 위해서 데이터 타입을 설정
- 동적 타이핑
- 변수 선언시 저장되는 값에 따라서 자동으로 데이터 타입 설정
- 정적 타이핑
- 변수 선언시 데이터 타입을 직접 설정 후 할당
- 데이터 타입
- int, float, bool, str
- list, tuple, dict
In [34]:
a = 1 # integer 정수
b = 'python' # string 문자열
c = '1'
In [35]:
type(a), type(b), type(c)
Out[35]:
(int, str, str)
5-1. 기본 데이터 타입¶
- int: 정수
- 1, 2, 3
- float: 소수점
- 1.0, 3.14, -5.0
- str: 문자열
- 'python', "string", '''three'''
- bool: 논리값
- True, False
In [36]:
a = 1
b = 1.2
c = 'True'
d = True
f = "1.2"
In [37]:
type(a), type(b), type(c), type(d), type(f)
Out[37]:
(int, float, str, bool, str)
In [38]:
a == b, a == a
Out[38]:
(False, True)
In [39]:
1 + False
Out[39]:
1
5-2. 컬렉션 데이터 타입¶
- list: 여러 개의 값을 순서대로 담을 수 있고, 수정이 가능한 데이터 타입
- [1, 2, 3]
- [1, '문자', [1, 2, 3]]
- tuple: 리스트와 동일한 내용이지만 수정 불가능한 데이터
- (1, 2)
- dict: 순서가 없고, ]키(key)와 값(value)의 쌍으로 이루어진 데이터 타입
- {'key': 'value'}
- 컬렉션 데이터 타입 안에 담긴 데이터를 아이템(item) 또는 요소 (element)이라고 한다
- 수정이 가능한 것을 가변(mutable)
- 수정이 불가능한 것을 불면(immutable)
In [40]:
# list
ls = [1, 2, 3]
print(ls)
[1, 2, 3]
In [41]:
# tuple
tp = (1, 2, 3)
print(tp)
(1, 2, 3)
In [42]:
# dict
Dict = {'key': 'value'}
print(Dict)
{'key': 'value'}
In [43]:
# 1. 리스트데이터 타입
my_li = [1, 5, 4, 6, 111, 111, 10, 45, 3, 2]
In [44]:
# 2. 리스트의 길이 확이
print(len(my_li))
10
In [45]:
# 리스트에 값 추가
# append()
my_li.append(111)
print(my_li)
[1, 5, 4, 6, 111, 111, 10, 45, 3, 2, 111]
In [46]:
my_li.append([112, 113])
print(my_li)
[1, 5, 4, 6, 111, 111, 10, 45, 3, 2, 111, [112, 113]]
In [47]:
# extend
my_li.extend([14, 15])
print(my_li)
[1, 5, 4, 6, 111, 111, 10, 45, 3, 2, 111, [112, 113], 14, 15]
In [48]:
# 4. 리스트 값 제거
my_li.remove(45)
print(my_li)
[1, 5, 4, 6, 111, 111, 10, 3, 2, 111, [112, 113], 14, 15]
In [49]:
my_li.remove(112)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Cell In[49], line 1
----> 1 my_li.remove(112)
ValueError: list.remove(x): x not in list
In [50]:
my_li.remove([112,113])
print(my_li)
[1, 5, 4, 6, 111, 111, 10, 3, 2, 111, 14, 15]
In [51]:
# 5. 리스트에서 특정 값 갯수 세기
my_li.count(5), my_li.count(4)
Out[51]:
(1, 1)
In [52]:
# 6. 리스트 오름차순 정렬
# sort()
my_li.sort()
In [53]:
print(my_li)
[1, 2, 3, 4, 5, 6, 10, 14, 15, 111, 111, 111]
In [54]:
li1 = [4, 1, 10]
li2 = li1
print(li1)
print(li2)
[4, 1, 10]
[4, 1, 10]
In [55]:
li2.sort()
In [56]:
print(li1)
print(li2)
[1, 4, 10]
[1, 4, 10]
In [57]:
li1 = [4, 1, 10]
li2 = li1.copy() # 깊은 복사(deepcopy)
In [58]:
li2.sort()
In [59]:
print(li1)
print(li2)
[4, 1, 10]
[1, 4, 10]
In [60]:
# 7. pop()
# 가장 마지막 데이터를 출력하고, 출력한 데이터를 리스트에서 삭제
In [61]:
print(my_li)
[1, 2, 3, 4, 5, 6, 10, 14, 15, 111, 111, 111]
In [62]:
my_li.pop()
Out[62]:
111
In [63]:
print(my_li)
[1, 2, 3, 4, 5, 6, 10, 14, 15, 111, 111]
In [64]:
my_li.pop()
Out[64]:
111
In [65]:
print(my_li)
[1, 2, 3, 4, 5, 6, 10, 14, 15, 111]
In [66]:
my_li.pop()
print(my_li)
[1, 2, 3, 4, 5, 6, 10, 14, 15]
In [67]:
# 8. 리스트기리 연산
a_li = [1, 2, 3]
b_li = [7, 8, 9]
In [68]:
a_li + b_li
Out[68]:
[1, 2, 3, 7, 8, 9]
In [69]:
# 9. 리스트에는 여러 데이터 타입을 할당할 수 있다
In [70]:
ls = [1, 2, '3', [5, 6], (7, 8), {'key': 'value'}, True, False]
In [71]:
ls[0], ls[1], ls[2]
Out[71]:
(1, 2, '3')
In [72]:
ls[3], type(ls[3])
Out[72]:
([5, 6], list)
In [73]:
ls[4], type(ls[4])
Out[73]:
((7, 8), tuple)
In [74]:
type(4), type(5)
Out[74]:
(int, int)
5-3 오프셋 인덱스¶
- 마스킹 = 인덱싱 : 데이터 구조에서 원소에 접근하기 위해 사용하는 방법
- [start : end : strid]
In [75]:
my_list = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
my_str = "Hello, World!"
In [76]:
# 1. 리스트에서 첫 번째 원소에 접근하기
my_list[0] #[start]
Out[76]:
10
In [77]:
print(my_list[0:3]) # [n:m] m-1 번째까지 출력
print(my_list)
[10, 20, 30]
[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
In [78]:
my_list[::2]
Out[78]:
[10, 30, 50, 70, 90]
In [79]:
print(my_list[8])
print(my_list[-2])
90
90
In [80]:
# 문자열에서 세 번째 문자에 접근하기
my_str[2]
Out[80]:
'l'
In [81]:
# 문자열엣 네 번째 문자에 접근하기
my_str[3]
Out[81]:
'l'
In [82]:
# 1. 리스트에서 [30, 40, 50, 60, 70] 출력
print(my_list[2:7])
[30, 40, 50, 60, 70]
In [83]:
print(my_str)
print(my_list)
Hello, World!
[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
In [84]:
print("# 1.")
print(my_str[3:], end='\n\n')
print("# 2.")
print(my_list[1::2], end='\n\n')
print("# 3.")
print(my_str[0::3], end='\n\n')
print("# 4.")
print(my_list[4:0:-1], end='\n\n')
print("# 5.")
print(my_str[7:1:-1], end='\n\n')
print("# 6.")
print(my_list[7:2:-1], end='\n\n')
print("# 7.")
print(my_str[12:3:-2], end='\n\n')
print("# 8.")
print(my_list[2::3], end='\n\n')
print("# 9.")
print(my_str[::-1], end='\n\n')
# 1.
lo, World!
# 2.
[20, 40, 60, 80, 100]
# 3.
Hl r!
# 4.
[50, 40, 30, 20]
# 5.
W ,oll
# 6.
[80, 70, 60, 50, 40]
# 7.
!lo o
# 8.
[30, 60, 90]
# 9.
!dlroW ,olleH
In [85]:
# ofset index(인덱싱, 슬라이싱, 마스킹)를 이용한 값 수정
my_list[3] = 9999
print(my_list)
[10, 20, 30, 9999, 50, 60, 70, 80, 90, 100]
In [86]:
my_li = [1, 5, 4, 6, 111, 111, [112, 113], 14, 15]
print(my_li)
[1, 5, 4, 6, 111, 111, [112, 113], 14, 15]
In [87]:
my_li.remove(6)
print(my_li)
[1, 5, 4, 111, 111, [112, 113], 14, 15]
In [88]:
my_list.remove(112)
print(my_list)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Cell In[88], line 1
----> 1 my_list.remove(112)
2 print(my_list)
ValueError: list.remove(x): x not in list
In [89]:
del my_li[5][0]
print(my_li)
[1, 5, 4, 111, 111, [113], 14, 15]
5-3. tuple()¶
- 리스트와 동일한데, 왜 사용/
- 튜플은 리스트보다 같은 데이터를 가졌을 때 공간을 더 적게 사용
In [90]:
# tuple은 수정이 불가능
# immutable
li = [1, 2, 3]
tp = (1, 2, 3)
In [91]:
li[0] = 99
li
Out[91]:
[99, 2, 3]
In [92]:
tp[0] = 99
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[92], line 1
----> 1 tp[0] = 99
TypeError: 'tuple' object does not support item assignment
In [93]:
import sys
li = [1, 2, 3]
tp = (1, 2, 3)
print(sys.getsizeof(li))
print(sys.getsizeof(tp))
88
64
5-4. dictionay¶
- {}
- 순서가 없고 {'key':'value'} 한 쌍으로 구성되어 있는 데이터 타입
In [94]:
dic = {1:'one', 'two':2, 'three':[1,2,3], 'four':'python'}
print(dic)
{1: 'one', 'two': 2, 'three': [1, 2, 3], 'four': 'python'}
In [95]:
# dic에서는 순서 정보가 없음
dic[1]
Out[95]:
'one'
In [96]:
dic[2] # 2라는 key가 없기 때문에 error 발생
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
Cell In[96], line 1
----> 1 dic[2]
KeyError: 2
In [97]:
dic['three']
Out[97]:
[1, 2, 3]
In [98]:
dic[1] = 'five'
dic
Out[98]:
{1: 'five', 'two': 2, 'three': [1, 2, 3], 'four': 'python'}
In [99]:
# key: 젤리, 단맛젤리, 비누맛젤리
# value: 124, 80, 200
data = {'젤리': 124, '단맛젤리':80, '비누맛젤리': 200}
In [100]:
# list
food = ['젤리', '단맛젤리', '바누맛젤리']
kal = [124, 80, 200]
In [101]:
data = dict(zip(food, kal))
data
Out[101]:
{'젤리': 124, '단맛젤리': 80, '바누맛젤리': 200}
6. 형변환¶
- 데이터 타입 변환
- int, float, str, bool, list, tuple, dict
In [102]:
a = 1
b = '2'
In [103]:
a + b
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[103], line 1
----> 1 a + b
TypeError: unsupported operand type(s) for +: 'int' and 'str'
In [104]:
print(a + int(b))
print(float(a) + float(b))
3
3.0
In [105]:
# int와 float 사이의 연산: float 반환
print(int(a) + float(b))
3.0
In [106]:
# 1과 2가 이어붙어 짐
print(str(a) + b)
12
In [107]:
# 형변환이 안되는 경우
text = 'python'
int(text)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Cell In[107], line 3
1 # 형변환이 안되는 경우
2 text = 'python'
----> 3 int(text)
ValueError: invalid literal for int() with base 10: 'python'
7. 연산자의 종류와 우선순위¶
- 괄호: () (괄호 안의 표현식이 가장 먼저 계산됨)
- 지수 연산사: **
- 단항 연산자: -(음수), +(양수)
- 곱셈, 나눗셈, 나머지 연산자: *, /, //, //, %
- 덧셈, 뺄셈, 연산자: +, -
- 비교 연산자: <, >, <=, >=, ==, !=
- 논리 연산자: and, or, not
- 멤버 연산자: in, not in
- 항등 연산자: is, is not
- 할당 연산자: +=, -=
- 삼항 조건 연산자: if-else 표현식
In [108]:
# 산술 연산자
a = 10
b = 3
In [109]:
print(a + b)
print(a - b)
print(a * b)
print(a / b)
print(a // b) # 몫이 정수로 나온다.
print(a % b)
print(a ** b)
13
7
30
3.3333333333333335
3
1
1000
In [110]:
# 할당 연산자
a = 10
In [111]:
a = a + 10
print(a)
20
In [112]:
a += 10
print(a)
30
In [113]:
a *= 2
print(a)
60
In [114]:
# 비교 연산자
a = 5
b = 3
In [115]:
print(a == b)
print(a != b)
print(a > b)
print(a < b)
print(a <= b)
print(a >= b)
False
True
True
False
False
True
In [116]:
# 논리 연산자
x = True
y = False
In [117]:
print(x and y)
print(x or y)
print(not x)
print(not y)
False
True
False
True
In [118]:
# 멤버 연산자
li = ['jo', 'python', 'robot']
In [119]:
print('jo' in li)
print('John' in li)
print('john' not in li)
True
False
True
In [120]:
True or False and 'john' in li
Out[120]:
True
In [121]:
(True or False) and ('john' in li)
Out[121]:
False
In [122]:
# 항등 연산자
x = 10
y = 10
In [123]:
x is y
Out[123]:
True
In [124]:
id(x), id(y)
Out[124]:
(140532947878416, 140532947878416)
In [125]:
id(x) == id(y)
Out[125]:
True
In [126]:
import random
In [127]:
random.randint(1, 10) # int type을 랜덤하게 뽑겠다
Out[127]:
1
In [128]:
# 입력함수
# 입력 받은 데이터를 변수에 할당
# input()
In [129]:
input() # str 으로 입력받음
Out[129]:
'1'
In [130]:
data = int(input())
type(data)
Out[130]:
int
In [131]:
# 솔루션을 리스트로 작성
# 질문 입력
# 저... 이거 공부하면 잘될 수 있을까요?
# 솔루션 중 한 가지 대답을 랜덤하게 선택해서 보여줌
# 솔루션의 개수에 맞게 랜덤한 index 정수값을 생성
# index에 해당하는 솔루션 대답을 보여줌
In [132]:
solution = [
'포기하지 말고 힘내세요!',
'집에 가는 것은 어떨까요?',
'계속 해보세요',
'조금 쉬고 다시 시작하세요'
]
In [138]:
input('질문을 입력하세요: ')
print(solution[random.randint(0, len(solution)-1)])
포기하지 말고 힘내세요!
'Data Analysis > Python' 카테고리의 다른 글
[Python] Stack / Queue 구현 (0) | 2024.03.28 |
---|---|
[Python] 반복문 & List comprehension (1) | 2023.08.03 |
[Python] 조건문 & 문자열 포매팅 (0) | 2023.08.03 |
[Python] PEP8 - Style Guide for Python Code 에 대하여 (2) | 2023.08.02 |