[파이썬 기본 1-1] 초기 세팅 및 변수, 연산자, sep, input, 형변환, eval()
1. IDE/IDLE 세팅
파이썬을 깔고나면 IDLE가 같이 깔리는데, 나름 편하다. Shell에서는 라인바이라인으로 1줄밖에 출력되지 않지만, File-NewFile 후 메모장처럼 쓰고 Run하면 IDLE Shell에 결과가 출력된다. 과거 입력된 것을 클릭하면 이전 코드들 바로 입력 가능하다.
2. 주석/상수/help/type
# : 주석
대문자로 변수입력하게 되면 상수라는 관례다 (예를들면 PI같은 Magic Number들은 대문자로 PI로 쓴다.)
대문자로 시작되는 변수명은 클래스명이 관례다. 변수명의 첫 글자는 소문자로 쓰는것이 관례다.
help(print) : print에 대한 메뉴얼
help만 치고 입력 후 quit해도 동일하게 기능을 수행한다.
type(PI) : PI의 자료형을 리턴해줌
3. 문자열/정수/실수 규칙
"~~~"도 문자열
'~~~'도 문자열이다
파이썬에서는 캐릭터(char)가 없다. 무조건 문자열임(str).
5+4. 하면 실수형으로 계산한다는 뜻 (파이썬은 지가 알아서 Automatic Type Casting 해줌)
5/4는 C에서는 int/int이므로 1인데, 파이썬은 알아서 1.25를 해줌. 파이썬은 int/int = float임
4. 연산자 우선순위
※ 각종 연산자(Operator)들의 우선순위 (위로갈수록 우선순위가 높은거임)
연산자에서 연산되는 값들을 Operand라고 한다. 예를들어 3+4에서 3과 4는 Operand, +는 Operator라고 하는 것이다.
Operator 중에 3+4처럼 2개의 Operand를 갖는 연산자를 다항연산자(Binary Operator)라고 하는 반면, -2처럼 1개의 Operand를 갖는 연산자를 단일연산자(Unary Operator)라고 한다.
5. 제곱연산자
**은 제곱연산자이다.
- 2**3**2는 먼저 오른쪽에서 왼쪽으로 계산됩니다. 먼저 3**2가 계산되고 그 결과인 9가 2**9로 계산됩니다.
- 결과: 2**9는 512입니다.
- (2**3)**2는 왼쪽에서 오른쪽으로 계산됩니다. 먼저 2**3이 계산되고 그 결과인 8이 제곱 연산에 사용됩니다.
- 결과: (2**3)**2는 64입니다.
따라서 2**3**2와 (2**3)**2는 서로 다른 결과를 갖습니다.
- 2**3**2 = 512
- (2**3)**2 = 64
6. 파이썬의 오버플로우
파이썬은 오버플로우가 없다. C언어는 타입마다 메모리 크기가 정해져 있어서 int * int를 하게되면 값의 범위를 넘겨버려서 long을 붙여도 오버플로우를 항상 고려해야하지만, 파이썬은 자리수가 늘어나면 자리수를 계속 늘려서 저장하게 되므로 메모리 컨트롤을 해줄 필요가 없다. (유일한 언어임)
정수형태는 매우 정확하게 값을 표현하는 반면, 실수형태는 근사치로 표현한다. (C언어에서는 저 큰 숫자를 long long으로 데이터 타입을 써도 이 큰 숫자를 표현할 수 없다.) 파이썬에서는 자리수 늘어나면 그 자리수만 늘어나므로 무한하게 표현이 가능하다.
6. 대입연산자/스왑연산자
대입연산자(Cascade Assignment)
파이썬은 대입연산 무한으로 연동시킬 수 있다. 우측에 값을 넣고 대입은 좌측순으로 대입된다.
스왑연산자(Simultaneous Assignment)
파이썬은 문자열에 '(작은따옴표)가 안에 있으면 "(큰따옴표)로 표현하고, 작은따옴표가 없으면 작은따옴표로 표현한다.
또, C에서는 변수에 저장된 값을 서로 스왑해주려면, Temp 변수에다 값을 넣어서 서로 스왑해줘야 하지만, 파이썬은 별도의 스왑연산자가 있다. 아래 예시처럼 c,o = o,c로 해주면, c와 o가 서로 스왑된다.
7. 한번에 여러줄 입력
여러줄 입력하기 (Multi-Line Statement)
1. 숫자는 백슬래시(\)을 입력하면 줄바꿈 가능
2. 괄호가 닫히지 않으면 괄호가 닫힐때까지 한 라인으로 인식하여 줄바꿈 자동 가능
3. 문자열은 큰따옴표 3개로 감싸거나 (""" """), 작은따옴표 3개로 감싸면 \n같은거 안써도 줄바꿈 가능
이거를 print로 해보면 줄바꿈으로 예쁘게 출력되지만 s, t처럼 튜플형태로 한번에 출력하게 되면 이스케이프문자열(\n)이 들어간 형태로 출력된다.
7. 식별자 (변수정의 룰)
식별자(Identifier)
변수정의시 아래 룰대로 해야 함.
하이픈(-)못쓰고, 숫자시작으로 안되고, 마침표(.)쓰면 안되고, 띄어쓰기( ) 안됨
키워드는 변수로 쓸 수 없음
※ 만약 빌트인함수(내장함수)를 변수명으로 쓰게된다면?
이를 변수로 인식해버리고 그 다음부터는 그 빌트인함수를 사용할 수 없게 된다.
8. 파이썬에서의 언더스코어(_)
언더스코어(_)는 가장 마지막의 값을 가리킨다.
9. 몫과 나머지 연산
// ← 몫(Floor Division)
% ← 나머지(Modulo)
앞서 말했듯 파이썬은 int/int = float임. 몫의 경우, int//int = int로 계산해주지만, 둘 중 하나라도 float라면 몫의 결과값이 float로 출력됨
★ 혼동주의 ★
a // b 는 몫을 구하는 Floor Division이다.
a / b는 float 자료형으로 나누기를 수행하는 Float Division이다.
몫과 나머지 사용 예시(몇분 몇초인지 확인해보기)
근데 파이썬에서는 몫과 나머지를 한번에 계산해주는 빌트인 함수가 있다. 함수명은 divmod이다. Divison Modulo의 약자이다.
10. sep 연산자
sep연산자는 Seperator 연산자로, sep=""를 넣으면 쉼표가 들어가는 부분에 sep에서 정의한 ""(빈칸없음)을 넣게 되면서, 떨어뜨리지 않고 붙여서 출력된다.
아래 예시는 s에 문자열이 들어가있고, eval함수(추후 설명)는 계산결과를 도출한다. 그리고 그 사이 쉼표에는 sep에서 정의한 ' = '가 들어가게 되면서 결과값은 8 / 4 + 4 = 6.0이 나오게 된다. (파이썬은 int/int = float임)
11. 변수 입력받기 (input 함수)
입력문은 input함수를 통해 입력을 받는다.
input함수의 인자(argument)는 무조건 string을 넣어줘야 한다.
아래 예시를 보면 이해가 쉬울 것이다.
coin = int(input('동전을 넣으세요.'))
drink = int(input('음료를 고르세요.\n'))
★ Input 함수의 주의할 점 ★
Input 함수를 통해 전달받은 값은 숫자를 받더라도 무조건 "문자열"로 입력받게 된다. 따라서, 반드시 필요한 타입으로 형변환을 해줘야 한다.
12. 형변환
원하는 값을 특정 자료형으로 형변환하는 방법이다.
방법은 매우 간단하다.
int(값), float(값) 등을 통해 형변환하면 되지만, 하나 재밌는 부분은 int("값") 또는 float("값")으로 형변환 시도하는 부분이다. "값"은 분명 문자열 타입인데, 형변환하려고 하는 타입과 값이 동일한 포맷(int=정수, float=실수)이면 파이썬이 알아서 형변환을 시행한다.
또한, 실수의 int 형변환은 무조건 버림처리를 한다(다른 프로그래밍 언어도 동일함).
아래 예시는, int와 float의 범용성에 대한 부분이다. 사실 float(실수)는 int(정수)를 포함하고 있다. 그렇기에, (L10)에서 age를 int로 형변환 선언을 하고 57.5를 입력받게 되면 에러가 나지만, (L16)과 같이 float로 먼저 형변환 후 int로 다시한번 형변환하게되면, 정수로 최종 처리하면서 에러가 나지 않는다. 즉, float가 범용성이 더 크기 때문에 57(정수)를 받든지 57.5(실수)를 받든지 에러가 나지 않고 값을 처리할 수 있게 된다.
이번에는 문자열로 형변환 하는 예시이다. str(값)을 통한 문자열 형변환은 특이한 부분이 없다.
13. eval() 함수
eval()함수는 문자열을 입력받으면 수식이든 에러가 나는 문장이든 자기가 알아서 고쳐서 이해하는 파이썬에만 존재하는 엄청나게 강력한 함수이다. eval함수만 보더라도 왜 파이썬이 세계 프로그래밍 언어 점유율이 높은지를 알 수 있는 부분이다. 단, eval 함수의 인자는 문자열("값") 형태로 입력되어야 한다. (숫자 안됨)
바로 예시를 통해 설명하도록 하겠다.
(L1~7) 5+12라는 "문자열"을 입력받았지만 그 문자열을 eval함수에 넣으니까 수식이라는 것으로 이해하고 17을 반환한다.
(L8~9) eval함수가 Hello World를 출력하라는 명령으로 이해하고 Hello World를 출력한다.
(L11~22) eval함수가 age가 실수형이든 정수형이든 수식이든 뭐든 알아서 이해하고 알아서 형변환해줘서 답한다(형변환 에러 없음).
(L1~2) e val함수가 값이 두 개가 들어왔으니, 이는 튜플형태로 이해하고 튜플로 리턴한다.
(L3~5) eval함수가 값이 두 개가 들어왔는데, 그 중 하나는 수식으로 들어왔으니 그걸 계산하고 튜플형태로 리턴한다.
(L6~10) eval함수가 두 값을 인풋으로 받았는데, 그 중 하나는 수식으로 들어왔으니 그걸 계산하고 튜플형태로 리턴한다
아래와 같이 eval 함수를 통해 두 값을 입력받게 되면 번거롭게 배열을 선언하고 형변환하고 에러 예외처리를 하는 등 절차가 사라져, 코드 라인수를 현저히 줄일 수 있다.
'IT > 머신러닝 & 인공지능 & 데이터사이언스' 카테고리의 다른 글
[파이썬 기본 4] 머신러닝 필수 라이브러리 :: 판다스 총정리 (0) | 2023.10.05 |
---|---|
[파이썬 기본 3] 머신러닝 필수 라이브러리 :: 넘파이 총정리 (1) | 2023.10.05 |
[파이썬 기본 2] 조건문(If/else/elif문), 반복문(while문/for문) (0) | 2023.10.05 |
[파이썬 기본 1-2] 자료형(문자열/콜렉션), 함수 정의 (1) | 2023.10.05 |