소개

Python 기초에 오신 것을 환영합니다! 누구나 시작점이 필요하며, 이 실습 (lab) 은 바로 그 시작을 위한 완벽한 장소입니다. Python 은 우아한 구문 (syntax) 과 동적 타이핑 (dynamic typing) 으로 알려진 배우기 쉽고 강력한 프로그래밍 언어로, 스크립팅 및 신속한 애플리케이션 개발에 이상적인 언어입니다.

본 실습에서는 Python 의 가장 기본적인 개념 중 일부를 배우게 됩니다. 다룰 내용은 다음과 같습니다:

  • 수학 연산자 (Mathematical operators) 와 그 우선순위 (order of precedence).
  • 보다 간결한 코드를 위한 증감 대입 연산자 (Augmented assignment operators).
  • 표현식 내에서 변수를 할당하기 위한 Walrus 연산자 (:=).
  • Python 의 핵심 데이터 타입 (data types).
  • 문자열 연결 (concatenation) 및 반복 (replication) 과 같은 기본적인 문자열 연산.

시작해 봅시다!

수학 연산자 (Math Operators)

이 단계에서는 Python 의 수학 연산자와 연산자 우선순위 (precedence) 에 대해 배웁니다. 연산자 우선순위는 표현식에서 연산이 수행되는 순서를 결정합니다.

다음은 우선순위가 높은 순서부터 낮은 순서까지의 일반적인 수학 연산자입니다.

연산자 (Operators) 연산 (Operation) 예시 (Example)
** 거듭제곱 (Exponent) 2 ** 3 = 8
% 나머지 (Modulus/Remainder) 22 % 8 = 6
// 정수 나누기 (Integer division) 22 // 8 = 2
/ 나누기 (Division) 22 / 8 = 2.75
* 곱셈 (Multiplication) 3 * 3 = 9
- 뺄셈 (Subtraction) 5 - 2 = 3
+ 덧셈 (Addition) 2 + 2 = 4

참고: WebIDE(VS Code 와 유사) 사용이 익숙하지 않다면, 이 랩 (lab)에서 먼저 학습하시기 바랍니다.

이제 이것들을 사용하는 연습을 해봅시다. 왼쪽 파일 탐색기에서 main.py 파일을 엽니다. 기존 내용을 모두 지우고 다음 코드를 추가합니다. 각 표현식의 결과를 확인하기 위해 print() 함수를 사용할 것입니다.

## Multiplication has higher precedence than addition
## So this evaluates as: 2 + (3 * 6) = 2 + 18 = 20
print(2 + 3 * 6)

## Parentheses override operator precedence
## This evaluates as: 5 * 6 = 30
print((2 + 3) * 6)

## Exponentiation
print(2 ** 8)

