-
02-1. 파이썬 기초파이썬 2023. 8. 21. 16:12
파이썬 기본 문법
1.주석(comment)과 출력(print)
- 주석
- 코드에 대한 설명이나 중간에 코드를 실행시키고 싶지 않을때 사용
- 출력(print함수)
- 변수 또는 특정한 값들을 화면에 보여주게 하는 방법 - 코드 중간에 변수에 들어있는 값을 확인하고 싶을때 사용
# 1,2,3,을 출력하는 코드 print(1) """주석을 작성합니다"""
->1
'주석을 작성합니다'
2.변수 선언
- RAM 저장공간에 값을 할당하는 행위->1->AI->3->3 4->5 5->1 2->4
c = 3 b = 4 print(b)
# 변수 값 수정 a = 1 b = 2 print(a,b)
f = g = 5 print(f,g)
# 다중할당 d, e = 3, 4 print(d,e)
a = 1 b = 2 c = a+b c
b = ""AI" print(b)
a = 1 print(a)
3.식별자
- 변수, 함수, 클래스, 모듈들의 이름을 식별자라고 합니다
- 식별자 규칙
- 소문자(a-z), 대문자(A-Z), 숫자, 언더스코어(_)를 사용
- 가장 앞에 숫자 사용 불가
- 예약어(이미 python에서 문법적으로 정의되어 있는 식별자)의 사용 불가
- print, def, class, try, except ...
- 컨벤션
- snake case:변수, 함수 deep_noid
- camel case: 클래스 LowDashError
10a = 5
->SyntaxError: invalid decimal literal
def 1 = 4
->SyntaxError: invalid syntax
4. 데이터 타입
- 변수를 선언할 때 메모리에 저장공간이 만들어지는데, 저장공간에 저장하는 데이터의 자료 타입을 설정
- RAM 공간을 효율적으로 사용하기 위해서 저장공간의 타입을 설정
- 동적타이핑(파이썬 특징)
- 변수 선언시 저장되는 값에 따라서 자동으로 데이터 타입이 설정
- 변수의 데이터 타입을 확인하는 함수 : type(<변수명>)
4. 1. integer(정수), float(실수), string(문자열)
a = 1 # int a = 1 b = 'python' c = 5.6
type(a), type(b), type(c)
->(int, str, float)
# 문자열 a, b = 'data', "" print(type(a)) print(type(b))
-><class 'str'>
<class 'str'>c = 'AI DX Deepnoid' print(c)
->AI DX Deepnoid
c = 'AI "DX" Deepnoid' print(c)
->AI "DX" Deepnoid
c = "AI 'DX' Deepnoid" print(c)
->AI 'DX' Deepnoid
c = "AI \"DX\" Deepnoid" print(c)
->AI "DX" Deepnoid
4.2.Boolean:True, False
a, b = True, False print(type(a), a, type(b), b)
-><class 'bool'> True <class 'bool'> False
4.3.데이터 타입에 따른 연산
a = 3+9 print(a)
->12
a, b = 5, 6 print(a+b)
->11
a, b = 'deep', 'noid' a + b
->'deepnoid'
a = 'AI' * 6 print(a)
->AIAIAIAIAIAI
# 문자열의 길이 확인 a = '12345' print(len(a))
->5
4.4.오프셋(offset) - 머신러닝에서 데이터 처리할 때, 비전 딥러닝 과정에서 많이 사용
- 특정 위치에 데이터를 선택하는 방법
- [index] : 특정 위치의 하나의 데이터를 선택
- [start : end] : 시작과 끝 위치 사이의 데이터를 선택
- [start : end : stride] : 시작과 끝을 범위로 선택하되 점프하여 선택a = 'abcde' print(a[2])
->c
a = 'abcde' print(a[5])
->『IndexError: string index out of range』
print(a[1:3])
->bc
print(a[:])
->abcde
print(a[::2])
->ace
# 오프셋에서의 음수 print(a, a[3:], a[:-2])
->abcde de abc
print(a[::-1])
->edcba
4.5.문자열함수
# 대문자로 변환하는 함수 : upper() d = 'abcde' e = d.upper() print(e)
->ABCDE
f = ' DEEPNOID '
# 소문자로 변환하는 함수 : lower() f.lower()
->' deepnoid '
# strip() : 공백제거 f.strip()
->'DEEPNOID'
# 특정 문자열 치환 : replace() f.replace('DEEP', 'Sallow')
->' SallowNOID '
# 특정 문자열 위치를 찾아주는 함수 a = 'DEEP NOID AI DX' print(a.find("AI"))
->10
4.6.컬렉션 데이터 타입 : list, tuple, dict
- list [] : 순서가 있는 수정이 가능한 데이터 타입
- tuple () : 순서가 있는 수정이 불가능한 데이터 타입
- dict {} : 순서가 없고 키:값으로 구성되어 있는 데이터 타입4.6.1.list()
# list 변수 선언하는 방법 ls = [1,2,3,'four','five',6,True, 1.2] type(ls), ls
->(list, [1, 2, 3, 'four', 'five', 6, True, 1.2])
# 리스트 데이터를 문자열로 합쳐주는 함수 a = ['big', 'data','AI'] b = ' '.join(a) print(b, type(b))
->big data AI <class 'str'>
4.6.1.1.리스트의 오프셋
- 문자열은 하나의 문자를 오프셋 단위로 인식
- 리스트는 하나의 값을 오프셋 단위로 인식ls[3]
->'four'
ls[1:3], ls[::-1], ls[-2:]
->([2, 3], [1.2, True, 6, 'five', 'four', 3, 2, 1], [True, 1.2])
# ls[-2:]의 0번째 값 ls[-2:][0]
->True
txt = 'apple mango juice' ls = ['apple', 'mango', 'juice'] result = txt.split(" ") print(result)
->['apple', 'mango', 'juice']
4.6.1.2.list 함수
- append: 데이터를 추가
- sort: 데이터를 정렬
- reverse: 데이터를 역순으로 정렬
- pop: 가장 마지막 데이터를 출력하고 출력한 데이터는 삭제ls = [1,5,2,4]
# append : 가장 뒤에 값을 추가 ls.append(3)
ls
->[1, 5, 2, 4, 3]
# sort : 오름차순으로 정렬 ls.sort() ls
->[1, 2, 3, 4, 5]
ls.sort(reverse=True) ls
->[5, 4, 3, 2, 1]
# reverse : 역순으로 정렬 ls.reverse() print(ls)
->[1, 2, 3, 4, 5]
# pop : 가장 마지막 데이터를 출력하고 출력한 데이터를 삭제 number = ls.pop() number, ls
->(2, [1])
ls = [1,5,2,4]
num = ls.pop(2) num
->2
del ls[2] ls
->[1, 5]
# remove : 삭제하고 싶은 데이터 값을 직접 입력하여 삭제 ls.remove(1) ls
->[5]
# 리스트 복사 ls1 = [1,2,3] ls2 = ls1 # 얕은 복사 : 주소값을 복사해준다 ls1, ls2
->([1, 2, 3], [1, 2, 3])
ls1[2] = 5 ls1, ls2
->([1, 2, 5], [1, 2, 5])
ls3 = ls1.copy() # 원본을 유지하기 위해서 되도록이면 깊은 복사를 하자 ls1, ls3
->([1, 2, 5], [1, 2, 5])
ls1[0] = 20 ls1, ls3
->([20, 2, 5], [1, 2, 5])
tuple()
- 리스트와 같이 순서가 있지만 수정이 불가능한 데이터 타입
# 튜플 선언 tp1 = 1,2,3 tp2 = (4,5,6) type(tp1), type(tp2), tp1, tp2
->(tuple, tuple, (1, 2, 3), (4, 5, 6))
tp1[0] = 6
->『TypeError: 'tuple' object does not support item assignment』
# offset index 사용 tp1[1], tp1[::-1]
->(2, (3, 2, 1))
4.6.3.dict{}
- 순서가 없고 {키:값} 으로 구성되어 있는 데이터 타입
dic = { 1 : 'one', 'two':2, 'Three':[1,2,3], } print(type(dic), dic)
-><class 'dict'> {1: 'one', 'two': 2, 'Three': [1, 2, 3]}
dic[1], dic['Three']
->('one', [1, 2, 3])
# 데이터 수정 dic['two'] = [1,2] dic
->{1: 'one', 'two': [1, 2], 'Three': [1, 2, 3]}
# 딕셔너리에서는 오프셋 인덱스 사용 불가 dic[2]
->『KeyError: 2』
딕셔너리 함수
- keys() : 키 데이터만 가져오는 함수
- values() : 값 데이터만 가져오는 함수
- items() : 키와 값을 가져오는 함수
- update() : 두 개의 딕셔너리를 합쳐주는 함수dic = { 'a':1, 'b':2, 'c':3 } dic
->{'a': 1, 'b': 2, 'c': 3}
# keys result = dic.keys() print(type(result), result)
-><class 'dict_keys'> dict_keys(['a', 'b', 'c'])
# values result = dic.values() print(type(result), result)
-><class 'dict_values'> dict_values([1, 2, 3])
# items result = dic.items() result
->dict_items([('a', 1), ('b', 2), ('c', 3)])
# update dic1 = {1:'a', 2:'b'} dic2 = {2:'c', 3:'d'} dic1.update(dic2) dic3 = dic1 print(dic3)
->{1: 'a', 2: 'c', 3: 'd'}
5. 형변환
- 데이터 타입을 변환하는 방법
- 문자열을 숫자로, 숫자를 문자열로 형 변환
- 딕셔너리의 values를 리스트로 변환
- 문자열, 숫자, 리스트 데이터 타입을 boolean 형 변환# 문자열을 숫자로 형 변환 a = 1 b = '2' a + int(b)
->3
data = 'abc' int(data)
->『ValueError: invalid literal for int() with base 10: 'abc'』
# 숫자를 문자열로 형 변환 str(a) + b
->'12'
# boolean 형 변환 bool(1), bool(0), bool(-1)
->(True, False, True)
bool(''), bool('python'), bool(' ')
->(False, True, True)
bool([1,2,3,4]), bool({})
->(True, False)
bool({1:'one', 2:'two'}), bool({})
->(True, False)
6. 입력과 출력
# 입력 value = input('insert string: ') print(type(value), value)
->insert string: AI
<class 'str'> AI# 숫자 입력 value = input('insert integer: ') value = int(value) print(type(value), value)
->insert integer: 1234
<class 'int'> 1234# 개행이 된다 print('deep') print('noid')
->deep
noid# string format a, b = 1234, 'ESG' a, b
->(1234, 'ESG')
result = 'a:' + str(a) + 'b' + b print(result)
->a:1234bESG
result = 'detail :{} data2:{}'.format(a,b) print(result)
->detail :1234 data2:ESG
7. 연산자
- 산술연산자 : +,-,,/,//,%,* -> 사칙연산이 있는 연산자
- 할당연산자 : 변수에 누적시켜서 연산 : +=, //=, **=
- 비교연산자 : >, <, ==, !=, <=, >= : 결과로 True, False -> 두 개의 데이터를 비교하여 같다 크다 연산을 하는 연산자
- 논리연산자 : True, False를 연산 -> or, and, not
- 멤버연산자 : 특정 데이터가 있는지 확인할 때 사용 -> not in, in7.1.산술연산자
(1+4)/2**2
->1.25
a = 1 b = 2 c = a+b c
->3
print(2-6) print(2+3) print(20/3) print(20//3) print(20%3) print(3**3)
->-4
5
6.666666666666667
6
2
27
부동소수점 문제
- 10진수를 2진수로 변환하여 계산할 때 발생하는 문제
0.1 + 0.2
->0.30000000000000004
a, b = 0.1, 0.2 a+b == 0.3
->False
# 해결방법 1 : 정수 형태로 변환하여 진행 a = a*10 b = b*10 (a+b)/10
->0.3
# 해결방법 2 : 반올림 a,b = 0.1, 0.2 round(a+b, 1)
->0.3
# 해결방법 3 : 고정소수점으로 변환 -> Decimal 안에는 string 타입만 들어와야 함 from decimal import Decimal float(Decimal(str(a)) + Decimal(str(b)))
->0.3
# 연산자 우선순위 : ** -> *,/,//,% -> +, -
7.2. 비교연산자
【 ==, !=, >, <, >=, <= 】
# 조건문에서 많이 사용 a, b = 20, 30 print(a,b) a<b, a==b, a!=b
->20 30
(True, False, True)7.3.할당연산자
- 대입연산자와 산술연산자를 사용하여 만들어진 연산자
- +=, -=, /=, *=, %=, //=data = 10 print(data)
->10
data = data+10 print(data)
->20
data+=10 print(data)
->30
7.4.논리연산자
- 논리의 참과 거짓을 나타내는 연산자
- and : 두 개의 논리가 모두 True인 경우 True를 출력
- or : 두 개의 논리가 모두 False인 경우 False를 출력
- not : True는 False로, False는 True로 변환print(True and False) print(True and True) print(False and False)
->False
True
Falseprint(True or False) print(True or True) print(False or False)
->True
True
Falseprint(not(True or False)) print(not(True))
->False
Falsea,b = 1,2 (a<b)and(a==b)
->False
7.5.멤버연산자 -> 데이터 집합에서 특정 데이터가 있는지 없는지 판단하는 연산자
- <특정데이터> in <데이터집합> : 데이터 집합에서 특정 데이터가 있는지 확인해서 있으면 True
- <특정데이터> not in <데이터집합> : 데이터 집합에서 특정 데이터가 있는지 확인해서 있으면 False, 없으면 Truels = ["jin",'john','endy'] 'endy' in ls, 'andrew' in ls, 'jin' in ls
->(True, False, True)
'john' not in ls
->False
data = {1:'one', 3:'three', 5:'five'} 3 in data, '2' in data, 'three' in data # 딕셔너리에선 키값만 가능
->(True, False, False)
'three' in data.values()
->True
'파이썬' 카테고리의 다른 글
02-4. 클래스와 예외처리 (0) 2023.08.28 02-3. 함수 (0) 2023.08.27 02-2.조건문과 반복문 (0) 2023.08.27