이번 강의에서는 프로그래밍에서 가장 기초적으로 알아야 할 변수에 대해서 배웁니다. 변수와 함께 해당 변수가 물리적으로 저장되는 메모리에 대해서도 다루게 됩니다. 마지막으로, 한 번에 여러 개의 변수를 함께 저장해서 화면에 표시하거나 필요한 연산을 수행하게 하는 List(리스트)라는 데이터 타입에 대해서도 배우게 됩니다.
알파벳, 숫자, 언더스코어(_)로 선언 가능
변수명은 의미 있는 단어로 표기하는 것이 좋음 (코드 가독성을 위해 문맥과 역할을 활용할 필요가 있다고 생각함)
변수명은 대소문자가 구분됨
특별한 의미가 있는 예약어는 쓰지 않음 (예약어로 선언하게 되면 SyntaxError: invalid syntax 발생)
데이터 타입으로 변수 선언이 가능하지만 권장하지 않음
list = 'a'
print(list) -> 'a'
list('abc') -> TypeError: 'str' object is not callable
❗️ 예약어: 특정 기능을 수행하도록 미리 예약되어 있는 단어를 말합니다. 파이썬 3.7 기준으로 33개의 예약어가 있다고 합니다. 출처
기본 자료형 (primitive data types) : 데이터 타입에 따라 메모리 공간을 차지하는 용량이 달라짐
3 + 2
에서 '3'과 '2'는 피연산자, '+'는 연산자임개인적으로 데이터 핸들링을 하게 되면 데이터 타입 변환에서 실수 및 에러가 굉장히 많이 발생한다고 생각합니다. 보통 다루게 되는 데이터 타입으로는 int(정수형), float(실수형), str(문자형)이 존재합니다.
python은 데이터 타입을 유연하게 파악하여 변환이 가능하게 해주지만 float 형태의 str은 int로 변환 불가능함
a = '3.0'
int(a)
-> ValueError: invalid literal for int() with base 10: '3.0'
float('nan') 혹은 None은 str과 float으로 변환이 가능하지만 int로 변환 불가능함
pd.Series(list(np.arange(1, 50, 0.1)) + [float('nan')]).astype(int)
-> ValueError: Cannot convert non-finite values (NA or inf) to integer
❗️ 여기서 새롭게 알게 된 사실은, None != float('nan')이라는 것은 알고 있었지만, None이 값으로 변환되면 float('nan')으로 변경되어 최종적으로는 두 값의 비교가 True로 반환된다는 것입니다.
이번 강의에서는 콘솔 인/아웃에 대해서 배웁니다. 함수란 프로그램을 개발할 때 사용되는 코드의 논리적 단위로, 가장 기본적인 코드 개발 방법 중 하나입니다. 또한, 콘솔은 터미널이라고 불리는 컴퓨터 프로그램으로 컴퓨터에게 뭔가를 입력해서 컴퓨터가 결과를 출력하게 할 때 사용합니다.
어떤 일을 수행하는 코드의 덩어리입니다.
parameter 없음 | parameter 존재 | |
---|---|---|
반환 값 없음 | 함수 내의 수행문만 수행 | parameter를 사용, 수행문만 수행 |
반환 값 존재 | parameter없이, 수행문 수행 후 결과값 반환 | parameter를 사용하여 수행문 수행 후 결과값 반환 |
print('Art: %5d, Price per Unit: %8.2f' % (453, 59.058))
-> Art: 453(5칸의 공간), Price per Unit: 59.06(8칸의 공간에 소수점 2자리까지..)
type | Description |
---|---|
%s | 문자열(string) |
%c | 문자 1개(character) |
%d | 정수(Integer) |
%f | 부동소수(floating-point) |
%o | 8진수 |
%x | 16진수 |
%% | Literal % (문자 % 자체) |
age = 27
name = 'Jinseok'
print('{} is {} years old'. format(age, name))
-> 'Jinseok is 27 years old.'
print('Product: %10s, Price per unit: %10.3f.' % ('Apple', 5.243))
print('Product: {0:<10s}, Price per unit: {1:<10.3f}.'.format('Apple, 5.243')
-> Product: APPLE, Price per unit: 5.243.
-> Product: Apple , Price per unit: 5.243 .
이번 강의에서는 프로그래밍을 배울 때 사용되는 논리적인 사고 학습에 핵심이 되는 조건문과 반복문을 배웁니다. 거의 모든 프로그램은 제어와 반복의 연속으로 하나의 프로그램을 구성하게 됩니다.
다양한 반응을 보이게 프로그램을 작성하기 위해서는 조건문 과 반복문 의 학습은 필수입니다. 조건문관 반복문을 정확하게 이해하고 있다면 Computational Thinking, 프로그래밍적 사고력을 기를 수 있습니다.
또한 마지막 부분에서 프로그램 개발을 위해서 시행착오를 겪는 것과 같은 디버깅(debugging)에 대해서 배울 예정입니다.
a = [1,2,3,4,5]
b = a[:] # copy
a is b
-> False
a == b
-> True
a = [1,2,3,4,5]
b = a # assign
a is b
-> True
a == b
-> True
values = True if 5 % 2 == 0 else False
먼저 버그(bug)는 에러, 프로그램의 오작동을 의미합니다. 그렇다면 디버깅, debugging이란 발견되는 버그, 에러, 오류, 오작동을 찾아 해결하는 것을 의미하며 버그를 찾아 해결하는 과정이라고 볼 수 있습니다.
이번 강의에서는 문자열(String) 타입에 대해서 배웁니다. 보통 다루게 될 데이터는 일반적으로 문자로 되어 있습니다. 흔히 숫자라고 생각하는 1, 0.1 같은 숫자들도, 컴퓨터는 문자로 인식하는 경우가 많습니다. 그렇기 때문에 문자열을 핸들링하는 법에 익숙하게 되면 데이터를 보다 빠르게 다룰 수 있게 됩니다.
또한, 함수의 조금 더 높은 난이도의 개념을 배우게 됩니다. 함수는 코드를 구분하는 좋은 기준이기도 하지만 메모리의 사용이나 변수의 사용방법 등 다양한 개념들을 배우게 되면 보다 효율적인 코드 작성이 가능합니다.
❗️ 데이터 타입과 메모리 공간
1 Byte의 메모리 공간이란
각 데이터 타입 별로 메모리 공간을 할당 받은 크기가 다르다.
함수에서 parameter를 전달하는 3가지 방식
python에서는 객체의 주소가 함수 로 전달되는 방식이 적용됩니다. 전달된 객체를 참조하여 변경 시, 호출자에게 영향을 주나 새로운 객체를 만들 경우 호출자에게 영향을 주지 않습니다.
def spam(eggs):
eggs.append(1) # paramter로 입력 받은 객체와 같은 메모리 주소
eggs = [2, 3] # 새롭게 선언된 변수로 새로운 메모리 주소를 가지게 됨
ham = [4, 5] # 그렇다면 여기서 ham을 새롭게 선언하면 어떻게 될까?, 하지만 해당 ham은 parameter로 들어오는 ham과는 전혀 다른 ham!
print(eggs) # 새롭게 선언된 [2, 3] print
print(ham) # 위에서 선언된 [4, 5] print
ham = [0]
spam(ham)
print(ham)
-> [0, 1] # 원소가 추가된 모습, ham -> ham(eggs).append(1) -> ham
swap
def swap_value(x, y):
temp = x
x = y
y = temp
def swap_offset(offset_x, offset_y):
temp = ex[offset_x]
ex[offset_x] = ex[offset_y]
ex[offset_y] = temp
def swap_reference(list_ex, offset_x, offset_y):
temp = list_ex[offset_x]
list_ex[offset_x] = list_ex[offset_y]
list_ex[offset_y] = temp
ex = [1,2,3,4,5]
swap_value(ex[0], ex[1])
-> ex = [1,2,3,4,5]
swap_offset(0, 1)
-> ex = [2,1,3,4,5]
ex = [1,2,3,4,5]
swap_reference(ex, 2, 3)
-> ex = [1,2,4,3,5]
def f():
global s # 함수 내에서 전역변수 사용 시, global 키워드 사용. 함수 내에서만 존재했던 s가 프로그램 전체 s로 변경됨
s = 'I love London!'
print(s)
s = 'I love Paris!'
f()
print(s)
-> I love London!
-> I love London!
def insert(self, index: int, module: Module) -> None:
.....
.....
-> index는 int 타입, return은 None 임을 알 수 있음