2023. 10. 21. 22:35ㆍ프로그래밍 공부/Python
MOTIVATION
데이터 사이즈의 측정
| 용어 | 사이즈(바이트) | 동일한 용량 |
| KiloByte(KB) | 10^3 | 타이핑한 페이지(2KB) |
| MegaByte(MB) | 10^6 | 작은 소설(1MB) |
| GigaByte(GB) | 10^9 | 트럭에 가득 실린 책들(1GB) |
| TeraByte(TB) | 10^12 | 학술 연구 도서관(2TB) |
| PetaByte(PB) | 10^15 | 모든 미국 학술 도서관(2PB) |
| ExaByte(EB) | 10^18 | 말하는 모든 단어(5EB) |
| ZettaByte(ZB) | 10^21 | 매 해 생산되는 데이터의 양 |
기초 개념
2.1 리터럴(Literals)
2.1.1 리터럴(Literal)이란?
리터럴(literal): 그 자체를 나타내는 하나 또는 그 이상의 문자들의 연속
2.1.2 숫자 리터럴(Numeric Literals)
ex) 5, 5.0, 0.05, 2500, 2500. , +2500, -2500
숫자 리터럴(Numeric Literal): 0-9 숫자, 부호(+ or -), 소수점. 반점(,)은 포함하지 않는다.
부동 소숫점(Floating-Point) 표현 범위의 제한
ex) 9.0045602e^+5 (9.0045602 X 10^ 5, 8 digits of precision)
1.006249505236801e^8 (1.006249505236801 X 10^ 8, 16 digits of precision)
4.239e^-16 (4.239 X 10^ -6 , 4 digits of precision)
산술 오버플로(Arithmetic overflow): 계산된 결과값이 표현되기에 너무 클 때 발생한다.
산술 언더플로(Arithmetic underflow): 계산된 결과값이 표현되기에 너무 작을 때 발생한다.
부동 소숫점 표현 정확성 제한
ex)
>>> 1/3
.3333333333333333
>>> 3 * (1/3)
1.0
>>> 1/3 1 1/3 1 1/3 1 1/3 1 1/3 1 1/3
1.9999999999999998
부동 소숫점 표현이 오직 유한한 개수의 숫자만을 포함하기 때문에 많은 부동 소숫점 값을 보유한 것은 오직 실제 가치의 근사치이다.
내장된 format 함수 활용
>>> format(12/5, '.2f')
'2.40'
>>> format(5/7, '.2f')
'0.71'
>>> format(2 ** 100, '.6e')
'1.267651e + 30'
내장된 format 함수를 사용하여 특정 소수점 자리로 반올림한 지정 부동 소수점 값의 숫자 문자열을 만들 수 있다.
2.1.3 문자열 리터럴(String Literals)
'Hello' 'Smith, John' "Baltimore, Maryland 21210"
문자열 리터럴(String Literal) 또는 문자열(String): Python에서 일치하는 단일 또는 이중(때로는 삼중) 따옴표 쌍으로 표시되는 문자 시퀀스
The Representation of Character Values
유니코드(Unicode): 과거와 현재의 모든 언어의 문자를 충분히 나타낼 수 있는 40억 개 이상의 다른 문자를 표현할 수 있다.
UTF-8: 유니코드 표준의 일부인 8비트 인코딩이며 파이썬(기본값)의 문자 인코딩으로 사용한다.
ord(): 주어진 문자 -> UTF-8. ex)ord('A') = 65
chr(): UTF-8 -> 주어진 문자. ex)chr(65)='A'
2.1.4 Control Characters
제어 문자(control character): 출력의 표시를 제어하기 위해 사용되는 비인쇄 문자
이스케이프 시퀀스(escape sequence): 제어 문자를 나타내기 위해 사용되는 하나 이상의 문자의 문자열
ex) '\n': 줄바꿈 제어 문자
ex)
print('Hello\nJennifer Smith')
출력화면
Hello
Jennifer Smith
2.1.5 문자열 포맷팅(String Formatting)
format(value, format_specifier)
왼쪽 정렬 폭 20: format('Hello', ' < 20') ➝ 'Hello '
오른쪽 정렬 폭 20: format('Hello', ' > 20') ➝ ' Hello'
가운데 정렬 폭 20: format('Hello', '^20') ➝ ' Hello '
빈칸 문자 30개: format(' ', '30') ➝ ' '
문자열이 표시되는 방식을 제어하기 위해 내장된 함수 format을 사용할 수 있다.
2.1.6 암시적 그리고 명백한 줄 결합(Implicit and Explicit Line Joining)
암시적 줄 결합(Implicit Line Joining)
( ) [ ] { } 를 사용하여 논리 프로그램 줄을 둘 이상의 물리적 줄에 걸쳐 사용할 수 있다.
print('Name:', student_name, 'Address:', student_address,
'Number of Credits:', total_credits, 'GPA:', current_gpa)
명백한 줄 결합(Explicit Line Joining)
백슬래시(\)를 사용하여 프로그램 줄을 명시적으로 결합할 수 있다.
numsecs_1900_dob = ((year_birth 2 1900) * avg_numsecs_year) 1 \
((month_birth 2 1) * avg_numsecs_month) 1 \
(day_birth * numsecs_day)
2.2 변수(Variables)와 식별자(Identifiers)
2.2.1 변수란?
변수(variable): 값과 연관된 이름
할당 연산자(assignment operator): =, 변수에 값을 할당하는 데 사용된다
불변의 값(Immutable value): 변경할 수 없는 값
num = 10, num = num + 1
k = num,
id(num)
>>> 505494040
id(k)
>>> 505494040
변수 num과 k는 모두 메모리에서 동일한 리터럴 값 10과 연관되어 있다.
2.2.2 Variable Assignment and Keyboard Input
>>> name = input('What is your fi rst name?')
What is your first name? John
line = input('How many credits do you have?')
num_credits = int(line)
line = input('What is your grade point average?')
gpa = float(line)
모든 입력은 문자열 유형으로 input 함수에 의해 반환된다.
기본 함수 int()와 float()를 사용하여 문자열을 숫자 유형으로 변환할 수 있다.
2.2.3 식별자란?
ex) line, num_credits, gpa
식별자(identifier): 주어진 프로그램 요소의 이름을 짓는데 사용되는 하나 이상의 문자의 시퀀스
파이썬에서 식별자는 문자와 숫자를 포함할 수 있지만 숫자로 시작할 수 없다. 특수 밑줄 문자도 사용할 수 있다.
2.2.4 키워드와 그외 다른 미리 파이썬에서 정의된 식별자
키워드(Keyword): 프로그래밍 언어에서 미리 정의된 의미를 가지는 식별자.
따라서 키워드는 "정규" 식별자로 사용할 수 없다. 이렇게 하면 구문 오류가 발생한다.
help()를 이용하면 파이썬 내 키워드 리스트를 확인할 수 있다.
2.3 연산자
2.3.1 연산자란?
연산자(operator): 하나 이상의 피연산자(operand)에 대해 수행될 수 있는 연산을 나타내는 기호 ex) 2+3에서 '+'
단항 연산자(unary operator): 하나의 피연산자를 취하는 연산자 ex) -12에서 음의 연산
이진 연산자(binary operator): 두 피연산자를 취하는 연산자 ex) 더하기 연산
2.3.2 Arithmetic Operators
| Arithmetic Operators(산술 연산자) | Example(예시) | Result(결과) | |
| -x | negation(부정) | -10 | -10 |
| x + y | addition(덧셈) | 10 + 25 | 35 |
| x - y | subtraction(뻴셈) | 10 - 25 | -15 |
| x * y | multiplication(곱셈) | 10 * 5 | 50 |
| x / y | division(나눗셈) | 25 / 10 | 2.5 |
| x // y | truncating div(몫) | 25 // 10 | 2 |
| 25 // 10.0 | 2.0 | ||
| x % y | modulus(나머지) | 25 % 10 | 5 |
| x ** y | exponentiation(거듭제곱) | 10 ** 2 | 100 |
2.4 표현식과 데이터 타입
2.4.1 표현식은 무엇인가?
표현식(expression): 값을 평가하는 기호(또는 단일 기호)의 조합
하위 표현식(sub-expression): 더 큰 표현식의 일부인 모든 표현식
ex)
4 + (3 * k)
표현식: 4 + (3 * k)
하위 표현식: 4, 3*k
2.4.2 연산자 우선 순위
연산자 우선 순위(Operator Precedence): 주어진 연산자 우선 순위표에 의해 정의된 식을 평가할 때 연산자가 적용되는 상대 순서
| Operator(연산자) | Associativity(연관성) |
| **(exponentiation) | right-to-left 오른쪽 -> 왼쪽 |
| -(negation) | left-to-right 왼쪽 -> 오른쪽 |
| *(multiplication), /(division) , //(truncating div), %(modulus) | left-to-right 왼쪽 -> 오른쪽 |
| +(addition), -(subtraction) | left-to-right 왼쪽 -> 오른쪽 |
Python에서 산술 연산자의 연산자 우선 순위
2.4.3 연산자 연관성
연산자 연관성(Operator Associativity): 연산자가 각 연산자에 고유한 동일한 수준의 우선 순위를 가질 때 적용되는 순서
2.4.4 데이터 타입이란?
데이터 타입(data type): 값의 집합, 이러한 값에 적용할 수 있는 연산자의 집합
정적 타이핑(static typing): 변수는 사용되기 전에 특정 유형으로 선언되며 해당 유형의 값만 할당할 수 있다.
동적 타이핑(dynamic typing): 변수의 데이터 유형은 해당 변수가 현재 보유하고 있는 값의 유형에만 의존한다. Python에서 이용한다.
2.4.5 혼합형 식
혼합형 식(mixed-type expression): 다른 유형의 피연산자가 있는 식
강제성(Coercion): 피연산자를 일반적인 유형으로 암묵적으로(자동적으로) 변환하는 것
ex) 2 + 4.5 -> 2.0 + 4.5 -> 6.5 (int에서 float 자동 변환)
타입 변환(Type conversion): 피연산자를 특정 유형으로 명시적으로 변환하는 것
float(2) + 4.5 ➝ 2.0 + 4.5 ➝ 6.5
2 + int(4.5) ➝ 2 + 4 ➝ 6