## Integer division
print(23 // 7)

## Modulus/Remainder
print(23 % 7)

## A more complex expression
print((5 - 1) * ((7 + 1) / (3 - 1)))

이제 터미널을 열고 다음 명령어를 실행하여 스크립트를 실행합니다.

python3 main.py

각 결과가 새 줄에 표시되는 다음 출력을 보게 될 것입니다.

20
30
256
3
2
16.0

증감 할당 연산자 (Augmented Assignment Operators)

이 단계에서는 증감 대입 연산자에 대해 알아봅니다. 이는 변수에 연산을 수행한 후 그 결과를 다시 변수에 할당하는 간결한 방법을 제공합니다.

다음은 이러한 연산자와 그 등가 표현을 나타내는 표입니다.

연산자 등가 표현
var += 1 var = var + 1
var -= 1 var = var - 1
var *= 1 var = var * 1
var /= 1 var = var / 1
var //= 1 var = var // 1
var %= 1 var = var % 1
var **= 1 var = var ** 1

이들을 사용하는 연습을 해봅시다. main.py 파일을 지우고 다음 코드를 추가하여 문자열, 숫자, 리스트에서 이들이 어떻게 작동하는지 확인합니다.

## Augmented assignment with a string
greeting = 'Hello'
greeting += ' world!'
print(greeting)

## Increment a number by 1
number = 1
number += 1
print(number)

## Replicate list elements
my_list = ['item']
my_list *= 3
print(my_list)

터미널에서 스크립트를 실행합니다.

python3 main.py

출력에는 증감 대입의 결과가 표시됩니다.

Hello world!
2
['item', 'item', 'item']

왈러스 연산자 (Walrus Operator)

이 단계에서는 바다코끼리 연산자 (:=), 공식적으로는 할당 표현식 연산자 (Assignment Expression Operator) 라고 불리는 것에 대해 배웁니다. Python 3.8 에서 도입된 이 연산자는 더 큰 표현식의 일부로 변수에 값을 할당할 수 있게 해줍니다.

이는 값을 계산한 직후에 사용해야 하는 코드를 단순화하는 데 유용합니다.

실제 작동 방식을 살펴보겠습니다. main.py 파일을 지우고 다음 코드를 추가합니다.

## The walrus operator assigns "Hello World!" to my_var
## and returns the value, which is then printed.
print(my_var := "Hello World!")

## The variable my_var is now available for use
print(my_var)

## You can also use it to re-assign a variable within an expression
print(my_var := "Hello")
print(my_var)

스크립트를 실행합니다.

python3 main.py

변수가 할당되었고 그 값이 동일한 표현식 내에서 반환되었음을 보여주는 다음 출력을 보게 될 것입니다.

Hello World!
Hello World!
Hello
Hello

데이터 타입 (Data Types)

이 단계에서는 Python 의 9 가지 핵심 내장 데이터 타입에 대한 개요를 살펴봅니다. 데이터 타입을 이해하는 것은 변수가 가질 수 있는 값의 종류와 변수에 대해 수행할 수 있는 연산을 정의하므로 매우 중요합니다.

데이터 타입 예시 설명
숫자 (Numbers)
int -2, 0, 5 정수 (Whole numbers)
float -1.25, 0.0, 1.0 소수점이 있는 숫자
complex 2+3j 실수부와 허수부를 가진 숫자
텍스트 (Text)
str 'a', "Hello!" 텍스트 및 문자
불리언 (Boolean)
bool True, False 참 또는 거짓 값
None
NoneType None "값이 없음" 또는 "아무것도 아님"을 나타냄
컬렉션 (Collections)
list [1, 2, 3] 순서가 있고 변경 가능한 컬렉션
dict {'name': 'Alice', 'age': 30} 키 - 값 쌍
tuple (1, 2, 3) 순서가 있고 변경 불가능한 컬렉션
set {1, 2, 3} 고유한 항목들의 순서 없는 컬렉션

이러한 데이터 타입을 실제로 확인하기 위해 main.py 파일을 지우고 다음 코드를 추가합니다. 우리는 다양한 타입의 변수를 정의한 다음 내장 함수인 type()을 사용하여 해당 타입을 출력할 것입니다.

## Numbers
age = 25                    ## int
price = 19.99               ## float
coordinate = 2 + 3j         ## complex

## Text
name = "Alice"              ## str

## Boolean
is_student = True           ## bool

## None
result = None               ## NoneType

## Collections
scores = [85, 92, 78]       ## list
person = {'name': 'Bob', 'age': 30}  ## dict
coordinates = (10, 20)      ## tuple
unique_ids = {1, 2, 3}      ## set

print(type(age))
print(type(price))
print(type(name))
print(type(is_student))
print(type(scores))
print(type(person))
print(type(coordinates))
print(type(unique_ids))

스크립트를 실행하여 각 변수의 타입을 확인합니다.

python3 main.py

출력은 다음과 같아야 합니다.

<class 'int'>
<class 'float'>
<class 'str'>
<class 'bool'>
<class 'list'>
<class 'dict'>
<class 'tuple'>
<class 'set'>

문자열 연결 및 반복 (Concatenation and Replication)

마지막 단계에서는 두 가지 기본적인 문자열 연산인 연결 (concatenation) 과 반복 (replication) 에 대해 배웁니다.

**문자열 연결 (String concatenation)**은 문자열들을 하나로 합치는 과정입니다. Python 에서는 인접한 문자열 리터럴 (string literals) 이 자동으로 연결됩니다.

**문자열 반복 (String replication)**은 * 연산자를 사용하여 기존 문자열을 여러 번 반복하여 새 문자열을 생성합니다.

이러한 연산을 시도해 보겠습니다. main.py 파일을 지우고 다음 코드를 추가합니다.

## String concatenation: adjacent string literals are automatically joined.
## We use print() to display the result.
concatenated_string = 'Alice' 'Bob'
print(concatenated_string)

## String replication: repeat a string multiple times using the * operator.
replicated_string = 'Alice' * 5
print(replicated_string)

이제 터미널에서 스크립트를 실행합니다.

python3 main.py

두 연산의 결과를 보게 될 것입니다.

AliceBob
AliceAliceAliceAliceAlice

이를 통해 Python 에서 문자열을 얼마나 쉽게 조작할 수 있는지 확인할 수 있습니다.

요약

이 실습을 완료하신 것을 축하드립니다! 여러분은 Python 프로그래밍의 세계로 첫발을 내디뎠습니다.

본 실습에서는 다음과 같은 몇 가지 기본 개념을 배웠습니다.

  • 수학 연산자 (Math Operators): +, *, /, **와 같은 연산자 사용법을 연습하고 연산자 우선순위 (precedence) 를 이해했습니다.
  • 증감 할당 연산자 (Augmented Assignment Operators): 코드를 더 간결하게 작성하기 위한 +=, *=와 같은 단축키를 익혔습니다.
  • 왈러스 연산자 (Walrus Operator): 표현식 내에서 변수를 할당하는 := 연산자를 소개받았습니다.
  • 데이터 타입 (Data Types): 숫자, 문자열, 불리언, 컬렉션 등 Python 의 핵심 데이터 타입에 대한 개요를 파악했습니다.
  • 문자열 연결 및 반복 (String Concatenation and Replication): 문자열을 결합하고 반복하는 방법을 배웠습니다.

이러한 개념들은 더 복잡하고 강력한 Python 프로그램을 작성하기 위한 구성 요소입니다. 계속해서 연습하고 Python 이 제공하는 것들을 탐구해 보세요!