파이썬 시작하기
Python 3 Fundamentals 과정에 오신 걸 환영합니다.
목차:*
- 파이썬 소개
- 파이썬의 특징
- 파이썬의 장단점
- 파이썬을 사용하는 분야
- 변수와 자료형
- 변수의 개념
- 변수의 선언과 초기화
- 숫자형 자료형
- 문자열 자료형
- 불리언 자료형
- None 자료형
- 연산자
- 산술 연산자
- 비교 연산자
- 논리 연산자
- 비트 연산자
- 조건문
if
문- if-else문
- if-elif-else문
- 반복문
- while문
- for문
- 함수
- 함수의 개념
- 함수의 정의와 호출
- 매개변수와 반환값
- 함수의 종류
- 리스트와 튜플
- 리스트의 개념
- 리스트의 인덱싱과 슬라이싱
- 리스트의 연산
- 리스트의 메서드
- 튜플의 개념
- 딕셔너리와 세트
- 딕셔너리의 개념
- 딕셔너리의 키와 값
- 딕셔너리의 메서드
- 세트의 개념
- 세트의 연산과 메서드
- 파일 입출력
- 파일의 개념
- 파일 열고 닫기
- 파일 쓰기
- 파일 읽기 with 구문을 사용한 파일 입출력
- 예외 처리
- 예외의 개념
- try-except 문
- try-except-else 문
- try-except-finally 문
문자열 자료형
문자열은 문자, 숫자, 특수문자 등을 모두 포함한 문자의 집합을 나타내는 자료형입니다. 파이썬에서는 문자열을 작은따옴표(')나 큰따옴표(")로 둘러싸서 나타냅니다.
a = 'Hello, World!' # 작은따옴표로 나타낸 문자열
b = "Hello, Python!" # 큰따옴표로 나타낸 문자열
파이썬에서는 문자열의 일부분을 슬라이싱하여 추출할 수 있습니다. 슬라이싱은 뒤에서 좀 더 자세히 다룹니다.
a = 'Hello, World!'
b = a[0:5] # 'Hello'
파이썬에서는 문자열을 더하여 연결할 수 있습니다.
a = 'Hello, '
b = 'World!'
c = a + b # 'Hello, World!'
파이썬에서는 문자열의 곱셈 연산자를 사용하여, 문자열을 반복할 수 있습니다.
a = 'Hello'
b = a * 3 # 'HelloHelloHello'
큰따옴표와 작은따옴표 함께 사용하기
- 큰따옴표로 문자열을 감싸고, 그 안에 작은따옴표를 사용하는 방법:
sentence = "She said, 'Hello, world!'"
print(sentence)
- 작은따옴표로 문자열을 감싸고, 그 안에 큰따옴표를 사용하는 방법:
sentence = 'He replied, "How are you?"'
print(sentence)
위의 코드를 실행하면 각각의 문장에 작은따옴표와 큰따옴표가 포함된 문자열이 출력됩니다.
여러 줄 문자열
파이썬에서는 여러 줄의 문자열을 표현하는 방법이 있습니다. 이를 "Multi-line Strings" 또는 "여러 줄 문자열"이라고 합니다.
파이썬에서는 작은따옴표(''
)나 큰따옴표(""
) 세 개를 연속해서 사용하여 Multi-line Strings를 만들 수 있습니다. 예를 들어, 작은따옴표를 세 개 사용한 문자열은 아래와 같이 작성할 수 있습니다.
a = '''이것은 여러 줄의 문자열입니다.
여러 줄로 이루어져 있습니다.'''
print(a)
위 코드에서 '''
과 '''
사이에 작성한 문자열은 여러 줄로 이루어져 있습니다. print()
함수를 사용하여 Multi-line Strings를 출력하면, 여러 줄이 출력됩니다.
문자열 안에는 줄바꿈 문자('\n
')나 탭 문자('\t
') 등의 이스케이프 문자를 사용할 수 있습니다.
b = '''이것도 여러 줄의 문자열입니다.
탭 문자(\t)와 줄바꿈 문자(\n)를 사용했습니다.'''
print(b)
위 코드에서 \t
는 탭 문자를, \n
은 줄바꿈 문자를 나타냅니다.
이스케이프 시퀀스
이스케이프 시퀀스 또는 이스케이프 문자는 파이썬과 많은 다른 프로그래밍 언어에서 문자열 내에서 특수한 문자나 동작을 나타내기 위해 사용되는 문자 조합입니다. 이스케이프 문자는 백슬래시(\
)로 시작하며, 백슬래시 뒤에 오는 문자와 함께 특정 동작이나 문자를 나타냅니다.
다음은 파이썬에서의 몇몇 대표적인 이스케이프 문자들입니다:
\n
: 새 줄 (개행 문자)\t
: 탭 문자\\
: 백슬래시 자체를 나타냅니다. (예: "C:\Program Files")\"
: 큰따옴표를 나타냅니다.\'
: 작은따옴표를 나타냅니다.
예시:
print("Hello\nWorld!") # 출력: Hello
# World!
print("Hello\tWorld!") # 출력: Hello World!
print("He said, \"Hello World!\"") # 출력: He said, "Hello World!"
print('It\'s a beautiful day!') # 출력: It's a beautiful day!
print("Backslash: \\") # 출력: Backslash: \
이와 같이 이스케이프 문자는 문자열 내에서 특수 문자나 동작을 표현할 때 사용되며, 문자열을 처리할 때 자주 사용됩니다.
f-문자열
Multi-line Strings 안에는 문자열 포맷팅을 적용할 수 있습니다. f-문자열
을 사용하면 Multi-line Strings 안에서 변수를 쉽게 사용할 수 있습니다.
name = "홍길동"
age = 30
c = f'''이것은 여러 줄의 문자열입니다.
이름은 {name}입니다.
나이는 {age}살입니다.'''
print(c)
위 코드에서 f-문자열
을 사용하여 Multi-line Strings 안에 변수 값을 삽입했습니다. f-문자열
을 사용하면 변수를 더욱 쉽게 문자열에 삽입할 수 있습니다.
이상으로 파이썬에서 여러 줄의 문자열을 표현하는 Multi-line Strings에 대해 간단히 설명해보았습니다.
불(불리언) 자료형
불은 True와 False 두 가지 값 중 하나를 가지는 자료형입니다. 파이썬에서는 불리언 자료형을 나타낼 때, True와 False 키워드를 사용합니다.
NOTE
박용준 강사의 강의에서는 불
을 기준으로 불리언
용어를 혼용해서 같은 표현으로 사용하겠습니다
a = True # 참을 나타내는 불리언 값
b = False # 거짓을 나타내는 불리언 값
아직 배우지 않은 내용이지만, 불리언 자료형은 비교 연산자를 사용할 때 자주 사용됩니다. 비교 연산자는 두 값을 비교하여 True 또는 False를 반환하는 연산자입니다.
a = 10
b = 20
print(a == b) # False
print(a != b) # True
print(a < b) # True
print(a > b) # False
print(a <= b) # True
print(a >= b) # False
TIP
프로그래밍 언어에서 사용되는 "불리언" (Boolean) 개념의 유래는 19세기의 영국 수학자 George Boole의 작업에 기반합니다. George Boole은 논리적 명제를 대수적으로 표현하려는 시도로 불 대수 (Boolean algebra)라는 체계를 개발했습니다.
George Boole의 불 대수는 논리 연산 (AND, OR, NOT 등)을 정의하며, 이 연산들은 오직 두 가지 상태만을 가지는 값 (예: 참 혹은 거짓) 사이에서 수행됩니다. 이러한 대수적 표현은 논리적 명제와 추론을 정형화하고 분석할 수 있게 만들었습니다.
20세기에 들어서, 불 대수는 전기 및 전자 공학에서 디지털 회로 설계의 기초로 사용되기 시작했습니다. 특히, 논리 게이트 (예: AND 게이트, OR 게이트, NOT 게이트)는 불 대수의 원칙에 기반하여 작동합니다. 이후에, 불 대수는 컴퓨터 과학의 핵심 개념으로 자리잡게 되었습니다.
불리언 데이터 타입은 프로그래밍 언어에서 두 가지 값 (주로 True
와 False
또는 1
과 0
)만을 표현할 수 있는 데이터 타입으로 정의됩니다. 대부분의 프로그래밍 언어는 불리언 타입을 기본 제공하며, 이는 조건문, 반복문, 논리 연산 등 여러 프로그래밍 작업에서 핵심적으로 활용됩니다.
요약하면, 프로그래밍 언어에서의 불리언 개념은 George Boole의 불 대수에 기반을 두며, 이는 디지털 컴퓨팅 및 프로그래밍의 핵심적인 구성요소로 자리잡게 되었습니다.
None 자료형
None은 파이썬에서 값이 없음을 나타내는 객체입니다. None은 불리언 자료형에서 False와 같이 동작합니다. None은 NoneType 클래스의 객체이며, None은 오직 하나만 존재합니다.
다음 예시 코드는 아직 배우지 않은 if 문이 나오므로 참고용으로 보세요. None 데이터 형식을 비교할 때에는 is
연산자를 사용합니다.
a = None
if a is None:
print('a is None')
else:
print('a is not None')
is
와 is not
연산자 소개
is
와 is not
은 파이썬에서 제공하는 두 개의 항등 연산자입니다. 이들은 두 개체의 아이덴티티를 비교하는 데 사용됩니다. 여기서 아이덴티티란 개체의 메모리 내 주소를 의미합니다.
is 연산자: 두 객체가 동일한 객체인지 확인합니다.
- 예: `a is b`는
a
와b
가 동일한 객체를 참조하면True
를 반환합니다.
- 예: `a is b`는
is not 연산자: 두 객체가 동일하지 않은 객체인지 확인합니다.
- 예: `a is not b`는
a
와b
가 다른 객체를 참조하면True
를 반환합니다.
- 예: `a is not b`는
이 연산자들은 주로 None
을 검사할 때 유용하게 사용됩니다. 예를 들어, 변수가 None
인지 확인하려면 `if x is None:`과 같이 사용합니다.
하지만 is
와 is not
연산자를 값의 동등성 비교에 사용하는 것은 올바르지 않습니다. 값의 동등성 비교를 위해서는 ==
와 !=
연산자를 사용해야 합니다.
# 리스트를 두 번 할당합니다.
a = [1, 2, 3]
b = [1, 2, 3]
# a와 b는 값은 같지만, 서로 다른 메모리 주소를 가지고 있습니다.
print(a == b) # True - 값의 동등성 비교
print(a is b) # False - 항등 비교
# 동일한 객체에 대한 참조를 생성합니다.
c = a
print(a is c) # True
컬렉션
파이썬에서는 다양한 종류의 데이터를 다루기 위해 리스트, 튜플, 세트(set), 사전(dictionary) 등의 데이터 타입을 제공합니다. 이들 데이터 타입은 서로 다른 특징과 용도를 가지고 있으며, 각각의 특징을 이용하여 프로그램을 구현할 수 있습니다.
리스트(List)
리스트는 가장 일반적인 시퀀스(sequence) 자료형으로, 여러 개의 요소(element)를 담을 수 있습니다. 대괄호([])로 표시되며, 각 요소는 쉼표(,)로 구분됩니다. 리스트는 여러 가지 자료형을 포함할 수 있으며, 요소의 자료형이 일치할 필요는 없습니다. 리스트는 수정 가능한(mutable) 자료형입니다.
다음 코드를 한 번 정도만 실행해 본 후 다음으로 넘어가세요.
# 리스트 생성
fruits = ["apple", "banana", "cherry", "date"]
print(fruits)
# 리스트에 항목 추가
fruits.append("elderberry")
print(fruits) # ['apple', 'banana', 'cherry', 'date', 'elderberry']
# 특정 위치에 항목 삽입
fruits.insert(1, "blueberry")
print(fruits) # ['apple', 'blueberry', 'banana', 'cherry', 'date', 'elderberry']
# 리스트에서 항목 제거
fruits.remove("date")
print(fruits) # ['apple', 'blueberry', 'banana', 'cherry', 'elderberry']
# 인덱스를 사용하여 리스트 항목에 접근
print(fruits[0]) # apple
print(fruits[-1]) # elderberry
# 리스트 슬라이싱
print(fruits[1:4]) # ['blueberry', 'banana', 'cherry']
# 리스트의 길이 확인
print(len(fruits)) # 5
파이썬에서 빈 리스트에 항목 추가하기
파이썬의 append()
메서드를 사용하면 리스트에 쉽게 항목을 추가할 수 있습니다. 아래는 빈 리스트에 append()
를 사용하여 항목을 추가하는 간단한 예제입니다.
# 빈 리스트 생성
my_list = []
# 항목 추가
my_list.append('apple')
my_list.append('banana')
my_list.append('cherry')
# 리스트 출력
print(my_list)
출력 결과는 다음과 같습니다:
['apple', 'banana', 'cherry']
이 예제에서는 초기에 빈 리스트 my_list
를 생성한 후, append()
메서드를 사용하여 여러 과일 이름을 항목으로 추가했습니다.
정보처리기능사 실기 문제: 이차원 리스트 순회
파일명: list_iteration.py
다음은 Python을 사용하여 이차원 리스트를 순회하고 특정 요소를 출력하는 코드의 예제입니다. 이 코드는 이차원 리스트의 구조를 이해하고, 중첩된 반복문을 사용하여 모든 요소를 순회하는 방법을 보여줍니다.
lol = [[1,2,3], [4,5], [6,7,8,9]]
print(lol[0])
print(lol[2][1])
for sub in lol:
for item in sub:
print(item, end=' ')
print()
문제 설명:
- 위
list_iteration.py
파일에 작성된 코드를 실행했을 때의 출력 결과를 예측하세요. - 코드는 먼저
lol
리스트의 첫 번째 하위 리스트를 출력합니다. 그 다음, 세 번째 하위 리스트의 두 번째 요소를 출력합니다. - 이후에는 모든 하위 리스트의 모든 요소를 순회하며 출력하는 반복문이 수행됩니다. 각 요소는 공백으로 구분되어 출력되고, 하위 리스트의 모든 요소가 출력된 후에는 새 줄로 넘어갑니다.
정답 예측:
- 첫 번째
print
문에 의해[1, 2, 3]
이 출력됩니다. - 두 번째
print
문에 의해7
이 출력됩니다. - 반복문에 의해 순서대로 모든 요소가 공백으로 구분되어 출력되며, 각 하위 리스트의 요소들이 출력된 후에는 새 줄로 넘어갑니다. 따라서 출력 결과는 다음과 같습니다:
[1, 2, 3] 7 1 2 3 4 5 6 7 8 9
이 문제는 이차원 리스트의 접근 방법과 중첩된 반복문을 사용하여 리스트의 모든 요소를 효과적으로 순회하는 방법을 이해하는 데 중점을 둡니다.
튜플(Tuple)
튜플은 리스트와 비슷한 시퀀스(sequence) 자료형으로, 여러 개의 요소(element)를 담을 수 있습니다. 대괄호([]
) 대신 괄호(()
)로 표시됩니다. 리스트와는 달리, 한 번 생성된 튜플은 요소를 변경할 수 없으므로 수정 불가능한(immutable) 자료형입니다. 하지만 리스트보다 처리 속도가 빠르고 메모리를 적게 사용합니다.
다음은 튜플에 관한 몇 가지 예제입니다:
- 기본 튜플 생성
my_tuple = (1, 2, 3, 4, 5)
print(my_tuple) # 출력: (1, 2, 3, 4, 5)
- 튜플 항목 접근
print(my_tuple[2]) # 출력: 3
- 튜플 슬라이싱
print(my_tuple[1:4]) # 출력: (2, 3, 4)
- 튜플 길이
print(len(my_tuple)) # 출력: 5
- 튜플 내의 튜플 (nested tuple)
nested_tuple = (1, 2, (3, 4, 5), 6, 7)
print(nested_tuple[2]) # 출력: (3, 4, 5)
print(nested_tuple[2][1]) # 출력: 4
- 튜플이 immutable함을 확인
# 아래 코드는 오류를 발생시킵니다.
# my_tuple[2] = 10
튜플은 함수에서 여러 값을 한번에 반환할 때, 데이터의 변경을 원하지 않을 때, 혹은 딕셔너리의 키로 사용할 때 유용합니다.
시퀀스 데이터 형식
파이썬은 다양한 데이터 유형을 제공하며, 그 중 시퀀스 데이터 형식은 여러 값을 순서대로 저장하고 관리하는 데 주로 사용됩니다. 이 아티클에서는 파이썬의 주요 시퀀스 데이터 형식을 간략하게 살펴보겠습니다.
1. 리스트(List)
- 대표 기호:
[]
- 특징: 가변적이며, 항목의 추가, 삭제, 수정이 가능하다.
fruits = ['apple', 'banana', 'cherry']
fruits.append('date')
2. 튜플(Tuple)
- 대표 기호:
()
- 특징: 불변적이다. 한 번 생성하면 내부 요소를 변경할 수 없다.
coordinates = (10, 20)
3. 문자열(String)
- 대표 기호:
''
또는""
- 특징: 문자의 나열로, 불변적이다.
greeting = "Hello, World!"
4. 시퀀스 공통 연산
모든 시퀀스 데이터 형식은 다음과 같은 공통 연산을 지원합니다.
- 인덱싱:
seq[index]
- 슬라이싱:
seq[start:end]
- 길이 확인:
len(seq)
- 멤버 체크:
x in seq
마치며
시퀀스 데이터 형식은 파이썬의 핵심적인 부분으로, 데이터를 효과적으로 관리하고 조작하기 위해 필수적입니다. 상황과 필요에 따라 적절한 시퀀스 형식을 선택하여 사용하면 파이썬 프로그래밍이 더욱 간편해집니다.
파이썬에서 시퀀스 데이터의 슬라이싱
파이썬은 데이터를 쉽게 처리하고 조작할 수 있는 다양한 방법을 제공합니다. 시퀀스 데이터의 한 가지 핵심 기능은 '슬라이싱'입니다. 슬라이싱을 통해 시퀀스의 일부분을 쉽게 추출하거나 변경할 수 있습니다.
시퀀스 데이터는 순서대로 나열된 데이터를 말합니다. 파이썬에서 대표적인 시퀀스 데이터 유형에는 문자열(string), 리스트(list), 튜플(tuple) 등이 있습니다.
시퀀스 데이터를 슬라이싱하려면 다음과 같은 문법을 사용합니다:
sequence[start:stop:step]
start
: 시작 인덱스. 생략하면 0부터 시작.stop
: 종료 인덱스. 이 인덱스는 포함되지 않습니다.step
: 스텝(간격). 생략하면 1씩 증가.
# 문자열 슬라이싱
str_val = "Hello, World!"
print(str_val[0:5]) # 출력: Hello
print(str_val[7:]) # 출력: World!
print(str_val[::2]) # 출력: Hlo ol!
# 리스트 슬라이싱
list_val = [0, 1, 2, 3, 4, 5]
print(list_val[1:4]) # 출력: [1, 2, 3]
print(list_val[:3]) # 출력: [0, 1, 2]
print(list_val[::2]) # 출력: [0, 2, 4]
리스트 같은 변경 가능한 시퀀스 데이터에서는 슬라이싱을 통해 값을 수정할 수 있습니다.
list_val = [0, 1, 2, 3, 4, 5]
list_val[1:4] = ['a', 'b', 'c']
print(list_val) # 출력: [0, 'a', 'b', 'c', 4, 5]
슬라이싱에 마이너스 값을 사용할 수도 있습니다. 다음 코드를 간단히 실행해본 후 넘어갑니다.
# 리스트 예제
lst = [0, 1, 2, 3, 4, 5]
# 마지막 원소 가져오기
print(lst[-1]) # 출력: 5
# 마지막에서 두 번째 원소 가져오기
print(lst[-2]) # 출력: 4
# 끝에서 세 번째 원소부터 마지막 원소까지 슬라이스
print(lst[-3:]) # 출력: [3, 4, 5]
# 끝에서 첫 번째 원소부터 끝에서 네 번째 원소까지 역순으로 슬라이스
print(lst[:-4:-1]) # 출력: [5, 4, 3]
# 전체 리스트를 역순으로 가져오기
print(lst[::-1]) # 출력: [5, 4, 3, 2, 1, 0]
# 문자열 예제
s = "Hello"
# 마지막 문자 가져오기
print(s[-1]) # 출력: o
# 전체 문자열을 역순으로 가져오기
print(s[::-1]) # 출력: olleH
다음은 인덱스를 생략한 슬라이싱의 예제들입니다:
# 리스트 예제
lst = [0, 1, 2, 3, 4, 5]
# 시작 인덱스 생략: 처음부터 슬라이스
print(lst[:3]) # 출력: [0, 1, 2]
# 종료 인덱스 생략: 지정한 인덱스부터 끝까지 슬라이스
print(lst[3:]) # 출력: [3, 4, 5]
# 시작과 종료 인덱스 모두 생략: 전체 리스트 슬라이스
print(lst[:]) # 출력: [0, 1, 2, 3, 4, 5]
# 문자열 예제
s = "Hello"
# 시작 인덱스 생략: 처음부터 슬라이스
print(s[:3]) # 출력: "Hel"
# 종료 인덱스 생략: 지정한 인덱스부터 끝까지 슬라이스
print(s[2:]) # 출력: "llo"
# 시작과 종료 인덱스 모두 생략: 전체 문자열 슬라이스
print(s[:]) # 출력: "Hello"
다음은 len()
함수를 슬라이싱과 함께 사용한 예제들입니다:
# 리스트 예제
lst = [0, 1, 2, 3, 4, 5]
# 리스트의 마지막 원소 가져오기
print(lst[len(lst)-1]) # 출력: 5
# 리스트의 끝에서 두 번째 원소 가져오기
print(lst[len(lst)-2]) # 출력: 4
# 리스트의 뒤에서 세 개의 원소 슬라이스
print(lst[len(lst)-3:]) # 출력: [3, 4, 5]
# 문자열 예제
s = "Hello"
# 문자열의 마지막 문자 가져오기
print(s[len(s)-1]) # 출력: o
# 문자열의 처음부터 마지막 문자 전까지 슬라이스
print(s[:len(s)-1]) # 출력: "Hell"
정보처리기능사 실기 문제: 문자열 조작 및 결합
파일명: string_manipulation.py
다음 Python 코드는 주어진 문자열 a
에서 특정 부분을 추출하고, 이를 다른 문자열과 결합하여 새로운 문자열을 생성한 후 출력하는 예제입니다.
a = "REMEMBER NOVEMBER"
b = a[0:3] + a[12:16]
c = "R AND %s" % "STR"
print(b + c)
문제 설명:
- 위
string_manipulation.py
파일에 작성된 코드를 실행했을 때의 출력 결과를 예측하세요. - 문자열
a
에서 첫 세 글자("REM"
)과 13번째부터 16번째 글자("EMBER"
)를 추출하여b
에 저장합니다. - 문자열
c
는 형식화 문자열을 사용하여"R AND STR"
을 생성합니다. - 최종적으로
b
와c
를 결합하여 출력합니다.
정답 예측:
- 출력 결과는
"REMEMBER AND STR"
입니다. 이는b
에서"REM"
과"EMBER"
를 추출하고, 이를"R AND STR"
와 결합한 결과입니다.
이 문제는 문자열 슬라이싱, 문자열 결합, 그리고 형식화 문자열을 활용하는 방법을 이해하는 데 중점을 둡니다.
세트(Set)
세트는 순서 없는(unordered) 집합(set)을 나타내는 자료형입니다. 중복된 요소를 포함하지 않으며, 산술 연산(합집합, 교집합, 차집합 등)을 지원합니다. 중괄호({})를 사용하여 셋을 생성합니다.
사전(Dictionary)
사전은 키(key)와 값(value)의 쌍으로 이루어진 자료형입니다. 각 키는 유일해야 하며, 값은 중복이 가능합니다. 중괄호({})를 사용하여 사전을 생성하며, 키와 값은 콜론(:)으로 구분합니다.
# 리스트 예제
my_list = [1, 2, 3, 'four', 'five']
print(my_list)
# 튜플 예제
my_tuple = (1, 2, 3, 'four', 'five')
print(my_tuple)
# 셋 예제
my_set = {1, 2, 3, 3, 'four', 'five'}
print(my_set)
# 사전 예제
my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}
print(my_dict)
위 코드에서 my_list는 리스트를, my_tuple은 튜플을, my_set은 셋을, my_dict는 사전을 생성합니다. 각각의 데이터 타입을 출력하여 확인합니다.
변수의 자료형 알아내기
파이썬에서는 type()
함수를 사용하여 변수의 자료형을 알아낼 수 있습니다. type()
함수는 변수를 인자로 받아, 해당 변수의 자료형을 반환합니다.
a = 123 # 정수형 변수
b = 3.14 # 실수형 변수
c = 'Hello, World!' # 문자열 변수
print(type(a)) # <class 'int'>
print(type(b)) # <class 'float'>
print(type(c)) # <class 'str'>
파이썬에서는 변수의 자료형이 동적으로 결정됩니다. 따라서, 변수에 할당된 값에 따라 자료형이 변경될 수 있습니다.
a = 123 # 정수형 변수
print(type(a)) # <class 'int'>
a = 3.14 # 실수형 변수로 변경
print(type(a)) # <class 'float'>
a = 'Hello, World!' # 문자열 변수로 변경
print(type(a)) # <class 'str'>
파이썬에서는 isinstance()
함수를 사용하여 변수가 지정한 자료형인지 확인할 수 있습니다. isinstance()
함수는 변수와 자료형을 각각 첫 번째와 두 번째 인자로 받아, 해당 변수가 지정한 자료형이면 True를 반환합니다.
a = 123 # 정수형 변수
b = 3.14 # 실수형 변수
c = 'Hello, World!' # 문자열 변수
print(isinstance(a, int)) # True
print(isinstance(b, float)) # True
print(isinstance(c, str)) # True
파이썬에서 deque 사용하기
deque
는 파이썬의 collections
모듈의 일부로, 양방향 큐로 사용될 수 있습니다.
deque 생성
from collections import deque
# deque 생성
d = deque()
# 오른쪽에 항목 추가
d.append('a')
d.append('b')
# 왼쪽에 항목 추가
d.appendleft('c')
print(d) # 출력: deque(['c', 'a', 'b'])
deque에서 항목 제거
# 오른쪽 끝의 항목 제거
d.pop()
# 왼쪽 끝의 항목 제거
d.popleft()
print(d) # 출력: deque(['c'])
deque의 회전
d = deque(['a', 'b', 'c', 'd'])
# 오른쪽으로 2개의 항목 회전
d.rotate(2)
print(d) # 출력: deque(['c', 'd', 'a', 'b'])
# 왼쪽으로 2개의 항목 회전
d.rotate(-2)
print(d) # 출력: deque(['a', 'b', 'c', 'd'])
deque
는 이 외에도 다양한 메소드와 기능을 제공합니다. 공식 문서에서 더 많은 정보를 얻을 수 있습니다.
데이터 타입 변환 함수
파이썬의 데이터 타입 변환 함수에 대해 간단히 소개하겠습니다.
파이썬에서는 데이터 타입 간에 변환이 필요한 경우가 많이 있습니다. 이 때 사용할 수 있는 함수들이 있으며, 각 함수는 다음과 같은 역할을 수행합니다.
- int(): 문자열을 정수형으로 변환합니다.
a = '100'
b = int(a)
print(b) # 출력 결과: 100
- float(): 문자열을 실수형으로 변환합니다.
a = '3.14'
b = float(a)
print(b) # 출력 결과: 3.14
- str(): 정수나 실수를 문자열로 변환합니다.
a = 100
b = str(a)
print(b) # 출력 결과: '100'
a = 3.14
b = str(a)
print(b) # 출력 결과: '3.14'
- bool(): 값을 불리언 값으로 변환합니다.
a = 0
b = bool(a)
print(b) # 출력 결과: False
a = 100
b = bool(a)
print(b) # 출력 결과: True
- list(): 문자열, 튜플, 세트, 딕셔너리 등을 리스트로 변환합니다.
a = 'hello'
b = list(a)
print(b) # 출력 결과: ['h', 'e', 'l', 'l', 'o']
a = (1, 2, 3)
b = list(a)
print(b) # 출력 결과: [1, 2, 3]
- tuple(): 리스트, 문자열, 세트, 딕셔너리 등을 튜플로 변환합니다.
a = [1, 2, 3]
b = tuple(a)
print(b) # 출력 결과: (1, 2, 3)
a = 'hello'
b = tuple(a)
print(b) # 출력 결과: ('h', 'e', 'l', 'l', 'o')
- set(): 리스트, 문자열, 튜플, 딕셔너리 등을 세트로 변환합니다.
a = [1, 2, 3]
b = set(a)
print(b) # 출력 결과: {1, 2, 3}
a = 'hello'
b = set(a)
print(b) # 출력 결과: {'l', 'h', 'o', 'e'}
- dict(): 리스트, 튜플 등을 딕셔너리로 변환합니다.
a = [('name', 'John'), ('age', 30)]
b = dict(a)
print(b) # 출력 결과: {'name': 'John', 'age': 30}
이상으로 파이썬의 데이터 타입 변환 함수에 대해 간단히 살펴보았습니다.
파이썬 문자열 포맷팅
파이썬의 문자열 포맷팅에 대해 설명드리겠습니다.
문자열 포맷팅은 문자열 안에 변수 값을 삽입하는 방법입니다. 파이썬에서는 문자열 포맷팅을 위해 %
연산자나 format()
함수를 사용할 수 있습니다.
%
연산자를 사용한 문자열 포맷팅
%
연산자를 사용하여 문자열 안에 변수 값을 삽입할 수 있습니다. 이 때 % 연산자 뒤에 전달하는 값은 변수 값이 들어갈 위치에 따라 다릅니다.
name = "홍길동"
age = 30
print("이름: %s, 나이: %d" % (name, age))
위 코드에서 %s
는 문자열 형식의 변수를 나타내고, %d
는 정수형 변수를 나타냅니다. %
연산자 뒤에 전달하는 값은 변수 값이 들어갈 위치에 따라서, 해당 변수의 자료형과 일치하는 포맷 문자열을 사용해야 합니다.
format()
함수를 사용한 문자열 포맷팅
format()
함수를 사용하여 문자열 안에 변수 값을 삽입할 수 있습니다.
name = "홍길동"
age = 30
print("이름: {}, 나이: {}".format(name, age))
위 코드에서 {}
는 변수 값이 들어갈 위치를 나타냅니다. format()
함수를 호출할 때 전달하는 인자는 변수 값이 들어갈 순서대로 나열됩니다. 인덱스를 사용하여 전달하는 인자의 순서를 변경할 수도 있습니다.
name = "홍길동"
age = 30
print("이름: {1}, 나이: {0}".format(age, name))
위 코드에서 {}
안에 숫자를 넣으면, 인덱스를 지정할 수 있습니다.
f-
문자열
f-
문자열은 문자열 안에 변수 값을 삽입하는 가장 최신의 방법입니다. f-
문자열을 사용하면, 문자열 안에서 직접 변수 이름을 사용할 수 있습니다.
name = "홍길동"
age = 30
print(f"이름: {name}, 나이: {age}")
위 코드에서 f-
문자열은 문자열 앞에 f
접두어를 붙이면 됩니다. f-
문자열을 사용하면, 문자열 안에서 변수 값을 직접 참조할 수 있어 코드를 보다 직관적으로 작성할 수 있습니다.
사용자로부터 값을 입력 받기
파이썬에서 input() 함수는 사용자로부터 입력을 받는 함수입니다. 사용자가 입력한 값을 문자열로 반환합니다.
input() 함수를 사용하는 방법은 매우 간단합니다. 다음과 같은 방식으로 사용자로부터 입력을 받을 수 있습니다.
name = input("이름을 입력하세요: ")
위 코드에서 input() 함수는 사용자로부터 입력을 받는 창을 띄우고, "이름을 입력하세요: "라는 메시지를 표시합니다. 사용자가 이름을 입력하면, 이를 name 변수에 문자열로 저장합니다.
input() 함수로 입력받은 값은 항상 문자열(string)입니다. 만약, 정수나 실수와 같은 숫자형 데이터를 입력받고자 한다면, int() 함수나 float() 함수를 사용하여 숫자형으로 변환해주어야 합니다.
age = input("나이를 입력하세요: ")
age = int(age) # 문자열을 정수형으로 변환
위 코드에서 age 변수에 입력받은 문자열을 정수형으로 변환하여 저장합니다.
또한, input() 함수는 문자열 이외에도 다양한 자료형을 입력받을 수 있습니다. 예를 들어, 리스트나 튜플 등을 입력받고자 한다면, 다음과 같은 방식으로 입력받을 수 있습니다.
# 리스트 입력받기
numbers = input("숫자를 입력하세요: ").split()
numbers = [int(num) for num in numbers]
# 튜플 입력받기
name, age = input("이름과 나이를 입력하세요: ").split()
age = int(age)
이상으로 input() 함수에 대해 간단히 살펴보았습니다.
map 함수와 input 함수 함께 사용하기
위 코드에서 split() 함수는 입력받은 문자열을 공백을 기준으로 나누어 리스트나 튜플 형태로 저장합니다. 이후, 리스트나 튜플의 요소들을 숫자형으로 변환하여 저장합니다.
파이썬에서 input() 함수를 사용하여 사용자로부터 콘솔 입력을 받을 수 있습니다. 이때, input() 함수는 사용자로부터 입력받은 값을 문자열로 반환합니다.
map() 함수는 리스트의 모든 요소에 대해 지정한 함수를 적용한 결과를 반환하는 함수입니다. map() 함수는 여러 개의 인자를 받을 수 있으며, 첫 번째 인자는 적용할 함수이고, 나머지 인자는 적용할 요소를 담은 리스트입니다.
따라서, input() 함수로 입력받은 문자열을 split() 함수를 사용하여 분리한 후, map() 함수를 사용하여 각 요소를 정수형으로 변환한 다음, 변수에 할당할 수 있습니다.
a, b, c = map(int, input('세 개의 정수를 입력하세요: ').split())
print(f'a: {a}, b: {b}, c: {c}')
위 예제에서 input() 함수는 사용자로부터 '세 개의 정수를 입력하세요: '를 출력한 후, 사용자로부터 콘솔 입력을 받습니다. 이후 split() 함수를 사용하여 입력받은 문자열을 공백으로 분리하고, map() 함수를 사용하여 각 요소를 정수형으로 변환합니다. 마지막으로, a, b, c 변수에 각각 할당합니다.
다음은 간단한 예제로, 사용자로부터 두 개의 정수를 입력받아 이들의 합을 출력하는 코드입니다:
a, b = map(int, input("두 개의 정수 입력: ").split())
print(f"{a} + {b} = {a + b}")
위 코드를 실행하면 사용자로부터 두 개의 정수를 입력받고, 해당 정수의 합을 출력합니다.
예를 들어, 사용자가 3 4
를 입력하면, 출력은 3 + 4 = 7
이 됩니다.
3. 연산자
파이썬에서 연산자는 산술 연산, 비교 연산, 논리 연산, 비트 연산 등 다양한 용도로 사용됩니다. 이번 강의에서는 파이썬에서 사용되는 대표적인 연산자에 대해 소개하겠습니다.
산술 연산자
파이썬에서는 다양한 산술 연산자를 제공합니다. 이번 강의에서는 파이썬의 산술 연산자에 대해 알아보도록 하겠습니다.
- 덧셈 연산자(+)
덧셈 연산자는 두 개의 숫자를 더할 때 사용됩니다. 예를 들어, 다음과 같이 두 숫자를 더할 수 있습니다.
a = 10
b = 20
c = a + b
print(c) # 출력 결과: 30
- 뺄셈 연산자(-)
뺄셈 연산자는 두 개의 숫자를 뺄 때 사용됩니다. 예를 들어, 다음과 같이 두 숫자를 뺄 수 있습니다.
a = 20
b = 10
c = a - b
print(c) # 출력 결과: 10
- 곱셈 연산자(*)
곱셈 연산자는 두 개의 숫자를 곱할 때 사용됩니다. 예를 들어, 다음과 같이 두 숫자를 곱할 수 있습니다.
a = 10
b = 20
c = a * b
print(c) # 출력 결과: 200
- 나눗셈 연산자(/)
나눗셈 연산자는 두 개의 숫자를 나눌 때 사용됩니다. 예를 들어, 다음과 같이 두 숫자를 나눌 수 있습니다.
a = 20
b = 10
c = a / b
print(c) # 출력 결과: 2.0
- 나눗셈의 몫 연산자(//)
나눗셈의 몫 연산자는 두 개의 숫자를 나눈 후, 몫을 구할 때 사용됩니다. 예를 들어, 다음과 같이 두 숫자를 나눈 후, 몫을 구할 수 있습니다.
a = 20
b = 3
c = a // b
print(c) # 출력 결과: 6
- 나눗셈의 나머지 연산자(%)
나눗셈의 나머지 연산자는 두 개의 숫자를 나눈 후, 나머지를 구할 때 사용됩니다. 예를 들어, 다음과 같이 두 숫자를 나눈 후, 나머지를 구할 수 있습니다.
a = 20
b = 3
c = a % b
print(c) # 출력 결과: 2
- 거듭제곱 연산자(**)
거듭제곱 연산자는 숫자를 제곱할 때 사용됩니다. 예를 들어, 다음과 같이 숫자를 제곱할 수 있습니다.
a = 2
b = 3
c = a ** b
print(c) # 출력 결과: 8
이상으로 파이썬의 산술 연산자에 대해 간단히 알아보았습니다. 연산자를 이용하여 변수에 값을 대입하거나, 연산 결과를 출력하는 등 다양한 활용이 가능합니다. 이외에도 복합 대입 연산자 등 파이썬이 제공하는 다양한 연산자가 있습니다. 이러한 연산자를 효과적으로 활용하여 프로그래밍을 하시면 좀 더 편리하게 작성할 수 있습니다.
표: 산술 연산자
연산자 | 이름 | 설명 | 예제 | 결과 |
---|---|---|---|---|
+ |
덧셈 | 두 수를 더함 | 5 + 3 |
8 |
- |
뺄셈 | 앞의 수에서 뒤의 수를 뺌 | 5 - 3 |
2 |
* |
곱셈 | 두 수를 곱함 | 5 * 3 |
15 |
/ |
나눗셈 | 앞의 수를 뒤의 수로 나눔 (소수 결과 포함) | 5 / 3 |
1.6667 |
// |
몫 | 나눗셈의 몫만 구함 | 5 // 3 |
1 |
% |
나머지 | 나눗셈의 나머지를 구함 | 5 % 3 |
2 |
** |
거듭제곱 | 앞의 수를 뒤의 수만큼 제곱함 | 5 ** 3 |
125 |
할당 연산자(대입 연산자)
파이썬에서의 할당 연산자는 변수에 값을 저장하거나 연산의 결과를 변수에 저장하는데 사용됩니다. 가장 기본적인 할당 연산자는 =
입니다.
예:
x = 5
위 코드는 정수 5
를 변수 x
에 할당합니다.
파이썬은 또한 여러 가지 복합 할당 연산자를 제공하여 변수의 값을 업데이트하는 연산을 간략하게 표현할 수 있습니다. 이러한 연산자들은 다음과 같습니다:
+=
: 가산 및 할당-=
: 감산 및 할당*=
: 곱셈 및 할당/=
: 나눗셈 및 할당**=
: 거듭제곱 및 할당//=
: 몫을 구하고 할당%=
: 나머지를 구하고 할당
예시:
x = 10
x += 5 # x = x + 5와 동일. 결과적으로 x는 15가 됩니다.
x -= 3 # x = x - 3과 동일. 결과적으로 x는 12가 됩니다.
x *= 2 # x = x * 2와 동일. 결과적으로 x는 24가 됩니다.
이와 같이 할당 연산자는 변수의 값을 효율적으로 업데이트하는 데 사용되며, 코드를 간결하게 만들어 줍니다.
두 정수의 곱 계산하기
파일명: multiply_two_numbers.py
# multiply_two_numbers.py
# 사용자로부터 두 개의 정수를 입력 받는다.
x, y = map(int, input("두 개의 정수를 공백으로 구분하여 입력하세요: ").split())
# 두 정수의 곱을 계산한다.
result = x * y
# 계산된 결과를 출력한다.
print(f"{x} 곱하기 {y}는 {result}입니다.")
input()
함수로 사용자로부터 문자열 형태의 입력을 받습니다.split()
메서드를 사용하여 공백 기준으로 문자열을 나눠 리스트로 만듭니다.map()
함수와int
를 사용하여 리스트의 각 요소를 정수로 변환합니다.- 두 개의 변수
x
와y
에 순서대로 할당하여 정수를 저장합니다. - 두 정수
x
와y
의 곱을 계산하고 그 결과를result
변수에 저장합니다. print()
함수와 f-string 형식을 사용하여 두 정수와 그 결과를 출력합니다.
비교 연산자 (관계형 연산자)
비교 연산자는 두 개의 값의 관계를 비교하는 연산자로, 주로 조건문에서 사용됩니다. 파이썬에서는 다음과 같은 비교 연산자를 지원합니다.
- == 연산자는 왼쪽 피연산자와 오른쪽 피연산자가 같으면 참을 반환합니다.
- != 연산자는 왼쪽 피연산자와 오른쪽 피연산자가 다르면 참을 반환합니다.
-
연산자는 왼쪽 피연산자가 오른쪽 피연산자보다 크면 참을 반환합니다.
- < 연산자는 왼쪽 피연산자가 오른쪽 피연산자보다 작으면 참을 반환합니다.
-
= 연산자는 왼쪽 피연산자가 오른쪽 피연산자보다 크거나 같으면 참을 반환합니다.
- <= 연산자는 왼쪽 피연산자가 오른쪽 피연산자보다 작거나 같으면 참을 반환합니다.
비교 연산자는 불리언(Boolean) 값으로 평가됩니다. 예를 들어, x == y는 x와 y가 같으면 참을 반환하며, 그렇지 않으면 거짓을 반환합니다. 이외에도, 문자열과 리스트 같은 시퀀스(sequence) 자료형의 비교도 가능합니다. 이 경우, 시퀀스의 각 원소가 차례로 비교되며, 모든 원소가 같으면 참을 반환합니다.
Boolean은 참(True) 또는 거짓(False) 두 가지 값 중 하나를 가지는 데이터 타입입니다. 파이썬에서는 True와 False라는 예약어를 사용하여 Boolean 값을 표현합니다.
Boolean 값은 비교 연산자나 논리 연산자를 사용하여 생성될 수 있습니다. 다음은 비교 연산자를 사용하여 Boolean 값을 생성하는 예시입니다.
a = 1
b = 2
# a와 b가 같은지 비교
print(a == b) # 출력 결과: False
# a가 b보다 작은지 비교
print(a < b) # 출력 결과: True
# a가 b보다 큰지 비교
print(a > b) # 출력 결과: False
논리 연산자를 사용하여 Boolean 값을 생성하는 예시는 다음과 같습니다.
a = True
b = False
# 논리곱(AND) 연산
print(a and b) # 출력 결과: False
# 논리합(OR) 연산
print(a or b) # 출력 결과: True
# 부정(NOT) 연산
print(not a) # 출력 결과: False
정보처리기능사 실기 문제: 변수 비교
파일명: variable_comparison.py
다음 Python 코드는 두 변수 x
와 y
의 값을 비교하여, 이들이 같은지 다른지를 판별하는 예제입니다.
x, y = 100, 200
print(x==y)
문제 설명:
- 위
variable_comparison.py
파일에 작성된 코드를 실행했을 때의 출력 결과를 예측하세요. - 코드는 두 변수
x
와y
에 각각 100과 200이라는 값을 할당하고, 이 두 변수가 같은 값인지 비교한 결과를 출력합니다.
정답 예측:
- 출력 결과는
False
입니다. 이는x
와y
에 할당된 값이 다르기 때문에, 비교 연산자==
의 결과로False
가 반환됩니다.
이 문제는 변수에 값이 할당되는 방식과 비교 연산자를 사용하여 두 변수의 값이 같은지 다른지를 판별하는 기본적인 프로그래밍 개념을 이해하는 데 중점을 둡니다.
관계연산자.py
다음은 두 개의 변수를 선언하고, 관계 연산자를 사용하여 그 관계를 판단한 결과를 출력하는 예제 코드입니다.
코드: 관계연산자.py
first_num = 3
second_num = 5
greater = first_num > second_num
smaller = first_num < second_num
print(f"first_num = {first_num} second_num = {second_num} "
f"first_num > second_num = {greater} "
f"first_num < second_num = {smaller}")
위 코드에서는 먼저 first_num과 second_num 변수를 선언하고, 각각 3과 5의 값을 대입합니다. 그리고 관계 연산자를 사용하여 두 변수 간의 관계를 판단한 후, 그 결과를 Boolean 자료형의 greater와 smaller 변수에 대입합니다. 마지막으로, print 함수를 사용하여 변수들의 값을 출력합니다.
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
first_num = 3 second_num = 5 first_num > second_num = False first_num < second_num = True
결과에서는 first_num 변수의 값이 second_num 변수의 값보다 작으므로, first_num < second_num은 True가 됩니다. 반면, first_num > second_num은 False가 됩니다. 따라서 greater 변수의 값은 False, smaller 변수의 값은 True가 됩니다.
논리 연산자
논리 연산자는 논리적인 연산을 수행하는 연산자로, 주로 조건문에서 사용됩니다. 파이썬에서는 세 가지 논리 연산자를 지원합니다.
and 연산자는 양쪽 피연산자가 모두 참일 때 참을 반환합니다. 예를 들어, x and y는 x와 y가 모두 참일 때 참을 반환하며, 그렇지 않으면 거짓을 반환합니다.
or 연산자는 양쪽 피연산자 중 하나 이상이 참일 때 참을 반환합니다. 예를 들어, x or y는 x나 y 중 하나 이상이 참일 때 참을 반환하며, 둘 다 거짓인 경우에만 거짓을 반환합니다.
not 연산자는 단항 연산자로, 피연산자가 참이면 거짓을 반환하고, 거짓이면 참을 반환합니다. 예를 들어, not x는 x가 거짓일 때 참을 반환하며, 그렇지 않으면 거짓을 반환합니다.
논리 연산자는 불리언(Boolean) 값 뿐만 아니라, 다른 데이터 타입의 값들도 논리 연산에 사용될 수 있습니다. 예를 들어, 숫자 0은 거짓으로 취급되고, 비어있는 문자열은 거짓으로 취급됩니다. 따라서, if
문에서 논리 연산자를 사용하여 여러 조건을 검사할 수 있습니다.
파이썬 논리 연산자
파이썬에서 사용되는 기본적인 논리 연산자는 and
, or
, 그리고 not
입니다. 이 연산자들은 불리언(Boolean) 표현식의 결과를 결정하는 데 사용됩니다. 아래에 각 연산자에 대한 간단한 설명과 예제를 제공하겠습니다.
1. and
연산자
- 모든 피연산자가
True
일 때만True
를 반환합니다. - 첫 번째 피연산자가
False
라면, 두 번째 피연산자는 확인하지 않고False
를 반환합니다.
print(True and True) # True
print(True and False) # False
print(False and True) # False
print(False and False) # False
2. or
연산자
- 하나 이상의 피연산자가
True
일 때True
를 반환합니다. - 첫 번째 피연산자가
True
라면, 두 번째 피연산자는 확인하지 않고True
를 반환합니다.
print(True or True) # True
print(True or False) # True
print(False or True) # True
print(False or False) # False
3. not
연산자
- 불리언 값을 반대로 바꿉니다. 즉,
True
는False
로,False
는True
로 변환됩니다.
print(not True) # False
print(not False) # True
이러한 논리 연산자들은 다양한 조건문에서 종종 사용됩니다. 예를 들어, 어떤 수가 양수이면서 짝수인지 확인하려면 다음과 같이 코드를 작성할 수 있습니다:
num = 4
if num > 0 and num % 2 == 0:
print(f"{num}은 양수이면서 짝수입니다.")
위의 예제에서 num > 0
과 num % 2 == 0
두 조건 모두 만족해야만 메시지가 출력됩니다.
정보처리산업기사 실기 시험 기출 문제 - 복합 논리 연산식
문제
다음 Python 프로그램이 실행되었을 때의 동작을 설명하고, 출력 결과를 예측하시오.
소스 코드 파일명: complex_logical_operations.py
a = 5
b = 10
c = 15
d = 30
result = 1 if (a * 3 + b > d) or (c - b // a <= d and True) else 0
print(result)
입력 예시
이 프로그램은 입력을 받지 않습니다.
출력 예시
1
해설
이 Python 프로그램은 변수 a
, b
, c
, d
및 result
에 대한 복합 논리 연산식을 이용하여 최종적으로 result
의 값을 결정하고 출력합니다.
- 변수
a
,b
,c
,d
를 각각 5, 10, 15, 30으로 초기화합니다. - 복합 논리 연산식
1 if (a * 3 + b > d) or (c - b // a <= d and True) else 0
는 다음과 같이 해석됩니다:(a * 3 + b > d)
는5 * 3 + 10 > 30
, 즉25 > 30
이므로 거짓(False
)입니다.- Python에서
//
연산자는 정수 나눗셈을 의미합니다. 따라서c - b // a <= d
연산은15 - 10 // 5 <= 30
, 즉15 - 2 <= 30
로 해석되며,13 <= 30
은 참(True
)입니다. - 전체 조건 중 하나라도 참이면 결과는 참입니다. 따라서 조건식은 참이고,
result
에는1
이 할당됩니다.
print(result)
는result
의 값인1
을 출력합니다.
이 프로그램은 Python에서 복합 논리 연산자(or
, and
)와 관계 연산자(>
, <=
)를 사용하여 복잡한 조건을 평가하고, 조건식을 통해 최종적인 불리언 결과를 도출합니다. 이 예제는 조건 연산의 우선 순위와 논리 연산의 결과를 이해하는 데 도움을 줍니다.
비트 연산자
비트 연산자는 이진수를 대상으로 비트(bit) 단위로 논리적인 연산을 수행하는 연산자입니다. 파이썬에서는 다음과 같은 비트 연산자를 지원합니다.
&
비트 AND 연산자는 두 개의 비트가 모두 1일 때 1을 반환합니다.|
비트 OR 연산자는 두 개의 비트 중 하나 이상이 1일 때 1을 반환합니다.^
비트 XOR 연산자는 두 개의 비트가 서로 다를 때 1을 반환합니다.~
비트 NOT 연산자는 피연산자의 모든 비트를 반전시킵니다.<<
비트 왼쪽 시프트 연산자는 피연산자의 비트를 왼쪽으로 이동시킵니다.>>
비트 오른쪽 시프트 연산자는 피연산자의 비트를 오른쪽으로 이동시킵니다.
비트 연산자는 정수 값에 대해 적용됩니다. 예를 들어, a & b는 a와 b의 비트 AND 연산을 수행한 결과를 반환합니다. 이외에도, 비트 연산자는 비트마스크(bitmask) 연산에서 자주 사용됩니다. 비트마스크는 특정 비트를 뽑아내거나, 특정 비트를 설정하거나, 비트를 토글(toggle)하는 등의 작업을 수행할 때 사용됩니다.
정보처리산업기사 실기 시험 기출 문제 - 복합 비트 연산 및 조건식
문제
다음 Python 프로그램이 실행되었을 때의 동작을 설명하고, 출력 결과를 예측하시오.
소스 코드 파일명: complex_bitwise_logical_operations.py
a = 5
b = 9
c = 1 if b % 5 < 5 else 0
c = c | (c << 3)
c = c - a if a < 5 or c >= 10 else c + a
print(c)
입력 예시
이 프로그램은 입력을 받지 않습니다.
출력 예시
14
해설
이 Python 프로그램은 변수 a
, b
, c
에 대한 복합 비트 연산 및 조건식을 이용하여 최종적으로 c
의 값을 결정하고 출력합니다.
- 변수
a
,b
를 각각 5와 9로 초기화합니다. - 조건식을 통해
b % 5 < 5
가 참인 경우c
에1
을 할당합니다. 이 조건은 항상 참이므로c
는1
이 됩니다. c
는 자신과 자신을 3비트 왼쪽으로 이동한 값(c << 3
)과의 비트 OR 연산을 통해 업데이트됩니다. 이로 인해c
는9
가 됩니다.- 이후
(a < 5 or c >= 10)
조건식을 통해a
가 5보다 작거나c
가 10 이상인 경우c
에서a
를 빼고, 그렇지 않으면c
에a
를 더합니다. 이 경우 조건은 거짓이므로c
에a
를 더하여c
는14
가 됩니다. - 마지막으로,
c
의 값을 출력합니다. 따라서 최종 출력값은14
입니다.
이 프로그램은 복합 비트 연산과 조건식을 사용하여 변수의 값을 조작하는 과정을 보여주며, 이러한 연산들이 어떻게 결합되어 최종 결과를 도출하는지를 이해하는 데 도움을 줍니다. Python에서의 비트 연산 및 조건식 사용 방법을 잘 보여주는 예입니다.
퀴즈
- 다음 중 산술 연산자가 아닌 것은 무엇입니까? a. + b. - c. * d. /
정답: d
해설: /는 산술 연산자입니다. 파이썬에서는 정수 나눗셈을 // 연산자로 수행합니다.
- 다음 중 비교 연산자가 아닌 것은 무엇입니까? a. == b. != c. >= d. and
정답: d
해설: and는 논리 연산자입니다. 비교 연산자는 ==, !=, >, <, >=, <= 등이 있습니다.
- 다음 중 할당 연산자가 아닌 것은 무엇입니까? a. = b. += c. -= d. //
정답: d
해설: //는 산술 연산자입니다. 할당 연산자는 =, +=, -=, *=, /= 등이 있습니다.
- 다음 중 논리 연산자가 아닌 것은 무엇입니까? a. and b. or c. not d. xor
정답: d
해설: 파이썬에서는 xor 연산자를 지원하지 않습니다.
- 다음 중 비트 연산자가 아닌 것은 무엇입니까? a. & b. | c. ~ d. +
정답: d
해설: +는 산술 연산자입니다. 비트 연산자는 &, |, ^, ~ 등이 있습니다.
- 다음 중 산술 연산자 중 제곱을 계산하는 연산자는 무엇입니까? a. ** b. ^ c. // d. *
정답: a
해설: 제곱을 계산하는 연산자는 **입니다.
- 다음 중 할당 연산자 중 왼쪽 변수에서 오른쪽 변수를 빼는 연산자는 무엇입니까? a. = b. += c. -= d. *=
정답: c
해설: 왼쪽 변수에서 오른쪽 변수를 빼는 연산자는 -=입니다.
- 다음 중 비교 연산자 중 두 값이 같지 않을 때 True를 반환하는 연산자는 무엇입니까? a. == b. != c. > d. <
정답: b
해설: 두 값이 같지 않을 때 True를 반환하는 연산자는 !=입니다.
- 다음 중 논리 연산자 중 두 값 중 하나라도 True일 때 True를 반환하는 연산자는 무엇입니까? a. and b. or c. not d. xor
정답: b
4. 조건문
if
문
파이썬에서 if
문은 조건식을 판단하여 해당 조건이 참(True)일 경우, 코드 블록을 실행하는 제어문입니다. 이번 강의에서는 파이썬의 if
문에 대해 알아보도록 하겠습니다.
if
문의 기본적인 문법은 다음과 같습니다.
if 조건식:
실행할 코드 블록
위 코드에서 조건식은 참 또는 거짓으로 판단될 수 있는 표현식입니다. 조건식이 참(True)일 경우, 해당 코드 블록이 실행됩니다. 코드 블록은 반드시 들여쓰기를 해야하며, 들여쓰기한 코드 블록은 if
문에 속하는 코드로 간주됩니다.
다음은 if
문의 예제입니다.
a = 10
if a > 0:
print("a는 양수입니다.")
위 코드에서 a가 0보다 크므로 조건식이 참(True)이 됩니다. 따라서, "a는 양수입니다."라는 문자열이 출력됩니다.
파이썬에서의 들여쓰기에 대한 간단 가이드는 다음 문서를 참고하세요. (간단히 읽고 넘어가면 됩니다.)
if-else문
if
문은 조건식이 거짓(False)일 경우, else문을 사용하여 실행할 코드 블록을 지정할 수 있습니다. 다음은 if
문과 else문을 모두 사용한 예제입니다.
a = -10
if a > 0:
print("a는 양수입니다.")
else:
print("a는 음수입니다.")
위 코드에서 a가 0보다 작으므로 조건식이 거짓(False)이 됩니다. 따라서, "a는 음수입니다."라는 문자열이 출력됩니다.
불리언 값
Boolean 값은 조건문(if
문)에서 자주 사용됩니다. 조건문은 Boolean 값이 참(True)인지 거짓(False)인지에 따라 실행할 코드를 결정합니다.
a = 10
if a > 5:
print("a는 5보다 큽니다.")
else:
print("a는 5보다 작거나 같습니다.")
위 코드에서 if
문의 조건식 a > 5
는 참(True)이므로, if
문 다음에 오는 코드 블록이 실행됩니다.
또한, Boolean 값은 함수의 반환 값으로 사용될 수도 있습니다. 예를 들어, bool()
함수는 인자로 전달받은 값을 Boolean 값으로 변환하여 반환합니다.
a = 1
b = 0
print(bool(a)) # 출력 결과: True
print(bool(b)) # 출력 결과: False
이상으로 Boolean에 대한 간단한 소개였습니다.
if-elif-else문
if
문은 조건식이 여러 개일 경우, elif
문을 사용하여 추가적인 조건식을 지정할 수 있습니다. elif
문은 if
문과 else문 사이에 위치하며, 다음과 같은 형식으로 사용합니다.
if 조건식1:
실행할 코드 블록1
elif 조건식2:
실행할 코드 블록2
else:
실행할 코드 블록3
위 코드에서 조건식1이 거짓(False)이면, 조건식2를 검사하여 해당 조건식이 참(True)이면 실행할 코드 블록2를 실행하고, 그렇지 않으면 실행할 코드 블록3을 실행합니다.
다음은 if
문과 elif
문을 모두 사용한 예제입니다.
a = 0
if a > 0:
print("a는 양수입니다.")
elif a == 0:
print("a는 0입니다.")
else:
print("a는 음수입니다.")
위 코드에서 a가 0이므로 elif
문의 조건식이 참(True)이 됩니다. 따라서, "a는 0입니다."라는 문자열이 출력됩니다.
이상으로 파이썬의 if
문에 대해 간단하게 파이썬의 if
문에 대해 살펴보았습니다. if
문은 조건에 따라 프로그램의 실행 흐름을 제어하는 중요한 제어문 중 하나입니다. 이를 활용하여 더욱 다양하고 복잡한 프로그램을 작성할 수 있습니다.
Python if 조건문 퀴즈
if 문 관련 간단한 퀴즈를 풀어보려면 다음 링크를 참고하세요.
정보처리기능사 실기 문제: 조건문을 활용한 값 판별
파일명: value_judgment.py
다음은 Python을 사용하여 변수 x
의 값에 따라 다른 결과를 출력하는 코드의 예제입니다. 이 코드는 조건문을 사용하여 변수의 값을 판별하고, 해당하는 경우에 맞는 메시지를 출력하는 방법을 보여줍니다.
x = 20
if x == 10:
print('10')
elif x == 20:
print('20')
else:
print('other')
문제 설명:
- 위
value_judgment.py
파일에 작성된 코드를 실행했을 때의 출력 결과를 예측하세요. - 변수
x
에는 값20
이 할당되어 있습니다. 이 코드는x
의 값이10
인지,20
인지, 또는 다른 값인지를 판별하여 그에 따른 메시지를 출력합니다.
정답 예측:
- 변수
x
의 값은20
이므로, 조건문은elif x == 20:
조건에 해당하는 분기로 진입합니다. - 따라서 출력 결과는
"20"
입니다.
이 문제는 기본적인 조건문 사용법을 이해하고, 조건에 따라 다른 분기로 코드 실행을 제어할 수 있는 능력을 평가합니다.
파이썬 모듈
파이썬 모듈(module)은 파이썬 코드를 저장한 파일입니다. 모듈을 사용하면 다른 파이썬 코드에서 해당 모듈의 함수, 변수, 클래스 등을 사용할 수 있습니다. 파이썬에서는 다음과 같은 방법으로 모듈을 가져올(import) 수 있습니다.
- import 문은 모듈 전체를 가져옵니다. 예를 들어, import math는 파이썬의 수학 함수를 제공하는 math 모듈을 가져옵니다. 이 경우, math 모듈의 함수를 사용하려면 math.함수이름의 형태로 사용해야 합니다.
- from ... import 문은 모듈에서 특정 함수, 변수, 클래스 등을 가져옵니다. 예를 들어, from math import sqrt는 math 모듈에서 sqrt 함수만을 가져옵니다. 이 경우, sqrt 함수를 바로 사용할 수 있습니다.
- as 키워드는 모듈을 가져올 때, 해당 모듈의 이름을 변경할 수 있습니다. 예를 들어, import math as m은 math 모듈을 m이라는 이름으로 가져옵니다. 이 경우, math 모듈의 함수를 m.함수이름의 형태로 사용할 수 있습니다.
- from ... import * 문은 모듈에서 모든 함수, 변수, 클래스 등을 가져옵니다. 이 경우, 해당 모듈의 모든 이름이 현재 이름 공간에 추가됩니다. 하지만, 이 방법은 모듈에서 충돌하는 이름이 있는 경우 예기치 않은 결과를 초래할 수 있으므로, 권장되지 않습니다.
또한, 파이썬은 내장 모듈과 외부 모듈을 모두 지원합니다. 내장 모듈은 파이썬에 기본으로 포함되어 있는 모듈이며, 외부 모듈은 사용자가 직접 설치해야 하는 모듈입니다. 외부 모듈은 pip를 사용하여 설치할 수 있으며, import 문을 사용하여 가져올 수 있습니다.
파이썬 math 모듈 사용하기
아래는 파이썬에서 모듈을 가져와 사용하는 간단한 예제입니다.
# math 모듈을 가져와서 사용하는 예제
import math
print(math.sqrt(16)) # 16의 제곱근을 출력
# random 모듈에서 randint 함수만 가져와서 사용하는 예제
from random import randint
print(randint(1, 10)) # 1에서 10 사이의 랜덤한 정수를 출력
위 예제에서는 math 모듈과 random 모듈을 사용하였습니다. math 모듈에서는 sqrt 함수를 사용하여 제곱근을 계산하였고, random 모듈에서는 randint 함수를 사용하여 랜덤한 정수를 생성하였습니다. 이와 같이 모듈을 사용하여 다양한 기능을 수행할 수 있습니다.
ramdom 모듈은 뒤에서 더 자세히 다룹니다.
정보처리기능사 실기 문제: 주사위 던지기 시뮬레이션
파일명: dice_simulation.py
다음 Python 코드는 주사위를 100번 던지는 시뮬레이션을 실행하고, 각 숫자가 나온 횟수를 기록하여 출력하는 예제입니다.
import random
hist = [0,0,0,0,0,0]
for i in range(100):
n = random.randrange(1, 7)
hist[n - 1] += 1
i = 0
while i < 6:
print("[%d] = %d" % (i + 1, hist[i]))
i += 1
문제 설명:
- 위
dice_simulation.py
파일에 작성된 코드를 실행했을 때, 출력 결과의 형식을 예측하세요. - 코드는
random
모듈의randrange
함수를 사용하여 1부터 6까지의 정수(주사위의 면) 중 하나를 무작위로 선택합니다. 이 과정을 100번 반복하며, 선택된 숫자에 해당하는hist
리스트의 요소를 1씩 증가시킵니다. - 마지막으로, 각 주사위의 면이 나온 횟수를 출력합니다.
정답 예측:
- 출력 결과는 주사위의 각 면(1부터 6까지)이 나온 횟수를
[면] = 횟수
형식으로 보여줍니다. 예를 들어, 주사위의 '1' 면이 17번 나왔다면, 첫 번째 출력은[1] = 17
과 같이 될 것입니다. - 실행할 때마다 결과는 달라집니다. 따라서 정확한 숫자를 예측하는 것은 불가능하지만, 출력되는 정보의 형식을 알 수 있습니다.
이 문제는 random
모듈을 사용한 무작위 수 생성, 반복문과 조건문을 사용한 간단한 시뮬레이션 실행, 그리고 결과의 기록과 출력 방법을 이해하는 데 중점을 둡니다.
Decimal 형식
파이썬의 Decimal
모듈에 대한 소개입니다.
Decimal
모듈은 고정 소수점 연산을 지원하며, 부동 소수점 연산에 의한 부정확성을 해결하기 위해 사용됩니다. 일반적으로 파이썬에서 부동 소수점 연산을 할 때 정확한 결과를 얻기가 어려울 수 있습니다. 이러한 문제를 해결하기 위해, Decimal
모듈은 소수점 이하의 숫자를 모두 정확하게 처리합니다.
Decimal
모듈을 사용하려면, 먼저 decimal
모듈을 import
해야 합니다. 다음은 decimal
모듈을 import
하는 방법입니다.
import decimal
Decimal
모듈을 사용하여 소수점 이하의 숫자를 정확하게 처리하는 방법은 다음과 같습니다.
import decimal
# Decimal 객체 생성
a = decimal.Decimal('0.1')
b = decimal.Decimal('0.2')
# 덧셈 연산
c = a + b
print(c) # 출력 결과: 0.3
# 곱셈 연산
d = a * b
print(d) # 출력 결과: 0.02
Decimal
객체를 생성할 때, 문자열로 값을 전달해야 합니다. 이는 부동 소수점 연산에 의한 오차를 방지하기 위한 것입니다.
또한, Decimal
모듈은 부동 소수점 값을 Decimal
객체로 변환하는 함수인 decimal.Decimal()
을 제공합니다.
import decimal
a = 0.1
b = 0.2
c = decimal.Decimal(a)
d = decimal.Decimal(b)
print(c + d) # 출력 결과: 0.3
Decimal
모듈은 소수점 이하의 숫자를 정확하게 처리하기 때문에, 매우 정확한 계산을 수행할 수 있습니다. 하지만 이는 부동 소수점 연산보다 느리기 때문에, 성능이 중요한 경우에는 부동 소수점 연산을 사용하는 것이 더 효율적일 수 있습니다.
이상으로 Decimal
모듈에 대한 간단한 소개였습니다.
퀴즈
- 다음 중 조건식에서 비교 연산자가 아닌 것은 무엇입니까? a. == b. != c. <> d. >
정답: c
해설: 파이썬에서는 더 이상 <> 연산자를 지원하지 않습니다.
- 조건문에서 비교 연산자의 역할은 무엇입니까? a. 비교 대상의 값이 같은지를 판단합니다. b. 비교 대상의 값이 다른지를 판단합니다. c. 비교 대상의 크기를 판단합니다. d. 비교 대상의 포함 여부를 판단합니다.
정답: c
해설: 조건문에서 비교 연산자는 비교 대상의 크기를 판단합니다.
- if-else 구문에서 실행할 코드가 한 줄일 때 사용하는 방법은 무엇입니까? a. 조건 표현식 b. 삼항 연산자 c. 람다 함수 d. with 구문
정답: a
해설: if-else 구문에서 실행할 코드가 한 줄일 때는 조건 표현식을 사용할 수 있습니다.
- 다음 중 논리 연산자가 아닌 것은 무엇입니까? a. and b. or c. not d. to
정답: d
해설: to는 파이썬에서 사용되지 않는 연산자입니다.
- 다음 중 조건식에 사용되는 키워드가 아닌 것은 무엇입니까? a. if b. elif c. else d. when
정답: d
해설: when은 파이썬에서 사용되지 않는 키워드입니다.
- 조건문에서 실행할 코드를 감싸는 블록은 무엇입니까? a. if 블록 b. else 블록 c. elif 블록 d. 모든 블록
정답: d
해설: 조건문에서 실행할 코드를 감싸는 블록은 모든 블록(if, else, elif)입니다.
- 조건식에서 여러 개의 조건을 조합할 때 사용하는 키워드는 무엇입니까? a. and b. or c. not d. xor
정답: b
해설: 조건식에서 여러 개의 조건을 조합할 때 사용하는 키워드는 or입니다.
미니 프로젝트: 계산기
계산기는 사용자가 입력한 두 개의 숫자에 대해 사칙연산을 수행하는 프로그램입니다. 이를 파이썬의 if
문을 활용하여 간단하게 구현해볼 수 있습니다. 다음은 계산기의 예제입니다.
num1 = int(input("첫 번째 숫자를 입력하세요: "))
num2 = int(input("두 번째 숫자를 입력하세요: "))
operator = input("사칙연산 중 하나를 선택하세요 (+, -, *, /): ")
if operator == "+":
print(num1 + num2)
elif operator == "-":
print(num1 - num2)
elif operator == "*":
print(num1 * num2)
elif operator == "/":
print(num1 / num2)
else:
print("잘못된 연산자입니다.")
위 코드에서 사용자가 입력한 두 개의 숫자와 연산자를 받아들이고, 입력한 연산자에 따라 해당하는 사칙연산을 수행합니다. 이를 if
문을 활용하여 구현하였습니다.
Python에서 난수 생성하기
난수(random number)는 예측할 수 없는 수를 의미합니다. Python에서는 난수를 생성하기 위한 다양한 방법들이 제공됩니다. 이 아티클에서는 random
모듈을 중심으로 Python에서 난수를 생성하는 방법에 대해 살펴보겠습니다.
1. random
모듈 소개
Python 표준 라이브러리인 random
모듈을 사용하면 다양한 종류의 난수를 쉽게 생성할 수 있습니다.
import random
2. random.random()
: 0과 1 사이의 실수
random()
메서드는 0(포함)과 1(미포함) 사이의 실수를 반환합니다.
print(random.random())
3. random.randint(a, b)
: a와 b 사이의 정수
randint()
메서드는 두 개의 인자, a와 b를 받아 a와 b 사이(둘 다 포함)의 무작위 정수를 반환합니다.
print(random.randint(1, 10)) # 1과 10 사이의 정수
4. random.uniform(a, b)
: a와 b 사이의 실수
uniform()
메서드는 두 개의 인자, a와 b를 받아 a와 b 사이의 무작위 실수를 반환합니다.
print(random.uniform(1.5, 2.5)) # 1.5와 2.5 사이의 실수
5. random.choice(seq)
: 시퀀스에서 임의의 요소 선택
choice()
메서드는 주어진 시퀀스에서 무작위로 한 개의 요소를 선택하여 반환합니다.
colors = ['red', 'blue', 'green', 'yellow']
print(random.choice(colors))
6. random.shuffle(seq)
: 시퀀스의 순서를 무작위로 섞기
shuffle()
메서드는 주어진 시퀀스의 순서를 무작위로 섞습니다.
numbers = [1, 2, 3, 4, 5]
random.shuffle(numbers)
print(numbers)
7. random.sample(population, k)
: 시퀀스에서 k개의 유일한 요소를 무작위로 추출
print(random.sample(range(1, 50), 6)) # 1부터 49까지의 숫자 중 6개를 무작위로 추출
마무리
Python의 random
모듈은 간단하면서도 강력한 난수 생성 기능들을 제공합니다. 상황에 따라 적절한 메서드를 선택하여 원하는 범위와 형태의 난수를 쉽게 생성할 수 있습니다.
5. 반복문
range()
함수
파이썬에서 range() 함수는 정수를 생성하는 함수입니다. range() 함수는 일정 범위의 연속된 정수를 생성하며, 시작 값, 끝 값, 증감 값 등을 인수로 받을 수 있습니다. range() 함수를 사용하면 매우 큰 범위의 정수를 생성할 수 있습니다.
range() 함수의 사용법은 다음과 같습니다.
range(start, stop, step)
- start: 정수의 시작 값을 지정합니다. 기본값은 0입니다.
- stop: 정수의 끝 값을 지정합니다. 이 값은 범위에 포함되지 않습니다. 즉, 범위에는 stop - 1까지의 정수가 포함됩니다.
- step: 정수의 증감 값을 지정합니다. 기본값은 1입니다.
range() 함수는 생성한 정수 값을 리스트(list)나 튜플(tuple) 형태로 반환할 수 있습니다.
numbers = list(range(5)) # [0, 1, 2, 3, 4] 출력
even_numbers = tuple(range(0, 10, 2)) # (0, 2, 4, 6, 8) 출력
위 예제에서는 range() 함수를 사용하여 0부터 4까지의 정수 값을 리스트로 생성하였고, 0부터 8까지 2씩 증가하는 값들을 튜플로 생성하였습니다. range() 함수는 반복문과 함께 자주 사용되며, 매우 큰 범위의 정수를 생성할 때 유용합니다.
정보처리기능사 실기 문제: 비트 연산 및 반복문
파일명: bitwise_operation.py
다음 Python 코드는 변수 a
의 값을 오른쪽으로 비트 시프트(>>
) 연산한 후, 결과에 1을 더하는 연산을 반복문을 통해 수행하고, 최종 결과를 출력하는 예제입니다.
a = 100
result = 0
for i in range(1,3):
result = a >> i
result = result + 1
print(result)
문제 설명:
- 위
bitwise_operation.py
파일에 작성된 코드를 실행했을 때의 출력 결과를 예측하세요. - 초기값
a
는 100으로 설정되어 있으며,for
반복문을 사용해 1부터 2까지 반복하면서 비트 시프트 연산을 수행합니다. 각 반복에서a
를 오른쪽으로i
비트만큼 시프트한 후, 결과에 1을 더합니다.
정답 예측:
- 첫 번째 반복에서
a
를 오른쪽으로 1비트 시프트하면50
이 되고, 여기에 1을 더하면51
이 됩니다. - 두 번째 반복에서
a
를 오른쪽으로 2비트 시프트하면25
이 되고, 여기에 1을 더하면26
이 됩니다. - 따라서 최종 출력 결과는
26
입니다.
이 문제는 비트 시프트 연산자를 이해하고, 반복문 내에서 연산 결과를 업데이트하는 방법을 평가합니다.
while문
파이썬에서 while 문은 반복문의 일종으로, 조건이 참(True)인 경우에 코드 블록을 반복적으로 실행합니다. while 문은 조건이 거짓(False)이 되거나, break 문을 만나면 반복을 중지합니다.
while 문의 구조는 다음과 같습니다.
while 조건:
실행할 코드
while 문은 조건이 참인 동안 반복적으로 실행할 코드를 실행합니다. 코드 블록은 반드시 들여쓰기로 구분해야 합니다. 예를 들어, 아래 코드는 0부터 9까지의 정수를 출력하는 예제입니다.
i = 0
while i < 10:
print(i)
i += 1
위 코드에서는 i 변수를 0으로 초기화하고, while 문에서 i 변수가 10보다 작은 동안 반복적으로 print()
함수를 사용하여 i 값을 출력하고, i 변수를 1씩 증가시키고 있습니다. 이렇게 while 문을 사용하면 조건이 참인 동안 코드 블록을 반복적으로 실행할 수 있습니다.
또한, while 문은 break 문을 사용하여 특정 조건을 만족하면 반복을 중지할 수 있습니다. 아래 코드는 while 문과 break 문을 사용하여 0부터 시작하여 i 값이 5가 되는 경우 반복을 중지하는 예제입니다.
i = 0
while True:
print(i)
i += 1
if i == 5:
break
while 문은 조건이 참인 동안 코드 블록을 반복적으로 실행하는 경우에 사용됩니다. 조건을 만족하는 동안 반복적으로 실행되는 작업을 처리할 때 while 문을 사용할 수 있습니다.
enumerate 함수
퀴즈
- for 반복문에서 반복 횟수를 지정할 때 사용하는 함수는 무엇입니까? a. range() b. len() c. enumerate() d. zip()
정답: a
해설: for 반복문에서 반복 횟수를 지정할 때 사용하는 함수는 range()입니다.
- while 반복문에서 조건식을 검사하는 위치는 어디입니까? a. 반복 시작 전 b. 반복 중 c. 반복 종료 후 d. 반복 중간에
정답: b
해설: while 반복문에서 조건식을 검사하는 위치는 반복 중입니다.
- 반복문에서 continue 키워드의 역할은 무엇입니까? a. 반복문을 빠져나옵니다. b. 다음 반복으로 넘어갑니다. c. 예외를 발생시킵니다. d. 변수를 초기화합니다.
정답: b
해설: 반복문에서 continue 키워드의 역할은 다음 반복으로 넘어가게 합니다.
- 다음 중 반복문에서 사용되는 키워드가 아닌 것은 무엇입니까? a. for b. while c. do-while d. break
정답: c
해설: 파이썬에서는 do-while 반복문을 지원하지 않습니다.
- 다음 중 for 반복문의 예시로 올바르지 않은 것은 무엇입니까? a. for i in range(10): b. for x in ['apple', 'banana', 'cherry']: c. for i, x in enumerate(['apple', 'banana', 'cherry']): d. for x in 10:
정답: d
해설: for 반복문에서 x in 10은 올바르지 않은 구문입니다. 정수형은 iterable한 객체가 아니기 때문입니다.
- for 반복문에서 반복 변수를 지정할 때 사용하는 예약어는 무엇입니까? a. in b. for c. as d. each
정답: c
해설: for 반복문에서 반복 변수를 지정할 때 사용하는 예약어는 as입니다.
- while 반복문에서 반복을 멈출 때 사용하는 키워드는 무엇입니까? a. end b. finish c. break d. stop
정답: c
해설: while 반복문에서 반복을 멈출 때 사용하는 키워드는 break입니다.
미니 프로젝트: 숫자 맞추기 게임
숫자 맞추기 게임은 컴퓨터가 랜덤으로 정한 숫자를 맞추는 게임입니다. 이를 파이썬의 if
문을 활용하여 간단하게 구현해볼 수 있습니다. 다음은 숫자 맞추기 게임의 예제입니다.
import random
number = random.randint(1, 100)
guess = 0
while guess != number:
guess = int(input("숫자를 입력하세요: "))
if guess > number:
print("숫자가 너무 큽니다.")
elif guess < number:
print("숫자가 너무 작습니다.")
print("정답입니다!")
위 코드에서 random 모듈을 사용하여 1부터 100까지의 범위에서 랜덤한 숫자를 하나 생성합니다. 사용자가 입력한 숫자를 받아들이고, 입력한 숫자가 랜덤한 숫자보다 큰지, 작은지 판별합니다. 이를 사용자가 맞출 때까지 반복합니다.
6. 함수
함수의 개념
함수(function)은 입력값을 받아서 처리한 후 출력값을 반환하는 코드의 묶음입니다. 함수를 사용하면 반복되는 코드를 줄이고, 코드의 재사용성을 높일 수 있습니다.
함수의 정의와 호출
함수를 정의할 때는 def 키워드를 사용합니다. 함수 이름은 변수와 마찬가지로 영문자, 숫자, 밑줄로 구성됩니다. 함수 이름 뒤에는 괄호와 콜론(:)이 붙고, 함수 내용은 들여쓰기를 합니다. 함수를 호출할 때는 함수 이름 뒤에 괄호를 붙이고, 인수(argument)를 전달할 수 있습니다.
# 함수의 정의
def add(a, b):
result = a + b
return result
# 함수의 호출
print(add(1, 2)) # 3 출력
매개변수와 반환값
함수에 전달되는 입력값을 매개변수(parameter)라고 합니다. 매개변수는 함수 정의에 포함됩니다. 함수는 처리 결과를 반환할 수 있는데, 반환값(return value)은 return 키워드를 사용하여 지정합니다.
# 매개변수와 반환값을 갖는 함수
def add(a, b):
result = a + b
return result
# 반환값을 출력하는 함수
def print_add(a, b):
print("{} + {} = {}".format(a, b, add(a, b)))
# 함수의 호출
print_add(1, 2) # 1 + 2 = 3 출력
함수의 종류
- 내장 함수(Built-in Function) : 파이썬에서 기본적으로 제공되는 함수
- 사용자 정의 함수(User-defined Function) : 사용자가 직접 정의한 함수
- 람다 함수(Lambda Function) : 익명 함수(이름이 없는 함수)로, 한 줄로 함수를 정의할 수 있습니다.
# 내장 함수의 예
print(len([1, 2, 3])) # 3 출력
print(max([1, 2, 3])) # 3 출력
# 사용자 정의 함수의 예
def add(a, b):
result = a + b
return result
print(add(1, 2)) # 3 출력
# 람다 함수의 예
lambda_add = lambda a, b: a + b
print(lambda_add(1, 2)) # 3 출력
문자열 관련 함수
파이썬은 문자열을 다루기 위한 다양한 함수를 제공합니다. 이러한 함수들은 문자열의 길이, 대소문자 변환, 문자열 분리, 문자열 치환 등의 작업을 수행할 수 있습니다.
len()
함수
len()
함수는 문자열의 길이를 반환합니다.
a = "hello world"
print(len(a)) # 출력 결과: 11
upper()
함수와 lower()
함수
upper()
함수는 문자열을 모두 대문자로 변환합니다. lower()
함수는 문자열을 모두 소문자로 변환합니다.
a = "Hello World"
print(a.upper()) # 출력 결과: 'HELLO WORLD'
print(a.lower()) # 출력 결과: 'hello world'
split()
함수
split()
함수는 문자열을 분리하여 리스트(list) 형태로 반환합니다. 인자로 전달하는 문자열을 기준으로 문자열을 분리합니다.
a = "apple, banana, orange"
b = a.split(", ")
print(b) # 출력 결과: ['apple', 'banana', 'orange']
replace()
함수
replace()
함수는 문자열에서 지정한 문자열을 다른 문자열로 치환합니다.
a = "Hello World"
b = a.replace("World", "Python")
print(b) # 출력 결과: 'Hello Python'
정보처리기능사 실기 문제: 함수의 매개변수와 기본값
파일명: function_parameters.py
다음 Python 코드는 두 매개변수를 가진 func
함수를 정의하고, 이 함수를 호출하는 예제입니다. 두 번째 매개변수 num2
는 기본값을 가집니다.
def func(num1, num2 = 2):
print('a =', num1, 'b =', num2)
func(20)
문제 설명:
- 위
function_parameters.py
파일에 작성된 코드를 실행했을 때의 출력 결과를 예측하세요. func
함수는 두 개의 매개변수num1
과num2
를 받으며,num2
는 기본값으로2
를 가집니다.- 함수 호출 시
num1
에20
을 전달하며,num2
는 기본값2
를 사용합니다.
정답 예측:
- 출력 결과는
"a = 20 b = 2"
입니다. 이는 함수 호출 시num1
에 전달된 값이20
이며,num2
는 기본값2
가 사용되었기 때문입니다.
이 문제는 함수 정의 시 매개변수에 기본값을 설정하는 방법과 함수 호출 시 매개변수에 값을 전달하는 방법을 이해하는 데 중점을 둡니다.
퀴즈
- 함수에서 입력값을 받는 변수를 무엇이라고 합니까? a. 매개변수 b. 반환값 c. 인수 d. 변수
정답: a
해설: 함수에서 입력값을 받는 변수를 매개변수(parameter)라고 합니다.
- 함수를 정의할 때 사용하는 키워드는 무엇입니까? a. for b. while c. def d. if
정답: c
해설: 함수를 정의할 때 사용하는 키워드는 def입니다.
- 함수에서 처리 결과를 반환할 때 사용하는 키워드는 무엇입니까? a. return b. break c. continue d. pass
정답: a
해설: 함수에서 처리 결과를 반환할 때 사용하는 키워드는 return입니다.
- 람다 함수는 무엇입니까? a. 이름이 없는 함수 b. 기본적으로 제공되는 함수 c. 사용자가 직접 정의한 함수 d. 매개변수가 없는 함수
정답: a
해설: 람다 함수는 이름이 없는 함수로, 한 줄로 함수를 정의할 수 있습니다.
- 내장 함수의 예로 올바르지 않은 것은 무엇입니까? a. len() b. max() c. min() d. sum()
정답: d
해설: 내장 함수의 예로 올바르지 않은 것은 sum()입니다.
미니 프로젝트
파이썬 함수를 이용하여 다양한 미니 프로젝트를 구현해볼 수 있습니다. 이번 강의에서는 함수를 이용하여 간단한 미니 프로젝트를 만들어보는 방법을 알아보도록 하겠습니다.
로또 번호 생성기
로또 번호 생성기는 1부터 45까지의 숫자 중에서 6개의 숫자를 랜덤하게 선택하여 출력하는 프로그램입니다. 이를 파이썬의 함수를 활용하여 간단하게 구현해볼 수 있습니다. 다음은 로또 번호 생성기의 예제입니다.
import random
def generate_lotto_numbers():
numbers = []
while len(numbers) < 6:
number = random.randint(1, 45)
if number not in numbers:
numbers.append(number)
return numbers
lotto_numbers = generate_lotto_numbers()
print("로또 번호: ", lotto_numbers)
위 코드에서 generate_lotto_numbers() 함수는 랜덤한 숫자를 생성하여 리스트에 추가하고, 중복되는 숫자가 생성되지 않도록 판별합니다. 이를 6개의 숫자가 생성될 때까지 반복하고, 생성된 숫자 리스트를 반환합니다. 이후 반환된 리스트를 출력하는 코드를 작성합니다.
문자열 뒤집기
문자열 뒤집기는 사용자가 입력한 문자열을 뒤집어서 출력하는 프로그램입니다. 이를 파이썬의 함수를 활용하여 간단하게 구현해볼 수 있습니다. 다음은 문자열 뒤집기의 예제입니다.
def reverse_string(string):
return string[::-1]
input_string = input("문자열을 입력하세요: ")
reversed_string = reverse_string(input_string)
print("뒤집힌 문자열: ", reversed_string)
위 코드에서 reverse_string() 함수는 입력된 문자열을 뒤집어 반환합니다. 이후 사용자로부터 입력받은 문자열을 reverse_string() 함수로 전달하여 뒤집힌 문자열을 반환받고, 출력하는 코드를 작성합니다.
이상으로 파이썬 함수를 활용한 간단한 미니 프로젝트를 만들어보았습니다. 함수를 활용하여 다양한 프로그램을 구현해볼 수 있으니, 여러분들도 다양한 아이디어를 가지고 미니 프로젝트를 만들어보세요!
파이썬 터틀 그래픽스 강좌
터틀 그래픽스는 파이썬에 기본으로 포함된 그래픽 라이브러리입니다. 초보자들에게 프로그래밍의 기본을 가르치기 위해 만들어진 것이기 때문에, 아주 쉽게 그래픽 작업을 수행할 수 있습니다.
1. 터틀 시작하기
먼저 터틀 모듈을 가져와야 합니다.
import turtle
터틀 객체를 생성하고 화면에 나타냅니다.
t = turtle.Turtle()
2. 터틀 명령어
2.1 이동 명령어
forward(거리)
: 현재 방향으로 주어진 거리만큼 이동합니다.backward(거리)
: 현재 방향의 반대로 주어진 거리만큼 이동합니다.right(각도)
: 주어진 각도만큼 오른쪽으로 회전합니다.left(각도)
: 주어진 각도만큼 왼쪽으로 회전합니다.
2.2 펜 관련 명령어
penup()
: 펜을 종이에서 듭니다. 이동할 때 선이 그려지지 않습니다.pendown()
: 펜을 종이에 내립니다. 이동할 때 선이 그려집니다.pensize(두께)
: 펜의 두께를 설정합니다.pencolor(색상)
: 펜의 색상을 설정합니다.
2.3 기타 명령어
goto(x, y)
: 지정된 x, y 좌표로 이동합니다.circle(반지름)
: 현재 위치에서 지정된 반지름의 원을 그립니다.dot(크기)
: 현재 위치에 주어진 크기의 점을 찍습니다.
3. 예제: 기본 도형 그리기
3.1 사각형 그리기
t.forward(100)
t.right(90)
t.forward(100)
t.right(90)
t.forward(100)
t.right(90)
t.forward(100)
t.right(90)
for _ in range(4):
t.forward(100)
t.right(90)
3.2 원 그리기
t.circle(50)
4. 화면 관리
turtle.done()
: 터틀 창을 닫을 때까지 기다립니다.turtle.clearscreen()
: 화면을 지웁니다.turtle.bgcolor("색상")
: 배경색을 설정합니다.
5. 프로젝트: 꽃 그리기
t.speed(10)
turtle.bgcolor("white")
for _ in range(36):
t.pencolor("blue")
t.forward(100)
t.right(45)
t.pencolor("red")
t.forward(50)
t.right(45)
t.pencolor("yellow")
t.forward(25)
t.right(45)
t.backward(25)
t.left(90)
t.backward(50)
t.left(90)
t.backward(100)
t.right(10)
turtle.done()
오각형 그리기: 파이썬의 터틀 그래픽스 사용하기
오각형은 5개의 동일한 길이의 변과 5개의 동일한 각도로 구성된 평면 도형입니다. 파이썬의 터틀 그래픽스를 사용하여 간단하게 오각형을 그려볼 수 있습니다.
1. 터틀 모듈 불러오기
먼저, 터틀 그래픽스를 사용하기 위해 turtle
모듈을 불러와야 합니다.
import turtle
2. 터틀 객체 생성하기
터틀 객체를 생성하여 화면에 나타낼 수 있습니다.
t = turtle.Turtle()
3. 오각형 그리기
오각형을 그리기 위해서는 5번의 이동과 회전을 반복해야 합니다. 오각형의 각 내각은 108도입니다. 따라서 터틀이 각 변을 그린 후에는 72도(180 - 108)만큼 회전해야 합니다.
for _ in range(5):
t.forward(100) # 변의 길이
t.right(72) # 외각: 360 / 5
4. 작업 마무리
작업을 완료한 후, 다음 명령어를 사용하여 그림이 닫힐 때까지 대기하게 만들 수 있습니다.
turtle.done()
마치며
파이썬의 터틀 그래픽스를 사용하여 오각형을 그리는 방법을 간단히 알아보았습니다. 터틀 그래픽스는 초보자들에게 프로그래밍과 그래픽스의 기초를 가르치기에 아주 적합한 도구입니다. 다양한 도형과 패턴을 그려보며 더 많은 것을 탐색해보세요!
n-각형 그리기: 파이썬의 터틀 그래픽스 활용하기
n-각형은 n개의 동일한 길이의 변과 n개의 동일한 각도로 구성된 평면 도형입니다. 파이썬의 터틀 그래픽스를 사용하여 n-각형을 그리는 방법을 알아봅시다.
1. 기본 설정
터틀 그래픽스를 사용하기 위해 필요한 모듈을 가져옵니다.
import turtle
터틀 객체를 생성합니다.
t = turtle.Turtle()
2. n-각형 그리기 함수
n-각형을 그리기 위한 함수를 생성합니다. 함수는 변의 개수 n
과 각 변의 길이 length
를 매개변수로 받습니다.
def draw_polygon(n, length):
angle = 360 / n
for _ in range(n):
t.forward(length)
t.right(angle)
3. n-각형 그리기 예제
예를 들어, 6-각형(육각형)을 그리려면 아래와 같이 함수를 호출합니다.
draw_polygon(6, 100)
4. 작업 마무리
작업을 완료한 후, 다음 명령어를 사용하여 그림이 닫힐 때까지 대기하게 만들 수 있습니다.
turtle.done()
마치며
파이썬의 터틀 그래픽스를 사용하여 다양한 n-각형을 그리는 방법을 학습하였습니다. 위의 함수를 사용하여 원하는 변의 개수와 길이로 다양한 도형을 그려보세요!
도형에 색칠하기: 파이썬의 터틀 그래픽스 활용하기
터틀 그래픽스를 사용하면 도형을 그릴 뿐만 아니라, 색칠하는 것도 가능합니다. 이 아티클에서는 터틀 그래픽스로 도형에 색을 채우는 방법에 대해 알아보겠습니다.
1. 기본 설정
먼저, 터틀 그래픽스를 사용하기 위해 필요한 모듈을 불러옵니다.
```python import turtle ```
터틀 객체를 생성합니다.
```python t = turtle.Turtle() ```
2. 색칠 설정
터틀 객체의 fillcolor
메서드를 사용하여 채울 색을 설정합니다. 예를 들어, 빨간색으로 채우고자 한다면:
```python t.fillcolor("red") ```
3. 색칠 시작 및 종료
색칠을 시작하기 전에 begin_fill
메서드를 호출하고, 색칠을 완료한 후에는 end_fill
메서드를 호출합니다.
```python t.begin_fill()
도형 그리기 코드
t.end_fill() ```
예를 들어, 빨간색의 사각형을 그리려면:
```python t.fillcolor("red") t.begin_fill() for _ in range(4): t.forward(100) t.right(90) t.end_fill() ```
4. 작업 마무리
작업을 완료한 후, 다음 명령어를 사용하여 그림이 닫힐 때까지 대기하게 만들 수 있습니다.
```python turtle.done() ```
마치며
터틀 그래픽스를 활용하여 쉽게 도형에 색칠을 할 수 있습니다. 다양한 색과 도형을 조합하여 다채로운 그림을 그려보세요!
터틀 모듈의 주요 메서드
메서드명 | 설명 |
---|---|
forward(dist) | 주어진 거리(dist)만큼 앞으로 이동 |
backward(dist) | 주어진 거리(dist)만큼 뒤로 이동 |
right(angle) | 주어진 각도(angle)만큼 시계방향으로 회전 |
left(angle) | 주어진 각도(angle)만큼 반시계방향으로 회전 |
penup() | 펜을 들어 그리지 않게 함 |
pendown() | 펜을 내려 그릴 수 있게 함 |
pensize(width) | 펜의 크기를 지정 |
pencolor(color) | 펜의 색깔을 지정 |
clear() | 화면을 지움 |
reset() | 화면을 지우고 터틀의 상태와 위치를 초기화 |
goto(x,y) | 지정한 (x, y) 위치로 터틀을 이동 |
setheading(angle) | 지정한 각도(angle)로 터틀의 방향을 설정 |
circle(radius) | 주어진 반지름(radius)의 원을 그림 |
dot(size,color) | 주어진 크기와 색의 점을 그림 |
speed(level) | 그리기 속도를 지정 (0:fastest ... 10:slowest) |
hideturtle() | 터틀을 숨김 |
showturtle() | 터틀을 보여줌 |
bgcolor(color) | 배경색을 설정 |
5각형 별 그리기
import turtle
t = turtle.Turtle()
t.speed(5) # 속도 설정 (1:느림 ~ 10:빠름)
for _ in range(5):
t.forward(100) # 변의 길이
t.right(144) # 별의 각도
turtle.done()
6각형 별
import turtle
t = turtle.Turtle()
t.speed(5) # 속도 설정 (1:느림 ~ 10:빠름)
for _ in range(6):
t.forward(100) # 변의 길이
t.right(120) # 별의 각도
turtle.done()
마무리
이 강좌는 터틀 그래픽스의 기본을 다루었습니다. 다양한 그래픽 작업을 수행하려면 공식 문서나 다른 참고 자료를 확인하면 좋습니다.
파이썬에서 숫자를 콤마 또는 언더스코어로 구분하기
큰 숫자의 가독성을 향상시키기 위해 숫자를 콤마나 언더스코어로 구분하는 것이 유용합니다. 파이썬에서는 이를 달성하기 위한 여러 방법이 있습니다.
format
함수를 사용한 방법: 파이썬의 내장 함수인format
을 사용하면 쉽게 숫자를 콤마로 구분된 문자열로 변환할 수 있습니다.number = 1234567890 formatted_number = format(number, ',') print(formatted_number) # 출력: "1,234,567,890"
f-string을 사용한 방법: 파이썬 3.6 이상에서는 f-string을 사용하여 숫자를 쉽게 콤마로 구분할 수 있습니다.
number = 1234567890 print(f"{number:,}") # 출력: "1,234,567,890"
locale
모듈을 사용한 방법:locale
모듈은 다양한 지역 설정에 따라 숫자를 포맷하는 기능을 제공합니다. 이를 사용하면 지역에 맞는 숫자 포맷을 얻을 수 있습니다.import locale locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') number = 1234567890 formatted_number = locale.format_string("%d", number, grouping=True) print(formatted_number) # 출력: "1,234,567,890"
주의:
locale
모듈의 사용은 시스템의 지역 설정에 따라 결과가 달라질 수 있으므로 주의가 필요합니다.언더스코어로 숫자를 구분하기: 파이썬 3.6 이후로는 숫자 리터럴에 언더스코어를 사용하여 숫자의 가독성을 높일 수 있습니다. 이는 숫자의 값에 영향을 주지 않으면서 코드상에서 숫자를 읽기 쉽게 만들어줍니다.
number = 10_000_000 print(number) # 출력: "10000000"
이러한 방식으로 숫자를 선언하면, 코드를 읽는 사람에게 1천만이라는 값을 더 명확하게 표현할 수 있습니다.
7. 리스트와 튜플
리스트의 개념
파이썬에서 리스트(list)는 여러 개의 값을 순서대로 저장하는 자료형입니다. 리스트는 대괄호([])로 묶어서 표현하며, 쉼표(,)로 구분된 값들을 포함합니다. 리스트는 다음과 같은 특징을 가집니다.
- 순서가 있는 자료형이다. 즉, 리스트에 저장된 값들은 순서대로 인덱싱(indexing)이 가능하다.
- 값의 중복이 가능하다. 즉, 리스트 안에 동일한 값이 여러 개 포함될 수 있다.
- 값의 수정이 가능하다. 즉, 리스트에 저장된 값들을 변경할 수 있다.
- 여러 가지 자료형의 값들을 포함할 수 있다. 즉, 리스트에 숫자, 문자열, 불리언(Boolean) 값 등 다양한 자료형의 값들을 함께 저장할 수 있다.
리스트를 사용하여 다양한 연산을 수행할 수 있습니다. 예를 들어, 리스트에서 특정 값이나 인덱스에 접근할 수 있으며, 슬라이싱(slicing)을 사용하여 리스트의 일부분만 추출할 수도 있습니다. 또한, 리스트에 값들을 추가하거나 삭제하고, 값을 정렬하거나 반대로 뒤집는 등 다양한 조작을 수행할 수 있습니다. 리스트는 파이썬에서 가장 기본적이고 중요한 자료형 중 하나이며, 다양한 프로그램에서 자주 사용됩니다.
파이썬의 리스트는 다양한 데이터 형식을 동시에 저장할 수 있습니다. 즉, 정수, 실수, 문자열, 딕셔너리, 리스트 등 다양한 데이터 형식을 하나의 리스트에 저장할 수 있습니다.
다음은 여러 가지 데이터 형식을 포함하는 리스트의 예제입니다:
# 다양한 데이터 형식을 포함하는 리스트
data = [42, # 정수
3.14, # 실수
"Hello, World!", # 문자열
[1, 2, 3], # 리스트
{"name": "John", "age": 30}, # 딕셔너리
True, # 부울
None] # None 타입
# 각 항목의 데이터 형식 출력
for item in data:
print(f"Value: {item}, Type: {type(item)}")
위 코드를 실행하면, 각 항목의 값과 해당 항목의 데이터 형식이 출력됩니다. 이를 통해 파이썬의 리스트가 다양한 데이터 형식을 저장할 수 있음을 확인할 수 있습니다.
파이썬에서 빈 리스트를 만드는 방법은 매우 간단합니다. 다음은 빈 리스트를 만드는 두 가지 기본적인 방법에 대한 예제입니다:
# 1. 대괄호([])를 사용하여 빈 리스트 생성
empty_list1 = []
print(empty_list1) # []
# 2. list() 함수를 사용하여 빈 리스트 생성
empty_list2 = list()
print(empty_list2) # []
두 방법 모두 동일한 결과를 생성합니다. 모두 빈 리스트가 출력됩니다.
파이썬에서 range
로 리스트 만들기
range
함수는 연속적인 숫자를 생성하는 데 사용되며, 주로 for
루프와 함께 사용됩니다. range
를 사용하여 생성된 값들을 list
함수와 함께 사용하면 리스트를 만들 수 있습니다.
기본 사용법
# 0부터 4까지의 숫자를 생성
numbers = list(range(5))
print(numbers) # [0, 1, 2, 3, 4]
시작과 끝 지정하기
# 2부터 9까지의 숫자를 생성
numbers = list(range(2, 10))
print(numbers) # [2, 3, 4, 5, 6, 7, 8, 9]
스텝(증가치) 지정하기
# 2부터 시작하여 20까지 2씩 증가하는 숫자를 생성
even_numbers = list(range(2, 21, 2))
print(even_numbers) # [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
range
와 for
루프
range
는 for
루프와 함께 사용될 때 매우 유용합니다.
for i in range(5):
print(i)
# 출력:
# 0
# 1
# 2
# 3
# 4
이러한 방식으로 range
함수는 파이썬에서 매우 유용하게 사용될 수 있습니다. 특히 반복적인 작업이 필요한 경우에 많이 사용됩니다.
리스트의 인덱싱과 슬라이싱
리스트(list)에서 인덱싱(indexing)은 특정 위치에 있는 값을 가져오는 방법입니다. 인덱스는 0부터 시작하며, 대괄호([]) 안에 인덱스를 넣어서 해당 위치에 있는 값을 가져올 수 있습니다. 예를 들어, list[0]은 리스트에서 첫 번째 값, list[1]은 두 번째 값, list[-1]은 마지막 값 등을 가져올 수 있습니다.
리스트에서 슬라이싱(slicing)은 리스트의 일부분을 추출하는 방법입니다. 슬라이싱은 대괄호([]) 안에 시작 인덱스, 끝 인덱스, 스텝(step)을 지정하여 해당 범위에 있는 값을 추출합니다. 슬라이싱은 다음과 같은 문법으로 사용합니다.
list[시작인덱스:끝인덱스:스텝]
시작 인덱스는 포함되고, 끝 인덱스는 포함되지 않는 범위를 추출합니다. 스텝을 지정하지 않으면 1이 기본값으로 사용되며, 스텝을 음수로 지정하면 역순으로 추출할 수 있습니다. 예를 들어, list[1:4]는 두 번째 값부터 네 번째 값까지 추출하며, list[::2]는 처음부터 끝까지 두 칸씩 건너뛰며 추출합니다.
아래는 리스트의 인덱싱과 슬라이싱을 사용한 예제입니다.
list = ['apple', 'banana', 'cherry', 'orange', 'kiwi', 'melon', 'mango']
print(list[1]) # 'banana' 출력
print(list[-2]) # 'melon' 출력
print(list[2:5]) # ['cherry', 'orange', 'kiwi'] 출력
print(list[:4]) # ['apple', 'banana', 'cherry', 'orange'] 출력
print(list[::2]) # ['apple', 'cherry', 'kiwi', 'mango'] 출력
print(list[::-1]) # ['mango', 'melon', 'kiwi', 'orange', 'cherry', 'banana', 'apple'] 출력
위 예제에서는 리스트의 인덱싱과 슬라이싱을 사용하여 리스트에서 특정 위치에 있는 값을 가져오거나, 일부분을 추출하는 방법을 보여주고 있습니다.
리스트의 연산
리스트(list)에서는 다양한 연산을 수행할 수 있습니다. 여기에는 리스트의 값 추가, 삭제, 정렬, 반전 등이 포함됩니다.
- 값 추가하기 리스트에 새로운 값을 추가할 때는 append() 메서드를 사용합니다. append() 메서드는 리스트의 끝에 새로운 값을 추가합니다.
list = ['apple', 'banana', 'cherry']
list.append('orange') # 리스트의 끝에 'orange' 추가
print(list) # ['apple', 'banana', 'cherry', 'orange'] 출력
- 값 삭제하기
리스트에서 값을 삭제할 때는 remove() 메서드를 사용합니다. remove() 메서드는 리스트에서 첫 번째로 일치하는 값을 삭제합니다. 또는, del 예약어를 사용하여 리스트의 특정 위치에 있는 값을 삭제할 수도 있습니다.
list = ['apple', 'banana', 'cherry', 'orange']
list.remove('cherry') # 'cherry'를 삭제
del list[1] # 두 번째 값('banana')를 삭제
print(list) # ['apple', 'orange'] 출력
- 값 정렬하기
리스트의 값을 정렬할 때는 sort() 메서드를 사용합니다. sort() 메서드는 리스트를 오름차순으로 정렬합니다. 내림차순으로 정렬하려면 reverse=True 옵션을 지정합니다.
list = [3, 1, 4, 1, 5, 9, 2]
list.sort() # 오름차순으로 정렬
print(list) # [1, 1, 2, 3, 4, 5, 9] 출력
list.sort(reverse=True) # 내림차순으로 정렬
print(list) # [9, 5, 4, 3, 2, 1, 1] 출력
- 값 반전하기
리스트의 값을 반전할 때는 reverse() 메서드를 사용합니다. reverse() 메서드는 리스트의 순서를 역순으로 바꿉니다.
list = ['apple', 'banana', 'cherry', 'orange']
list.reverse() # 리스트의 순서를 역순으로 변경
print(list) # ['orange', 'cherry', 'banana', 'apple'] 출력
리스트에서는 위와 같은 연산을 수행할 수 있습니다. 리스트는 다양한 자료형의 값을 함께 저장할 수 있는 자료형으로, 다양한 프로그램에서 사용됩니다.
리스트의 메서드
리스트(list)에서는 다양한 메서드(method)를 사용할 수 있습니다. 여기에는 리스트의 길이 구하기, 값 추가 및 삭제, 인덱스 및 값 검색 등이 포함됩니다.
- 리스트의 길이 구하기
리스트의 길이를 구할 때는 len() 함수를 사용합니다.
list = ['apple', 'banana', 'cherry']
print(len(list)) # 3 출력
- 값 추가하기
리스트에 새로운 값을 추가할 때는 append() 메서드를 사용합니다. append() 메서드는 리스트의 끝에 새로운 값을 추가합니다.
list = ['apple', 'banana', 'cherry']
list.append('orange') # 리스트의 끝에 'orange' 추가
print(list) # ['apple', 'banana', 'cherry', 'orange'] 출력
- 값 삭제하기
리스트에서 값을 삭제할 때는 remove() 메서드를 사용합니다. remove() 메서드는 리스트에서 첫 번째로 일치하는 값을 삭제합니다. 또는, pop() 메서드를 사용하여 리스트에서 마지막 값을 삭제할 수도 있습니다.
list = ['apple', 'banana', 'cherry', 'orange']
list.remove('cherry') # 'cherry'를 삭제
list.pop() # 마지막 값('orange')를 삭제
print(list) # ['apple', 'banana'] 출력
- 인덱스 검색하기
리스트에서 특정 값의 인덱스를 검색할 때는 index() 메서드를 사용합니다. index() 메서드는 리스트에서 첫 번째로 일치하는 값의 인덱스를 반환합니다.
list = ['apple', 'banana', 'cherry']
print(list.index('banana')) # 1 출력
- 값 카운트하기
리스트에서 특정 값의 개수를 세는 경우에는 count() 메서드를 사용합니다.
list = ['apple', 'banana', 'cherry', 'banana']
print(list.count('banana')) # 2 출력
리스트에서는 위와 같은 메서드를 사용할 수 있습니다. 리스트는 파이썬에서 가장 기본적이고 중요한 자료형 중 하나이며, 다양한 프로그램에서 사용됩니다.
파이썬 리스트에 extend()
메서드 사용하기
파이썬의 extend()
메서드는 한 리스트의 모든 항목을 다른 리스트에 추가하는 데 사용됩니다. 아래는 extend()
메서드를 사용하여 리스트에 다른 리스트의 항목들을 추가하는 예제입니다.
# 리스트 생성
my_list = ['apple', 'banana']
# 다른 리스트 생성
fruits_to_add = ['cherry', 'date', 'fig']
# my_list에 fruits_to_add의 항목들을 추가
my_list.extend(fruits_to_add)
# 리스트 출력
print(my_list)
출력 결과:
['apple', 'banana', 'cherry', 'date', 'fig']
위의 예제에서 초기에 my_list
라는 리스트를 생성한 후, extend()
메서드를 사용하여 fruits_to_add
리스트의 모든 항목을 my_list
에 추가했습니다.
튜플의 개념
파이썬에서 튜플(tuple)은 여러 개의 값을 순서대로 저장하는 자료형입니다. 튜플은 대괄호([]) 대신 괄호(())로 묶어서 표현하며, 쉼표(,)로 구분된 값들을 포함합니다. 튜플은 다음과 같은 특징을 가집니다.
- 순서가 있는 자료형이다. 즉, 튜플에 저장된 값들은 순서대로 인덱싱(indexing)이 가능하다.
- 값의 중복이 가능하다. 즉, 튜플 안에 동일한 값이 여러 개 포함될 수 있다.
- 값의 수정이 불가능하다. 즉, 튜플에 저장된 값들을 변경할 수 없다.
- 여러 가지 자료형의 값들을 포함할 수 있다. 즉, 튜플에 숫자, 문자열, 불리언(Boolean) 값 등 다양한 자료형의 값들을 함께 저장할 수 있다.
튜플은 수정이 불가능하므로, 한 번 생성한 튜플의 값은 변경할 수 없습니다. 하지만, 튜플의 값은 인덱싱을 통해 접근할 수 있으며, 다른 자료형과 함께 사용할 때 유용합니다. 파이썬에서는 튜플의 값들을 괄호로 묶어서 함수의 반환값이나, 여러 값을 동시에 반환하는 경우에 사용됩니다.
파이썬의 slice
객체 사용하기 참고 강의
slice
는 파이썬에서 슬라이싱 연산을 대표하는 객체입니다. 이를 활용하면 슬라이싱을 보다 동적이며, 가독성 있게, 그리고 재사용 가능하게 처리할 수 있습니다.
slice
객체는 다음의 형태로 생성됩니다:
slice(start, stop, step)
여기서 start
, stop
, step
은 모두 선택적인 인자입니다.
리스트 슬라이싱은 다음과 같습니다.
lst = [0, 1, 2, 3, 4, 5]
first_three = slice(3)
last_three = slice(-3, None)
alternate = slice(0, None, 2)
print(lst[first_three])
print(lst[last_three])
print(lst[alternate])
문자열 슬라이싱은 다음과 같습니다.
s = "Hello, World!"
hello_slice = slice(0, 5)
print(s[hello_slice])
slice
객체를 통해 슬라이싱을 명시적으로 표현할 수 있습니다. 또한, 특정 슬라이스 패턴을 여러 번 재사용할 때 매우 유용합니다.
퀴즈
- 리스트에서 값을 접근할 때 사용하는 구문은 무엇입니까? a. key() b. value() c. items() d. index()
정답: d
해설: 리스트에서 값을 접근할 때 사용하는 구문은 index()입니다.
- 리스트에서 값의 추가와 삭제를 모두 처리하는 함수는 무엇입니까? a. add() b. remove() c. update() d. append()와 remove()
정답: d
해설: 리스트에서 값의 추가와 삭제를 모두 처리하는 함수는 append()와 remove()입니다.
- 튜플과 리스트의 차이점은 무엇입니까? a. 튜플은 수정이 불가능하고 리스트는 수정이 가능하다. b. 튜플은 수정이 가능하고 리스트는 수정이 불가능하다. c. 튜플과 리스트는 모두 수정이 가능하다. d. 튜플과 리스트는 모두 수정이 불가능하다.
정답: a
해설: 튜플은 수정이 불가능하고 리스트는 수정이 가능합니다.
- 리스트에서 슬라이싱을 수행할 때 사용하는 구문은 무엇입니까? a. slice() b. index() c. slice_index() d. :
정답: d
해설: 리스트에서 슬라이싱을 수행할 때 사용하는 구문은 :입니다.
- 리스트에서 중복된 값을 제거하는 함수는 무엇입니까? a. unique() b. remove_duplicate() c. distinct() d. set()
정답: d
해설: 리스트에서 중복된 값을 제거하는 함수는 set()입니다.
미니 프로젝트
파이썬 리스트와 튜플을 이용하여 다양한 미니 프로젝트를 구현해볼 수 있습니다. 이번 강의에서는 리스트와 튜플을 활용하여 간단한 미니 프로젝트를 만들어보는 방법을 알아보도록 하겠습니다.
단어 맞추기 게임
단어 맞추기 게임은 미리 정해진 단어를 사용자가 맞추는 게임입니다. 이를 파이썬의 리스트를 활용하여 간단하게 구현해볼 수 있습니다. 다음은 단어 맞추기 게임의 예제입니다.
words = ["python", "programming", "computer", "algorithm", "variable", "function"]
selected_word = random.choice(words)
while True:
print("문제: ", "*" * len(selected_word))
guess = input("단어를 추측하세요: ")
if guess == selected_word:
print("정답입니다!")
break
else:
print("틀렸습니다.")
위 코드에서 words 리스트는 게임에서 사용될 단어들을 저장하고, random 모듈을 이용하여 리스트에서 하나의 단어를 랜덤하게 선택합니다. 이후 사용자로부터 단어를 입력받아 선택된 단어와 비교하여 정답 여부를 판별합니다. 사용자가 정답을 맞출 때까지 이를 반복합니다.
지뢰찾기 게임
지뢰찾기 게임은 게임 판에서 지뢰가 있는 곳을 찾아내는 게임입니다. 이를 파이썬의 리스트를 활용하여 간단하게 구현해볼 수 있습니다. 다음은 지뢰찾기 게임의 예제입니다.
import random
board_size = 5
num_of_mines = 3
board = []
for i in range(board_size):
row = [" "] * board_size
board.append(row)
for i in range(num_of_mines):
row = random.randint(0, board_size - 1)
col = random.randint(0, board_size - 1)
board[row][col] = "X"
for row in board:
print(" ".join(row))
위 코드에서 board_size는 게임 판의 크기, num_of_mines는 지뢰의 개수를 나타냅니다. 이후 board 리스트를 이용하여 게임 판을 생성합니다. 이후 random 모듈을 이용하여 지뢰의 위치를 랜덤하게 생성하고, board 리스트에 표시합니다. 이를 화면에 출력하여 사용자가 게임을 즐길 수 있도록 합니다.
이상으로 파이썬 리스트와 튜플을 활용한 간단한 미니 프로젝트를 만들어보았습니다.
8. 딕셔너리와 세트
딕셔너리의 개념
딕셔너리는 파이썬에서 가장 자주 사용되는 데이터 타입 중 하나입니다. 딕셔너리는 키(key)와 값(value)을 쌍으로 저장하는 자료구조로, 중괄호({})를 사용하여 선언합니다. 키는 유일한 값으로, 값은 중복이 가능합니다.
my_dict = {"name": "John", "age": 30, "city": "New York"}
딕셔너리의 키와 값
딕셔너리는 키와 값의 쌍으로 데이터를 저장합니다. 딕셔너리에서 키는 대괄호([])를 사용하여 값을 조회할 수 있습니다.
my_dict = {"name": "John", "age": 30, "city": "New York"}
print(my_dict["name"]) # John
print(my_dict["age"]) # 30
print(my_dict["city"]) # New York
딕셔너리에서 값을 추가하거나 수정하려면 키와 값의 쌍으로 대괄호([])를 사용합니다.
my_dict = {"name": "John", "age": 30, "city": "New York"}
my_dict["age"] = 40 # 수정
my_dict["country"] = "USA" # 추가
print(my_dict) # {'name': 'John', 'age': 40, 'city': 'New York', 'country': 'USA'}
딕셔너리에서 키와 값을 삭제하려면 del 키워드를 사용합니다.
my_dict = {"name": "John", "age": 30, "city": "New York"}
del my_dict["age"] # 삭제
print(my_dict) # {'name': 'John', 'city': 'New York'}
사전에 대해 한 번 더 연습하려면 다음 링크를 참고하세요.
딕셔너리의 메서드
딕셔너리에서 자주 사용되는 메서드를 살펴보겠습니다.
keys()
keys() 메서드는 딕셔너리의 모든 키를 반환합니다.
my_dict = {"name": "John", "age": 30, "city": "New York"}
print(my_dict.keys()) # dict_keys(['name', 'age', 'city'])
values()
values() 메서드는 딕셔너리의 모든 값을 반환합니다.
my_dict = {"name": "John", "age": 30, "city": "New York"}
print(my_dict.values()) # dict_values(['John', 30, 'New York'])
items()
items() 메서드는 딕셔너리의 모든 키와 값을 반환합니다.
my_dict = {"name": "John", "age": 30, "city": "New York"}
print(my_dict.items()) # dict_items([('name', 'John'), ('age', 30), ('city', 'New York')])
파이썬에서 빈 딕셔너리를 만들고 사용하는 내용은 다음 아티클을 참고하세요.
세트의 개념
세트는 중복되지 않는 값을 저장하는 자료구조로, 중괄호({})나 set() 함수를 사용하여 선언합니다. 세트는 딕셔너리와 마찬가지로 순서가 없기 때문에 인덱싱으로 접근할 수 없습니다.
my_set = {1, 2, 3}
세트의 연산과 메서드
파이썬 세트는 합집합, 교집합, 차집합 등 다양한 집합 연산을 지원합니다. 세트에서 자주 사용되는 연산과 메서드를 살펴보겠습니다.
합집합(Union) 연산
두 개의 세트를 합쳐서 새로운 세트를 반환합니다. | 연산자 또는 union() 메서드를 사용합니다.
set1 = {1, 2, 3}
set2 = {3, 4, 5}
# | 연산자 사용
result1 = set1 | set2
print(result1) # {1, 2, 3, 4, 5}
# union() 메서드 사용
result2 = set1.union(set2)
print(result2) # {1, 2, 3, 4, 5}
교집합(Intersection) 연산
두 개의 세트에서 공통된 원소만을 추출하여 새로운 세트를 반환합니다. & 연산자 또는 intersection() 메서드를 사용합니다.
set1 = {1, 2, 3}
set2 = {3, 4, 5}
# & 연산자 사용
result1 = set1 & set2
print(result1) # {3}
# intersection() 메서드 사용
result2 = set1.intersection(set2)
print(result2) # {3}
차집합(Difference) 연산
두 개의 세트에서 첫 번째 세트에서는 있지만 두 번째 세트에서는 없는 원소만을 추출하여 새로운 세트를 반환합니다. - 연산자 또는 difference() 메서드를 사용합니다.
set1 = {1, 2, 3}
set2 = {3, 4, 5}
# - 연산자 사용
result1 = set1 - set2
print(result1) # {1, 2}
# difference() 메서드 사용
result2 = set1.difference(set2)
print(result2) # {1, 2}
정보처리기능사 실기 문제: 집합을 활용한 국가 관리
파일명: asia_countries.py
다음은 Python을 사용하여 아시아 국가들을 관리하는 코드의 예제입니다. 이 코드는 집합(set)을 사용하여 국가들을 추가, 제거 및 업데이트하는 방법을 보여줍니다. 주어진 코드를 실행했을 때의 출력 결과를 예측하는 문제입니다.
asia = {'한국', '중국', '일본'}
asia.add('베트남')
asia.add('중국')
asia.remove('일본')
asia.update({'한국', '홍콩', '태국'})
print(asia)
문제 설명:
- 위
asia_countries.py
파일에 작성된 코드를 실행했을 때 출력 결과를 예측하세요. - 코드 실행 과정에서
asia
집합에는 여러 연산이 수행됩니다.add
를 사용하여 국가를 추가하고,remove
로 특정 국가를 제거한 후,update
로 여러 국가를 한 번에 추가합니다.
정답 예측:
- 집합
asia
의 최종 출력 결과는 중복을 허용하지 않는 집합의 특성에 따라{'한국', '중국', '홍콩', '태국', '베트남'}
이 됩니다. 출력되는 순서는 집합의 특성상 예측할 수 없습니다.
이 문제는 Python에서 집합 자료형의 기본적인 사용법을 이해하고, 집합에 대한 기본적인 연산을 수행할 수 있는 능력을 평가합니다.
퀴즈
- 딕셔너리에서 키는 무엇을 의미합니까? a. 값 b. 인덱스 c. 변수 d. 식별자
정답: b
해설: 딕셔너리에서 키는 인덱스를 의미합니다.
- 딕셔너리에서 값을 접근할 때 사용하는 구문은 무엇입니까? a. key() b. value() c. items() d. get()
정답: d
해설: 딕셔너리에서 값을 접근할 때 사용하는 구문은 get()입니다.
- 세트에서 중복된 값을 제거하는 이유는 무엇입니까? a. 성능 향상을 위해 b. 가독성을 높이기 위해 c. 데이터를 정확하게 표현하기 위해 d. 중복된 값이 불필요한 경우가 많기 때문에
정답: d
해설: 세트에서 중복된 값을 제거하는 이유는 중복된 값이 불필요한 경우가 많기 때문입니다.
- 세트에서 합집합을 구하는 함수는 무엇입니까? a. union() b. intersection() c. difference() d. symmetric_difference()
정답: a
해설: 세트에서 합집합을 구하는 함수는 union()입니다.
- 다음 중 딕셔너리에서 사용되는 함수는 무엇입니까? a. add() b. remove() c. update() d. pop()
정답: c
해설: 딕셔너리에서 사용되는 함수는 update()입니다.
미니 프로젝트
파이썬 딕셔너리와 세트를 이용하여 다양한 미니 프로젝트를 구현해볼 수 있습니다. 이번 강의에서는 딕셔너리와 세트를 활용하여 간단한 미니 프로젝트를 만들어보는 방법을 알아보도록 하겠습니다.
영한사전
영한사전은 영어 단어와 그 뜻을 한글로 나타내는 사전입니다. 이를 파이썬의 딕셔너리를 활용하여 간단하게 구현해볼 수 있습니다. 다음은 영한사전의 예제입니다.
dictionary = {
"apple": "사과",
"banana": "바나나",
"cherry": "체리",
"date": "데이트",
"elderberry": "엘더베리"
}
while True:
word = input("단어를 입력하세요: ")
if word in dictionary:
print(f"{word}의 뜻은 {dictionary[word]}입니다.")
else:
print("사전에 존재하지 않는 단어입니다.")
위 코드에서 dictionary 딕셔너리는 영한사전의 역할을 합니다. 이후 사용자로부터 입력받은 단어가 딕셔너리에 존재하는지 확인하고, 존재할 경우 해당 단어의 뜻을 출력합니다. 단어가 존재하지 않을 경우 "사전에 존재하지 않는 단어입니다."를 출력합니다.
세트로 중복 제거하기
세트를 이용하여 리스트나 튜플에서 중복을 제거하는 코드를 작성할 수 있습니다. 다음은 중복 제거의 예제입니다.
lst = [1, 2, 2, 3, 4, 4, 5]
unique_lst = set(lst)
print(list(unique_lst))
위 코드에서 lst 리스트는 중복된 값이 포함된 리스트입니다. 이를 set() 함수를 이용하여 세트로 변환하여 중복을 제거하고, 이후 다시 list() 함수를 이용하여 리스트로 변환합니다. 이를 출력합니다.
이상으로 파이썬 딕셔너리와 세트를 활용한 간단한 미니 프로젝트를 만들어보았습니다. 딕셔너리와 세트를 활용하여 다양한 프로그램을 구현해볼 수 있으니, 여러분들도 다양한 아이디어를 가지고 미니 프로젝트를 만들어보세요!
9. 파일 입출력
파일의 개념
파일은 컴퓨터에서 데이터를 저장하는 데 사용되는 기본적인 저장소입니다. 파일은 디렉토리에 저장되며 파일 이름과 확장자를 가지고 있습니다. 파일은 텍스트 파일과 이진 파일로 구분됩니다.
텍스트 파일은 문자열을 포함하며, 이진 파일은 이미지, 음악, 비디오 등과 같은 이진 데이터를 포함합니다.
파일 열고 닫기
파이썬에서 파일을 열고 닫는 방법을 알아보겠습니다. 파일을 열려면 open() 함수를 사용해야 합니다. open() 함수는 파일 이름과 파일 모드를 인자로 받습니다.
파일 모드는 파일에 대한 작업 유형을 정의하는 문자열입니다. 파일 모드는 'r'(읽기 모드), 'w'(쓰기 모드), 'a'(추가 모드)로 지정할 수 있습니다.
# 파일 열기
file = open("example.txt", "w")
# 파일 닫기
file.close()
파일 쓰기
파일에 데이터를 쓰려면 파일을 쓰기 모드("w")로 열고 write() 메서드를 사용하여 데이터를 씁니다. 파일에 데이터를 쓸 때는 문자열이나 문자열 리스트를 쓸 수 있습니다.
# 파일 열기
file = open("example.txt", "w")
# 파일 쓰기
file.write("Hello, World!")
file.write("\n")
file.write("Python Programming")
# 파일 닫기
file.close()
파일 읽기
파일에서 데이터를 읽으려면 파일을 읽기 모드("r")로 열고 read() 메서드를 사용하여 데이터를 읽습니다. read() 메서드는 파일 전체 내용을 문자열로 반환합니다.
# 파일 열기
file = open("example.txt", "r")
# 파일 읽기
contents = file.read()
print(contents)
# 파일 닫기
file.close()
with 구문을 사용한 파일 입출력
with 구문을 사용하면 파일을 열고 닫는 것을 자동으로 처리할 수 있습니다. with 구문을 사용하면 파일을 열면 자동으로 닫히므로 close() 메서드를 호출할 필요가 없습니다.
with open("example.txt", "r") as file:
contents = file.read()
print(contents)
with 구문을 사용하면 코드가 블록으로 구성되므로 코드를 더욱 간결하고 읽기 쉽게 만들 수 있습니다. with 구문을 사용하면 예외가 발생하더라도 파일이 항상 닫히므로 예외 처리가 더욱 쉬워집니다.
퀴즈 - 파일 입출력
- 파일 입출력을 위해 사용하는 함수는 무엇입니까? a. print() b. input() c. open() d. read()
정답: c
해설: 파일 입출력을 위해 사용하는 함수는 open()입니다.
- 파일을 열 때 사용하는 모드 중, 쓰기 모드는 무엇입니까? a. r b. w c. x d. a
정답: b
해설: 파일을 열 때 사용하는 모드 중, 쓰기 모드는 w입니다.
- 파일을 닫을 때 사용하는 함수는 무엇입니까? a. close() b. open() c. read() d. write()
정답: a
해설: 파일을 닫을 때 사용하는 함수는 close()입니다.
- with 구문을 사용하여 파일을 처리하는 이유는 무엇입니까? a. 파일 처리 코드를 간결하게 작성하기 위해 b. 파일 처리 중 예외가 발생했을 때 처리를 자동으로 해주기 위해 c. 파일 처리 속도를 높이기 위해 d. 파일 처리 결과를 더욱 정확하게 확인하기 위해
정답: b
해설: with 구문을 사용하면 파일 처리 중 예외가 발생했을 때, 파일을 자동으로 닫아주는 등 처리를 자동으로 해줍니다.
- 파일을 읽을 때 사용하는 함수는 무엇입니까? a. open() b. close() c. write() d. read()
정답: d
해설: 파일을 읽을 때 사용하는 함수는 read()입니다.
미니 프로젝트
파이썬 파일 입출력을 이용하여 다양한 미니 프로젝트를 구현해볼 수 있습니다. 이번 강의에서는 파일 입출력을 활용하여 간단한 미니 프로젝트를 만들어보는 방법을 알아보도록 하겠습니다.
메모장
파이썬을 이용하여 간단한 메모장을 만들어볼 수 있습니다. 이를 위해서는 파일 입출력이 필요합니다. 다음은 메모장의 예제입니다.
while True:
menu = input("메뉴를 선택하세요: (1) 쓰기 (2) 읽기 (3) 종료 ")
if menu == "1":
memo = input("메모를 입력하세요: ")
with open("memo.txt", "a") as f:
f.write(memo + "\n")
print("메모가 저장되었습니다.")
elif menu == "2":
with open("memo.txt", "r") as f:
memo = f.read()
print(memo)
elif menu == "3":
print("메모장을 종료합니다.")
break
위 코드에서 사용자는 쓰기, 읽기, 종료 중 하나의 메뉴를 선택할 수 있습니다. 쓰기 메뉴를 선택하면 사용자가 입력한 메모를 memo.txt 파일에 저장하고, 읽기 메뉴를 선택하면 memo.txt 파일을 읽어와서 출력합니다. 이를 반복하여 사용자가 종료 메뉴를 선택할 때까지 실행됩니다.
CSV 파일 처리
CSV 파일은 쉼표로 구분된 데이터 파일입니다. 이를 파이썬으로 처리하면 다양한 분야에서 활용할 수 있는데, 예를 들어 주식 데이터를 저장하는 CSV 파일을 읽어와서 데이터를 처리하거나, 시각화할 수 있습니다. 다음은 CSV 파일 처리의 예제입니다.
import csv
with open("data.csv", "r", encoding="utf-8") as f:
reader = csv.reader(f)
for row in reader:
print(row)
위 코드에서는 data.csv 파일을 읽어와서 각 행을 출력합니다. 이를 활용하여 데이터를 가공하거나, 그래프로 시각화해볼 수 있습니다.
이상으로 파일 입출력을 활용한 간단한 미니 프로젝트를 만들어보았습니다. 파일 입출력을 이용하면 다양한 프로그램을 구현해볼 수 있으니, 여러분들도 다양한 아이디어를 가지고 미니 프로젝트를 만들어보세요!
10. 예외 처리
예외의 개념
예외는 프로그램 실행 중에 발생하는 오류를 말합니다. 예외는 프로그램이 예기치 않게 종료되는 것을 방지할 수 있습니다.
예외 처리는 예외가 발생했을 때 프로그램이 정상적으로 종료되도록 하는 것입니다. 예외 처리는 try-except 문을 사용하여 처리할 수 있습니다.
try-except 문 try-except 문은 예외 처리에 가장 기본적인 구문입니다. try 블록 안에 실행할 코드를 작성하고 except 블록 안에 예외가 발생했을 때 실행할 코드를 작성합니다.
try:
# 실행할 코드
a = 10 / 0
except:
# 예외가 발생했을 때 실행할 코드
print("예외가 발생했습니다.")
위의 예제에서는 0으로 나누기를 시도하고 있으므로 ZeroDivisionError 예외가 발생합니다. except 블록에서는 "예외가 발생했습니다."를 출력하고 프로그램이 종료됩니다.
try-except-else 문
try-except-else 문은 try 블록 안에 실행할 코드가 성공적으로 완료되었을 때 실행할 코드를 추가로 작성할 수 있습니다.
try:
# 실행할 코드
a = 10 / 2
except:
# 예외가 발생했을 때 실행할 코드
print("예외가 발생했습니다.")
else:
# try 블록이 성공적으로 완료되었을 때 실행할 코드
print("결과 : ", a)
위의 예제에서는 try 블록이 성공적으로 완료되므로 else 블록이 실행되어 "결과 : 5"가 출력됩니다.
try-except-finally 문
try-except-finally 문은 try 블록 안에 실행할 코드와 except 블록 안에 예외가 발생했을 때 실행할 코드 뿐만 아니라, finally 블록 안에 항상 실행할 코드를 작성할 수 있습니다.
try:
# 실행할 코드
a = 10 / 0
except:
# 예외가 발생했을 때 실행할 코드
print("예외가 발생했습니다.")
finally:
# 항상 실행할 코드
print("프로그램이 종료되었습니다.")
위의 예제에서는 0으로 나누기를 시도하고 있으므로 except 블록에서 "예외가 발생했습니다."를 출력하고, finally 블록에서 "프로그램이 종료되었습니다."를 출력합니다.
퀴즈
- try-except-finally 문에서 finally 블록은 언제 실행됩니까? a. try 블록이 실행될 때 b. except 블록이 실행될 때 c. try 블록이 성공적으로 실행된 후, except 블록이 실행된 후 d. 예외가 발생하든 발생하지 않든 항상 실행됨
정답: d
해설: finally 블록은 항상 실행됩니다. 예외가 발생하더라도, 발생하지 않더라도 finally 블록은 실행됩니다.
- 다음 중 try-except 문의 구문 중 try와 except 사이에 위치할 수 있는 블록은 무엇입니까? a. else b. finally c. if d. while
정답: a
해설: try-except-else 문에서는 try와 except 사이에 else 블록이 위치할 수 있습니다.
- 다음 중 예외 처리의 목적은 무엇입니까? a. 예외를 발생시키는 것 b. 예외가 발생할 가능성을 없애는 것 c. 예외가 발생해도 프로그램이 정상적으로 종료될 수 있도록 하는 것 d. 예외가 발생하면 프로그램을 강제로 종료시키는 것
정답: c
해설: 예외 처리는 예외가 발생해도 프로그램이 정상적으로 종료될 수 있도록 하는 것입니다.
- try-except 문에서 except 블록은 언제 실행됩니까? a. try 블록이 실행되는 중 예외가 발생했을 때 b. except 블록이 실행되는 중 예외가 발생했을 때 c. try 블록이 성공적으로 실행된 후 d. try 블록이 실행되지 않을 때
정답: a
해설: except 블록은 try 블록이 실행되는 중 예외가 발생했을 때 실행됩니다.
- 다음 중 파일 입출력과 관련된 구문은 무엇입니까? a. try-except-finally 문 b. with 구문 c. if 문 d. while 문
정답: b
해설: 파일 입출력과 관련된 구문은 with 구문입니다. with 구문을 사용하면 파일을 열고 닫는 것을 자동으로 처리할 수 있습니다.
파이썬 진수 변환
파이썬에서는 16진수를 10진수로 변환하는 내장 함수 int()
를 제공합니다. int() 함수는 두 개의 인자를 받습니다. 첫 번째 인자는 변환할 16진수 값이고, 두 번째 인자는 변환할 값을 표현하는 문자열의 진법(base)입니다. 따라서, 16진수를 10진수로 변환하려면 int() 함수에 16진수 값을 전달하고, 두 번째 인자로 16을 전달하면 됩니다.
다음은 int() 함수를 사용하여 16진수를 10진수로 변환하는 간단한 예제입니다.
hex_str = "7F"
decimal_value = int(hex_str, 16)
print(decimal_value)
위 코드에서 int() 함수에 hex_str 변수와 16 값을 전달하여 16진수를 10진수로 변환했습니다. print() 함수로 변환된 값을 출력합니다. 출력 결과는 127이 됩니다.
이외에도 파이썬에서는 bin(), oct(), hex() 함수를 사용하여 2진수, 8진수, 16진수를 각각 10진수로 변환할 수 있습니다. 예를 들어, int("1010", 2)는 2진수 1010을 10진수로 변환하며, int("10", 8)은 8진수 10을 10진수로 변환합니다.
Bytes
Bytes
는 바이트(byte)의 배열을 나타내는 데이터 타입입니다. 바이트(byte)는 8비트(8 bits)를 나타내며, 0부터 255까지의 값을 가질 수 있습니다.
Bytes는 bytes()
함수를 사용하여 생성할 수 있습니다.
b = bytes([0, 1, 2, 3, 4])
print(b) # 출력 결과: b'\x00\x01\x02\x03\x04'
위 코드에서 bytes() 함수는 인자로 리스트(list)나 튜플(tuple)을 받아 바이트 배열을 생성합니다. print() 함수로 Bytes 값을 출력할 때에는 접두어로 b가 붙습니다.
Bytes는 문자열을 바이트(byte)로 변환하는 데에도 사용됩니다. 이때 문자열은 encode() 함수를 사용하여 Bytes로 변환할 수 있습니다.
s = "hello"
b = s.encode()
print(b) # 출력 결과: b'hello'
위 코드에서 encode()
함수를 사용하여 문자열을 Bytes로 변환했습니다.
Bytes는 바이트(byte)로 이루어진 데이터를 다룰 때 사용됩니다. 예를 들어, 이미지나 음악 파일 등의 데이터를 바이트(byte)로 표현할 때에는 Bytes를 사용합니다.
Bytes는 문자열과는 달리 수정이 불가능합니다. 바이트(byte) 배열 자체를 수정할 수는 없으며, 새로운 Bytes를 생성하여 수정할 수 있습니다.
b = bytes([0, 1, 2, 3, 4])
# b[0] = 5 # TypeError: 'bytes' object does not support item assignment
b = bytes([5, 1, 2, 3, 4])
print(b) # 출력 결과: b'\x05\x01\x02\x03\x04'
위 코드에서 b[0] = 5
와 같은 코드는 실행 시 TypeError 예외가 발생합니다. 따라서 새로운 Bytes를 생성하여 수정할 수 있습니다.
Bytes는 이진 파일(binary file)을 다루거나 네트워크 통신에서 데이터를 전송하는 데에도 사용됩니다. 이외에도 다양한 분야에서 바이트(byte)로 이루어진 데이터를 다룰 때에는 Bytes를 사용합니다.
클래스
정보처리기능사 실기 문제: 클래스 내 배열 요소의 첫 글자 추출
파일명: extract_first_letters.py
다음 Python 코드는 CharClass
라는 클래스 내에 문자열 배열을 정의하고, 이 배열의 각 요소에서 첫 글자를 추출하여 새로운 문자열을 생성한 후 출력하는 예제입니다.
class CharClass:
a = ['Seoul', 'Kyeongi', 'Inchon', 'Daejeon', 'Daegu', 'Pusan']
myVar = CharClass()
str01 = ' '
for i in myVar.a:
str01 = str01 + i[0]
print(str01)
문제 설명:
- 위
extract_first_letters.py
파일에 작성된 코드를 실행했을 때의 출력 결과를 예측하세요. CharClass
클래스에 정의된 문자열 배열a
의 각 요소에 대해, 요소의 첫 글자를 추출하여 새로운 문자열str01
에 추가합니다. 초기str01
값은 공백' '
으로 시작됩니다.
정답 예측:
- 출력 결과는
SKIDDP
입니다. 배열의 각 요소인 'Seoul', 'Kyeongi', 'Inchon', 'Daejeon', 'Daegu', 'Pusan'에서 첫 글자를 순서대로 추출하여 생성된 문자열입니다. 문자열은 초기 공백을 포함하여 시작합니다.
이 문제는 클래스의 사용, 배열의 순회, 그리고 문자열 조작 기법을 이해하는 데 중점을 둡니다.
PyPI
PyPI는 Python Package Index의 약자로, Python 프로그래밍 언어를 위한 소프트웨어 저장소입니다. PyPI는 개발자들이 Python 라이브러리와 애플리케이션을 공유하고 다른 사람들이 사용할 수 있도록 하는 플랫폼입니다. 사용자는 PyPI를 통해 필요한 패키지를 검색하고, 설치하며, 자신의 프로젝트에 적용할 수 있습니다.
PyPI는 Python 개발자 커뮤니티에 필수적인 자원으로, 수천 개의 패키지를 포함하고 있으며, 이들 패키지는 다양한 목적과 필요를 충족시키기 위해 만들어졌습니다. pip
라는 명령어를 사용하여 패키지를 쉽게 설치할 수 있으며, 이는 Python에 기본으로 포함된 패키지 관리자입니다.
PyPI는 다음과 같은 주요 기능을 제공합니다:
- 패키지 호스팅: 개발자는 자신이 개발한 라이브러리나 애플리케이션을 PyPI에 업로드하여 전 세계 다른 개발자들과 공유할 수 있습니다.
- 패키지 검색과 설치: 사용자는 웹사이트를 통해 필요한 패키지를 검색하고,
pip
를 사용하여 이를 설치할 수 있습니다. - 의존성 관리: PyPI와
pip
는 패키지의 의존성을 자동으로 관리해줍니다. 즉, 어떤 패키지를 설치할 때 필요한 다른 패키지들도 함께 설치해 줍니다. - 버전 관리: 개발자는 패키지의 새로운 버전을 PyPI에 업로드할 수 있으며, 사용자는 특정 버전의 패키지를 선택하여 설치할 수 있습니다.
PyPI는 Python 생태계에서 중추적인 역할을 하며, 개발자가 소프트웨어를 더 빠르고 쉽게 개발할 수 있도록 지원합니다. PyPI를 통해 Python 커뮤니티는 계속해서 성장하고, 다양한 도메인에서 Python의 사용을 확대하고 있습니다.
PIP
pip
는 Python 패키지를 설치하고 관리하기 위한 표준 패키지 관리자입니다. Python 2.7.9 이상과 Python 3.4 이상에 기본으로 포함되어 있으며, Python 커뮤니티에서 널리 사용됩니다. pip
는 Python Package Index(PyPI)에서 호스팅되는 수천 개의 패키지에 대한 설치 및 관리를 간편하게 해줍니다.
주요 기능
- 패키지 설치:
pip
를 사용하여 PyPI에서 패키지를 쉽게 설치할 수 있습니다. 사용자는 명령어 한 줄로 필요한 패키지를 설치할 수 있습니다. - 패키지 제거: 설치된 패키지를 제거하는 기능도 지원합니다.
- 패키지 목록 및 정보 조회: 시스템에 설치된 패키지 목록을 조회하고, 특정 패키지에 대한 정보를 얻을 수 있습니다.
- 패키지 의존성 관리:
pip
는 패키지를 설치할 때 필요한 의존성을 자동으로 처리합니다. 즉, 어떤 패키지를 설치할 때 그 패키지가 의존하는 다른 패키지들도 함께 설치됩니다. - 패키지 버전 관리: 사용자는 특정 버전의 패키지를 설치하거나 업그레이드할 수 있습니다. 또한, 패키지의 최신 버전으로 업그레이드하는 기능도 제공합니다.
사용 예시
- 패키지 설치:
pip install package_name
- 특정 버전의 패키지 설치:
pip install package_name==version
- 패키지 업그레이드:
pip install --upgrade package_name
- 설치된 패키지 목록 조회:
pip list
- 패키지 정보 조회:
pip show package_name
- 패키지 제거:
pip uninstall package_name
pip
는 Python 개발의 필수 도구 중 하나로, 개발자가 필요한 라이브러리를 쉽게 찾아서 설치할 수 있게 해주며, 프로젝트의 의존성 관리를 간편하게 해줍니다. PyPI와 함께 Python 생태계의 핵심 요소 중 하나입니다.