파이썬 프로그래밍 기초

파이썬 프로그래밍 기초

안녕하세요! IT 세계에 첫 발을 내딛는 여러분, 또는 파이썬이라는 매력적인 언어에 대해 더 깊이 알고 싶은 여러분 모두를 진심으로 환영합니다. 오늘은 파이썬 프로그래밍 기초라는 여정을 함께 떠날 텐데요. 이 멋진 여정에서 여러분은 코딩의 재미를 발견하고, 논리적인 사고력을 키우며, 상상하는 모든 것을 현실로 만들어낼 수 있는 강력한 도구를 손에 넣게 될 것입니다. 프로그래밍이라고 하면 왠지 어렵고 딱딱하게 느껴질 수 있지만, 파이썬은 마치 친구와 대화하듯 쉽고 자연스럽게 배울 수 있도록 디자인된 언어랍니다. 어렵다고 지레 겁먹지 마세요! 저와 함께라면 파이썬 프로그래밍 기초를 탄탄하게 다지고, 앞으로 나아갈 길을 명확하게 볼 수 있을 거예요. 이 글은 여러분이 파이썬 프로그래밍 기초를 확실히 이해하고, 자신감을 가지고 코딩의 세계를 탐험할 수 있도록 돕기 위해 준비되었습니다. 함께 즐겁게 배워봅시다!

파이썬, 왜 배워야 할까요?

우리가 왜 파이썬을 배워야 하는지에 대해 먼저 이야기해 보는 시간을 갖도록 하겠습니다. 파이썬은 오늘날 IT 업계에서 가장 인기 있고 널리 사용되는 프로그래밍 언어 중 하나입니다. 그 이유는 무엇일까요? 바로 파이썬의 뛰어난 가독성과 배우기 쉬운 문법 덕분에 초보자들도 빠르게 코딩의 즐거움을 느낄 수 있다는 점입니다. 마치 외국어를 배울 때, 알파벳부터 시작해서 단어를 익히고 문장을 만드는 것처럼, 파이썬도 기본적인 문법을 배우면 아주 복잡한 작업도 간단하게 수행할 수 있습니다. 예를 들어, 복잡한 계산을 해야 할 때도 파이썬을 사용하면 몇 줄의 코드로 해결할 수 있죠. 또한, 파이썬은 다양한 분야에서 활용된다는 큰 장점을 가지고 있습니다. 웹 개발, 데이터 과학, 인공지능, 자동화, 게임 개발 등 상상하는 거의 모든 분야에서 파이썬을 만날 수 있습니다. 이는 파이썬의 강력한 기능과 함께, 수많은 라이브러리와 프레임워크 덕분입니다. 이러한 라이브러리들은 이미 잘 만들어진 코드 조각들이라고 생각하시면 됩니다. 예를 들어, 웹사이트를 만들고 싶다면 Django나 Flask와 같은 프레임워크를, 데이터를 분석하고 싶다면 Pandas나 NumPy와 같은 라이브러리를 사용하면 됩니다. 이렇게 파이썬은 여러분의 아이디어를 현실로 만드는 데 있어 가장 강력하고 효율적인 도구 중 하나가 될 수 있습니다. 파이썬 커뮤니티의 활발함 또한 빼놓을 수 없는 장점입니다. 궁금한 점이 생기거나 어려운 문제에 봉착했을 때, 전 세계의 수많은 파이썬 개발자들이 도움을 주고받는 온라인 커뮤니티를 통해 쉽게 해결책을 찾을 수 있습니다. 이는 마치 넓은 도서관에서 원하는 정보를 쉽게 찾는 것과 같습니다. 파이썬은 미래를 위한 투자라고 해도 과언이 아닙니다. IT 기술이 발전함에 따라 데이터의 중요성은 더욱 커지고 있고, 인공지능 기술은 우리 삶의 많은 부분을 변화시키고 있습니다. 파이썬은 이러한 변화의 중심에 서 있는 언어이며, 파이썬을 배우는 것은 미래 사회에서 여러분의 경쟁력을 높이는 데 큰 도움이 될 것입니다. 특히, 코딩 경험이 전혀 없는 분들에게도 파이썬은 가장 친절한 안내자가 되어줄 것입니다. 어렵게 느껴지는 문법이나 복잡한 개념들도 차근차근 설명해 드릴 테니, 편안한 마음으로 함께 학습해나가도록 해요. 파이썬의 직관적인 문법은 마치 우리가 평소에 사용하는 자연어와 유사한 부분이 많아, 코드를 읽고 이해하는 데에도 큰 어려움이 없습니다. 예를 들어, '만약 ~라면'과 같은 조건문이나 '반복해서 ~하라'와 같은 반복문은 인간의 사고방식과 매우 유사하게 표현됩니다. 이러한 특징 덕분에 파이썬은 코딩 입문자들에게 가장 추천되는 언어 중 하나로 자리매김했습니다. 파이썬의 방대한 생태계는 또한 여러분이 원하는 어떤 프로젝트든 시작할 수 있는 기반을 제공합니다. 웹사이트를 구축하는 것부터 시작해서, 복잡한 수학적 계산을 수행하거나, 데이터를 시각화하여 인사이트를 얻거나, 심지어는 간단한 게임을 만드는 것까지, 파이썬은 이 모든 것을 가능하게 하는 강력한 도구 상자와 같습니다. 파이썬의 활용 범위는 끊임없이 확장되고 있으며, 새로운 라이브러리와 기술들이 계속해서 개발되고 있습니다. 이는 파이썬이 단순한 프로그래밍 언어를 넘어, 미래 기술 트렌드를 이끄는 핵심 동력 중 하나로 평가받는 이유입니다. 파이썬의 배우기 쉬운 문법강력한 기능, 그리고 활발한 커뮤니티는 여러분이 코딩 여정을 즐겁고 성공적으로 시작할 수 있도록 돕는 든든한 지원군이 될 것입니다. 파이썬은 단순한 코딩 기술을 넘어, 문제 해결 능력과 논리적 사고력을 향상시키는 데에도 탁월한 효과를 발휘합니다. 코드를 작성하고 오류를 수정하는 과정에서 우리는 자연스럽게 문제에 대한 다양한 해결 방안을 모색하게 되며, 이는 곧 논리적 사고력의 향상으로 이어집니다. 파이썬 프로그래밍 기초를 다지는 것은 여러분의 미래를 위한 가장 현명한 선택 중 하나가 될 것입니다.

파이썬 설치 및 개발 환경 설정

자, 이제 파이썬의 매력에 푹 빠지셨다면, 실제로 코드를 작성하고 실행해 볼 차례입니다. 파이썬을 사용하기 위해서는 먼저 여러분의 컴퓨터에 파이썬을 설치하고, 코드를 작성하고 실행할 수 있는 환경을 설정해야 합니다. 마치 그림을 그리기 전에 붓과 물감을 준비하는 것처럼 말이죠. 걱정 마세요, 이 과정 또한 매우 간단합니다! 가장 먼저 할 일은 파이썬 공식 웹사이트에 방문하는 것입니다. 웹사이트 주소는 www.python.org 입니다. 여기서 최신 버전의 파이썬 설치 파일을 다운로드 받을 수 있습니다. 여러분의 운영체제(Windows, macOS, Linux)에 맞는 버전을 선택하시면 됩니다. 설치 과정은 일반적인 소프트웨어 설치와 크게 다르지 않습니다. 다운로드 받은 파일을 실행하고, 화면에 나오는 안내에 따라 몇 번의 클릭만으로 설치를 완료할 수 있습니다. 여기서 매우 중요한 한 가지 팁이 있습니다. 설치 과정 중에 'Add Python to PATH' 또는 'Add python.exe to Path'와 같은 옵션이 있다면 반드시 체크해 주세요. 이 옵션을 선택하면 명령 프롬프트나 터미널에서 파이썬을 더 쉽게 실행할 수 있게 됩니다. 마치 여러분의 집 문 앞에 바로 연결되는 지름길을 만드는 것과 같습니다. 설치가 완료되면, 이제 코드를 작성하고 실행할 수 있는 도구가 필요합니다. 이를 통합 개발 환경(IDE, Integrated Development Environment) 또는 텍스트 에디터라고 부릅니다. 여러 가지 훌륭한 도구들이 있지만, 처음 시작하시는 분들에게는 Visual Studio Code (VS Code)PyCharm Community Edition을 추천해 드립니다. VS Code는 가볍고 빠르며, 다양한 확장 기능을 통해 파이썬 개발에 필요한 거의 모든 기능을 지원합니다. PyCharm은 파이썬 개발에 특화된 IDE로, 코드 자동 완성, 디버깅 등 강력한 기능을 제공하여 개발 생산성을 크게 높여줍니다. VS Code 설치는 역시 공식 웹사이트에서 다운로드 받아 진행하면 됩니다. 설치 후에는 'Python' 확장 프로그램을 설치해야 합니다. VS Code 내에서 확장 기능 탭을 열고 'Python'을 검색하여 설치하면 됩니다. 이 확장 프로그램은 파이썬 코드를 예쁘게 색칠해 주고, 오류를 찾아주며, 코드를 실행하는 데 필요한 기능들을 제공합니다. PyCharm 설치 역시 마찬가지로 공식 웹사이트에서 Community Edition을 다운로드 받아 설치하면 됩니다. PyCharm은 처음 실행 시 프로젝트를 생성하게 되는데, 이때 파이썬 인터프리터 설정을 올바르게 해주는 것이 중요합니다. 보통은 자동으로 인식하지만, 만약 제대로 설정되지 않았다면 설치된 파이썬의 경로를 직접 지정해 주어야 합니다. 이러한 개발 환경 설정은 처음에는 조금 복잡하게 느껴질 수 있지만, 한 번 설정해두면 앞으로의 코딩 생활이 훨씬 편해집니다. 마치 훌륭한 작업 공간을 마련하는 것과 같죠. 설치와 설정이 완료되었다면, 이제 간단한 코드를 작성하고 실행하여 모든 것이 제대로 작동하는지 확인해 볼 수 있습니다. 가장 기본적인 'Hello, World!' 프로그램을 실행해 봅시다. VS Code나 PyCharm에서 새로운 파이썬 파일을 만들고 (예: `hello.py`), 다음과 같이 코드를 작성합니다.

print("Hello, World!")

그리고 파일을 저장한 후, 터미널이나 IDE 내에서 해당 파일을 실행하면 화면에 "Hello, World!"라는 문구가 출력되는 것을 볼 수 있습니다. 이 작은 성공 경험이 앞으로의 학습에 큰 동기 부여가 될 것입니다. 혹시라도 오류가 발생한다면, 설치 과정에서 'Add Python to PATH'를 체크했는지, VS Code에 파이썬 확장 프로그램이 제대로 설치되었는지, PyCharm에서 인터프리터를 올바르게 설정했는지 등을 다시 한번 확인해 보세요. 실패는 성공의 어머니라는 말처럼, 오류를 해결하는 과정 자체가 훌륭한 학습 경험이 될 수 있습니다. 파이썬 설치 및 개발 환경 설정파이썬 프로그래밍 기초를 배우는 첫걸음이며, 이 단계를 성공적으로 마치면 여러분은 이미 코딩의 세계로 한 발짝 다가선 것입니다. 가장 중요한 것은 포기하지 않고 꾸준히 시도하는 것입니다.

파이썬 기본 문법: 변수와 자료형

이제 우리는 파이썬을 다룰 준비를 마쳤으니, 파이썬 코딩의 가장 기본적인 요소인 변수(Variables)자료형(Data Types)에 대해 자세히 알아보겠습니다. 변수란 데이터를 저장하는 공간에 붙이는 이름이라고 생각하면 쉽습니다. 마치 여러분의 물건에 이름을 붙여서 구분하는 것처럼요. 예를 들어, '이름'이라는 변수에 여러분의 이름을 저장할 수 있습니다. 파이썬에서는 `=` 기호를 사용하여 변수에 값을 할당합니다. 예를 들어, `name = "홍길동"`과 같이 작성하면, `name`이라는 변수에 "홍길동"이라는 문자열이 저장됩니다. 이 `name` 변수를 앞으로 코드 어디에서든 사용하면 "홍길동"이라는 값을 가져올 수 있습니다. 변수 이름을 지을 때는 몇 가지 규칙이 있습니다. 알파벳, 숫자, 밑줄(`_`)을 사용할 수 있지만, 숫자로 시작할 수는 없으며, 파이썬에서 이미 예약된 단어(예: `if`, `for`, `while`)는 사용할 수 없습니다. 변수 이름을 명확하고 이해하기 쉽게 짓는 것이 좋은 코딩 습관입니다. 예를 들어, `x = 10`보다는 `age = 10`이라고 짓는 것이 훨씬 의미를 잘 전달하죠.

파이썬은 다양한 종류의 자료형을 지원합니다. 데이터를 저장할 때 어떤 종류의 데이터인지 컴퓨터에게 알려주는 것이 중요합니다. 가장 기본적인 자료형 몇 가지를 살펴볼까요?

자료형 설명 예시
정수 (Integer) 소수점이 없는 숫자입니다. 나이, 개수 등을 나타낼 때 사용합니다. `10`, `-5`, `0`
실수 (Float) 소수점이 있는 숫자입니다. 키, 몸무게, 온도 등을 나타낼 때 사용합니다. `3.14`, `-2.5`, `0.0`
문자열 (String) 텍스트 데이터를 나타냅니다. 작은따옴표(`'`)나 큰따옴표(`"`)로 감싸서 표현합니다. `"안녕하세요"`, `'Python'`, `"123"`
불리언 (Boolean) 참(True) 또는 거짓(False) 두 가지 값만 가집니다. 조건문 등에서 사용됩니다. `True`, `False`

파이썬은 동적 타이핑(Dynamic Typing) 언어이기 때문에, 변수에 어떤 자료형의 값을 할당하느냐에 따라 그 변수의 자료형이 자동으로 결정됩니다. 예를 들어, `x = 10`이라고 하면 `x`는 정수형이 되고, `x = 3.14`라고 하면 `x`는 실수형이 됩니다. 매우 편리한 기능이지만, 때로는 예상치 못한 결과를 가져올 수도 있으니 주의해야 합니다. 변수의 자료형을 확인하고 싶을 때는 `type()` 함수를 사용하면 됩니다. 예를 들어, `print(type(name))`을 실행하면 `name` 변수가 어떤 자료형인지 출력해 줍니다. 변수와 자료형은 프로그래밍의 가장 기본적인 구성 요소입니다. 이들을 잘 이해하는 것은 앞으로 더 복잡한 코드를 작성하는 데 있어 필수적인 기초가 됩니다. 예를 들어, 여러분이 쇼핑몰 웹사이트를 만든다고 상상해 봅시다. 상품의 가격은 실수형으로, 상품의 개수는 정수형으로, 상품의 이름은 문자열로 저장해야 할 것입니다. 또한, 특정 상품이 재고가 있는지 없는지는 불리언 값으로 표현할 수 있습니다. 이처럼 다양한 자료형은 현실 세계의 데이터를 컴퓨터가 이해하고 처리할 수 있는 형태로 변환하는 데 중요한 역할을 합니다. 파이썬의 자료형은 매우 다양하며, 리스트(List), 튜플(Tuple), 딕셔너리(Dictionary), 세트(Set) 등 더 복잡한 자료 구조도 지원합니다. 하지만 파이썬 프로그래밍 기초에서는 주로 정수, 실수, 문자열, 불리언과 같은 기본 자료형에 집중하는 것이 좋습니다. 변수에 값을 할당할 때, 문자열은 반드시 따옴표로 감싸야 하지만, 숫자나 불리언 값은 따옴표 없이 그대로 사용합니다. 이 작은 차이가 프로그램의 동작에 큰 영향을 미칠 수 있습니다. 예를 들어, `"10"`이라는 문자열과 `10`이라는 정수는 분명히 다른 것입니다. 이 둘을 더하려고 하면 오류가 발생할 수 있습니다. 자료형 변환(Type Casting)이라는 것을 통해 한 자료형을 다른 자료형으로 바꿀 수도 있습니다. 예를 들어, `int("10")`을 하면 문자열 "10"이 정수 10으로 변환됩니다. 이처럼 데이터를 적절히 다루는 능력은 프로그래밍에서 매우 중요합니다. 파이썬 프로그래밍 기초에서는 이러한 변수와 자료형을 정확하게 이해하고 활용하는 연습을 꾸준히 하는 것이 가장 중요합니다. 다양한 예제를 통해 직접 변수를 선언하고 값을 할당하며, `type()` 함수로 자료형을 확인하는 연습을 반복해 보세요. 이 과정을 통해 여러분은 파이썬의 기본적인 데이터 처리 능력을 갖추게 될 것입니다.

연산자와 표현식

변수와 자료형을 배웠으니, 이제 이들을 가지고 무엇인가를 해볼 차례입니다. 바로 연산자(Operators)표현식(Expressions)입니다. 연산자는 특정 연산을 수행하도록 지시하는 기호이고, 표현식은 이러한 연산자와 피연산자(연산의 대상이 되는 값)들로 이루어진 코드 조각입니다. 마치 덧셈, 뺄셈, 곱셈, 나눗셈처럼 말이죠. 파이썬에는 다양한 종류의 연산자가 있습니다.

산술 연산자

가장 흔하게 사용하는 것은 산술 연산자입니다. 덧셈, 뺄셈, 곱셈, 나눗셈과 같은 기본적인 수학 연산을 수행할 때 사용합니다.

  • 덧셈 (+): 두 값을 더합니다. `5 + 3`은 8이 됩니다.
  • 뺄셈 (-): 첫 번째 값에서 두 번째 값을 뺍니다. `10 - 4`는 6이 됩니다.
  • 곱셈 (*): 두 값을 곱합니다. `6 * 7`은 42가 됩니다.
  • 나눗셈 (/): 첫 번째 값을 두 번째 값으로 나눕니다. 결과는 항상 실수가 됩니다. `10 / 2`는 5.0이 됩니다.
  • 몫 (//): 나눗셈의 몫만 정수로 반환합니다. `10 // 3`은 3이 됩니다.
  • 나머지 (%): 나눗셈의 나머지만 반환합니다. `10 % 3`은 1이 됩니다.
  • 제곱 (**): 첫 번째 값을 두 번째 값만큼 제곱합니다. `2 ** 3`은 8 (2의 3제곱)이 됩니다.

표현식의 예로는 `result = 10 + 5 * 2`와 같은 것을 들 수 있습니다. 이 표현식은 10과 5를 곱한 값(10)을 더한 후, 그 결과(20)를 `result`라는 변수에 저장합니다. 파이썬은 연산의 우선순위(Order of Operations)를 따릅니다. 일반적으로 곱셈, 나눗셈이 덧셈, 뺄셈보다 먼저 계산되며, 괄호 `()`를 사용하여 원하는 순서대로 계산을 강제할 수 있습니다. 예를 들어, `(10 + 5) * 2`는 30이 됩니다. 산술 연산자파이썬 프로그래밍 기초를 다지는 데 있어 매우 중요하며, 다양한 계산을 수행하는 데 기본적으로 사용됩니다. 간단한 계산기를 만드는 것부터 시작해서, 복잡한 알고리즘을 구현할 때까지 연산자는 필수적인 요소입니다.

비교 연산자

비교 연산자는 두 값을 비교하여 그 결과가 참인지 거짓인지를 판단할 때 사용합니다. 비교 연산자의 결과는 항상 불리언 값 (True 또는 False)으로 반환됩니다.

  • 같음 (==): 두 값이 같으면 True, 다르면 False를 반환합니다. `5 == 5`는 True, `5 == 6`은 False입니다.
  • 같지 않음 (!=): 두 값이 다르면 True, 같으면 False를 반환합니다. `5 != 6`은 True, `5 != 5`는 False입니다.
  • 크다 (>): 첫 번째 값이 두 번째 값보다 크면 True, 그렇지 않으면 False를 반환합니다. `10 > 5`는 True, `5 > 10`은 False입니다.
  • 작다 (<): 첫 번째 값이 두 번째 값보다 작으면 True, 그렇지 않으면 False를 반환합니다. `5 < 10`은 True, `10 < 5`는 False입니다.
  • 크거나 같음 (>=): 첫 번째 값이 두 번째 값보다 크거나 같으면 True, 그렇지 않으면 False를 반환합니다. `10 >= 5`는 True, `5 >= 10`은 False, `5 >= 5`는 True입니다.
  • 작거나 같음 (<=): 첫 번째 값이 두 번째 값보다 작거나 같으면 True, 그렇지 않으면 False를 반환합니다. `5 <= 10`은 True, `10 <= 5`는 False, `5 <= 5`는 True입니다.

비교 연산자는 조건문(`if` 문)에서 특정 조건이 만족될 때만 코드를 실행하도록 할 때 매우 유용합니다. 예를 들어, `if age >= 19:`와 같이 작성하면 `age` 변수의 값이 19 이상일 때만 `if` 블록 안의 코드가 실행됩니다. 이는 프로그램의 흐름을 제어하는 데 있어 핵심적인 역할을 합니다.

논리 연산자

논리 연산자는 두 개 이상의 불리언 값을 결합하여 하나의 불리언 값을 만들 때 사용합니다. 주로 여러 조건을 동시에 만족하거나, 만족하지 않는 경우를 검사할 때 사용합니다.

  • 그리고 (and): 두 조건이 모두 True일 때만 True를 반환합니다. `True and True`는 True, `True and False`는 False입니다.
  • 또는 (or): 두 조건 중 하나라도 True이면 True를 반환합니다. `True or False`는 True, `False or False`는 False입니다.
  • 아니다 (not): 조건의 결과를 반대로 바꿉니다. `not True`는 False, `not False`는 True입니다.

예를 들어, `if (age >= 19) and (country == "Korea"):` 와 같이 작성하면, 나이가 19세 이상이고 국가가 "Korea"일 때만 `if` 블록이 실행됩니다. 논리 연산자를 사용하면 더욱 복잡하고 정교한 조건 설정이 가능해집니다.

할당 연산자

할당 연산자는 변수에 값을 할당하는 데 사용하며, `=` 기호가 대표적입니다. 또한, 산술 연산과 할당을 결합한 형태도 있습니다.

  • `+=`: `x += 5`는 `x = x + 5`와 같습니다.
  • `-=`: `x -= 3`은 `x = x - 3`과 같습니다.
  • `*=`: `x *= 2`는 `x = x * 2`와 같습니다.
  • `/=`: `x /= 4`는 `x = x / 4`와 같습니다.

이러한 할당 연산자들은 코드를 더 간결하게 만들어 줍니다. 반복적인 변수 할당에서 코드를 줄여주는 역할을 하죠. 파이썬 프로그래밍 기초에서 연산자와 표현식을 제대로 이해하는 것은 매우 중요합니다. 이를 통해 우리는 데이터를 조작하고, 조건을 비교하며, 프로그램의 논리를 효과적으로 구현할 수 있습니다. 일상생활에서 계산을 하거나, 여러 조건을 따져보는 것과 같이, 코딩에서도 이러한 연산과 논리적 판단은 필수적입니다.

제어문: 조건문과 반복문

프로그램은 단순히 명령을 순차적으로 실행하는 것 이상으로, 특정 조건에 따라 다르게 동작하거나, 특정 작업을 반복해야 하는 경우가 많습니다. 이때 사용되는 것이 바로 제어문(Control Flow Statements)입니다. 제어문은 프로그램의 실행 흐름을 제어하는 역할을 하며, 크게 조건문반복문으로 나눌 수 있습니다. 제어문을 잘 활용하는 것은 프로그램을 더욱 똑똑하고 유연하게 만드는 핵심입니다.

조건문 (if, elif, else)

조건문은 특정 조건이 참(True)일 때만 특정 코드 블록을 실행하도록 합니다. 파이썬에서는 `if`, `elif`(else if의 줄임말), `else` 키워드를 사용하여 조건문을 구현합니다.

  • if 문: 가장 기본적인 조건문입니다. `if` 뒤에 오는 조건식이 참이면, `if` 블록 안의 코드를 실행합니다.
  • elif 문: 여러 조건을 순차적으로 검사할 때 사용합니다. 앞선 `if` 또는 `elif` 조건이 거짓일 경우, `elif` 뒤의 조건식을 검사하여 참이면 해당 블록을 실행합니다. 여러 개의 `elif`를 사용할 수 있습니다.
  • else 문: 앞선 모든 `if` 및 `elif` 조건이 거짓일 경우, 마지막으로 실행될 코드 블록을 지정합니다. `else` 뒤에는 별도의 조건이 붙지 않습니다.

예시를 통해 좀 더 자세히 살펴볼까요? 만약 여러분이 시험 점수에 따라 학점을 부여하는 프로그램을 만든다고 가정해 봅시다.

score = 85

if score >= 90:

print("학점: A")

elif score >= 80:

print("학점: B")

elif score >= 70:

print("학점: C")

else:

print("학점: D")

이 코드에서 `score` 변수의 값이 85이므로, 첫 번째 `if` 조건(`score >= 90`)은 거짓입니다. 따라서 다음 `elif` 조건(`score >= 80`)을 검사하게 되고, 이 조건은 참입니다. 그래서 "학점: B"가 출력됩니다. 만약 `score`가 95였다면, 첫 번째 `if` 조건이 참이 되어 "학점: A"가 출력되고, 나머지 `elif`와 `else` 블록은 실행되지 않습니다. 이처럼 조건문은 프로그램이 다양한 상황에 유연하게 대처할 수 있도록 해주는 매우 강력한 도구입니다. 조건문을 사용할 때는 콜론(`:`)과 들여쓰기(indentation)에 주의해야 합니다. 파이썬은 들여쓰기를 통해 코드 블록을 구분하기 때문에, 올바른 들여쓰기는 필수입니다. 들여쓰기는 보통 4개의 공백으로 이루어집니다. 이 규칙을 지키지 않으면 문법 오류가 발생할 수 있습니다.

반복문 (for, while)

반복문은 특정 코드를 여러 번 반복해서 실행해야 할 때 사용합니다. 파이썬에는 주로 두 가지 종류의 반복문이 있습니다.

for 반복문

for 반복문은 주로 시퀀스(리스트, 튜플, 문자열 등)의 각 항목에 대해 반복하거나, 정해진 횟수만큼 반복할 때 사용됩니다. `range()` 함수와 함께 사용되는 경우가 많습니다.

  • for item in sequence:

예시: 1부터 5까지의 숫자를 출력하는 경우

for i in range(1, 6):

print(i)

이 코드는 1부터 5까지 (6은 포함되지 않음) 각 숫자에 대해 `print(i)`를 실행합니다. 따라서 1, 2, 3, 4, 5가 순서대로 출력됩니다. `range()` 함수는 시작값, 끝값(포함되지 않음), 그리고 선택적으로 증가값(step)을 인자로 받을 수 있습니다.

while 반복문

while 반복문은 특정 조건이 참인 동안 계속해서 코드 블록을 반복 실행합니다. 조건이 거짓이 되면 반복을 멈춥니다.

  • while condition:

예시: 0부터 9까지 숫자를 출력하는 경우 (for 반복문과 동일한 결과)

count = 0

while count < 10:

print(count)

count = count + 1 # count += 1 과 동일

이 코드에서는 `count` 변수가 10보다 작은 동안 `print(count)`와 `count = count + 1`을 반복합니다. `count`가 9가 되고, 이 경우에도 `count < 10` 조건은 참이므로 9를 출력하고 `count`를 10으로 만듭니다. 다음 반복에서 `count`는 10이 되고, `count < 10` 조건은 거짓이 되어 반복이 종료됩니다. `while` 반복문은 반복 횟수가 정해져 있지 않고, 특정 조건이 만족될 때까지 계속 실행해야 하는 경우에 유용합니다.

무한 루프(Infinite Loop)에 대한 주의도 필요합니다. `while` 반복문의 조건이 항상 참이 되어 프로그램이 멈추지 않고 계속 실행되는 경우를 말합니다. 예를 들어, `while True:`로 시작하면 무한 루프가 발생합니다. 이런 경우 프로그램을 강제로 종료해야 할 수 있습니다. 반복문조건문파이썬 프로그래밍 기초에서 가장 중요하고도 기본적인 제어 구조입니다. 이 두 가지를 능숙하게 사용하면 거의 모든 종류의 알고리즘과 프로그램 로직을 구현할 수 있습니다. 실제 프로그래밍에서는 이 두 가지를 조합하여 더욱 복잡하고 효율적인 코드를 작성하게 됩니다. 제어문을 배우는 것은 여러분이 컴퓨터에게 "무엇을", "언제", "어떻게" 해야 하는지 명확하게 지시하는 방법을 익히는 과정이라고 할 수 있습니다. 이러한 제어문의 이해는 파이썬 프로그래밍 기초 학습의 핵심입니다.

함수: 코드 재사용의 마법

우리는 코드를 작성하다 보면, 특정 작업을 반복적으로 수행해야 하는 경우가 종종 발생합니다. 예를 들어, 두 숫자를 더하는 코드나, 특정 문자열을 출력하는 코드를 여러 곳에서 사용해야 할 수 있습니다. 이때마다 같은 코드를 반복해서 작성하는 것은 비효율적이며, 코드의 가독성도 떨어뜨립니다. 이러한 문제를 해결하기 위해 함수(Functions)라는 개념을 사용합니다. 함수는 특정 작업을 수행하는 코드의 묶음이며, 필요할 때마다 이름을 불러서 호출(실행)할 수 있습니다. 마치 요리 레시피처럼, 특정 음식을 만드는 과정을 하나의 레시피로 정의해두고 필요할 때마다 그 레시피를 따라 음식을 만드는 것과 같습니다. 함수를 사용하면 코드를 재사용할 수 있고, 프로그램을 더 모듈화하여 관리하기 쉽게 만들 수 있습니다. 또한, 가독성유지보수성을 크게 향상시킬 수 있습니다.

함수 정의하기

파이썬에서 함수를 정의할 때는 `def` 키워드를 사용합니다. 기본적인 함수 정의 형식은 다음과 같습니다.

  • def function_name(parameters):
  • # 함수 본문 (수행할 코드)
  • # return value (선택 사항)

여기서 `function_name`은 함수에 부여할 이름이며, `parameters`는 함수가 외부로부터 받을 수 있는 입력 값(인자, arguments)입니다. 매개변수(parameter)는 필요 없으면 생략할 수 있습니다. 함수 본문에는 해당 함수가 수행할 실제 코드가 작성됩니다. `return` 문은 함수가 실행된 후, 호출한 곳으로 반환할 값을 지정합니다. `return` 문이 없거나 `return` 뒤에 값이 없으면, 함수는 `None` 값을 반환합니다.

예시: 두 숫자를 더하는 함수

def add_numbers(a, b):

"""이 함수는 두 숫자를 받아서 더한 결과를 반환합니다."""

sum_result = a + b

return sum_result

위 예시에서 `add_numbers`는 함수의 이름이고, `a`와 `b`는 두 개의 매개변수입니다. 함수 내부에서는 `a`와 `b`를 더한 값을 `sum_result` 변수에 저장하고, `return sum_result`를 통해 그 값을 반환합니다. 함수 정의 바로 아래에 있는 문자열은 독스트링(Docstring)이라고 하며, 함수의 목적이나 사용법을 설명하는 주석 역할을 합니다. 코드를 이해하는 데 큰 도움이 되므로 습관적으로 작성하는 것이 좋습니다.

함수 호출하기

함수를 정의했다면, 이제 실제로 사용(호출)해야 합니다. 함수를 호출할 때는 함수 이름 뒤에 괄호를 붙이고, 함수가 요구하는 매개변수 개수만큼의 인자를 전달합니다.

result = add_numbers(5, 3)

print(result) # 출력: 8

위 코드에서 `add_numbers(5, 3)`은 `add_numbers` 함수를 호출하면서 `a`에는 5를, `b`에는 3을 전달하는 것입니다. 함수는 이 값을 받아 더한 결과인 8을 반환하고, 이 8이라는 값이 `result` 변수에 저장됩니다. 함수 호출은 코드를 훨씬 간결하고 구조적으로 만들어 줍니다.

매개변수의 종류

파이썬 함수는 다양한 방식으로 매개변수를 받을 수 있습니다.

  • 위치 기반 매개변수 (Positional Arguments): 함수 호출 시 인자의 순서에 따라 매개변수에 값이 할당됩니다. 위 `add_numbers(5, 3)` 예시가 이에 해당합니다.
  • 키워드 매개변수 (Keyword Arguments): 함수 호출 시 `매개변수이름=값` 형식으로 인자를 전달합니다. 인자의 순서에 상관없이 값을 전달할 수 있습니다.

예시: 키워드 매개변수 사용

def greet(name, message):

print(f"Hello {name}! {message}")

greet(name="Alice", message="Nice to meet you!") # 출력: Hello Alice! Nice to meet you!

greet(message="How are you?", name="Bob") # 순서가 달라도 문제 없음

위 예시처럼, `name="Alice"`와 같이 명시적으로 인자를 전달하면, 함수 호출 시 인자의 순서가 바뀌어도 올바르게 동작합니다. 키워드 매개변수는 코드를 더 읽기 쉽게 만들고, 함수의 가독성을 높이는 데 도움이 됩니다.

반환 값 (Return Values)

앞서 이야기했듯이, 함수는 `return` 문을 통해 값을 반환할 수 있습니다. 하나의 함수에서 여러 개의 값을 반환하는 것도 가능합니다. 파이썬에서는 여러 값을 튜플 형태로 묶어서 반환합니다.

def get_coordinates():

x = 10

y = 20

return x, y # (10, 20) 튜플을 반환

x_coord, y_coord = get_coordinates()

print(f"X: {x_coord}, Y: {y_coord}") # 출력: X: 10, Y: 20

이처럼 함수를 사용하면 복잡한 작업을 작은 단위로 나누어 관리하고, 코드의 재사용성을 높여 생산성을 크게 향상시킬 수 있습니다. 파이썬 프로그래밍 기초에서 함수는 빼놓을 수 없는 핵심 개념이며, 이것을 제대로 이해하고 활용하는 것이 파이썬 프로그래밍 실력 향상의 지름길입니다. 함수를 통해 여러분의 코드는 훨씬 더 깔끔하고, 효율적이며, 유지보수하기 쉬운 코드가 될 것입니다.

데이터 구조: 리스트와 튜플

앞서 우리는 변수에 단일 값을 저장하는 방법을 배웠습니다. 하지만 실제 프로그래밍에서는 여러 개의 데이터를 한 번에 관리해야 하는 경우가 많습니다. 예를 들어, 학생들의 이름 목록, 상품 가격 목록, 혹은 여러 개의 온도 값 등을 저장해야 할 때가 있습니다. 이때 유용하게 사용되는 것이 바로 데이터 구조(Data Structures)입니다. 파이썬에서는 이러한 여러 데이터를 효율적으로 저장하고 관리하기 위해 리스트(List)튜플(Tuple)과 같은 강력한 데이터 구조를 제공합니다. 이들을 잘 이해하고 활용하는 것은 파이썬 프로그래밍 기초 학습의 중요한 단계입니다.

리스트 (List)

리스트는 순서가 있는 변경 가능한(mutable) 객체의 모음입니다. 즉, 리스트에 저장된 데이터의 순서가 중요하며, 리스트를 생성한 후에도 항목을 추가하거나 삭제하거나 변경할 수 있습니다. 리스트는 대괄호 `[]`를 사용하여 생성하며, 각 항목은 쉼표(`,`)로 구분합니다. 리스트의 항목들은 서로 다른 자료형을 가질 수도 있습니다.

예시: 과일 리스트

fruits = ["사과", "바나나", "체리", "오렌지"]

print(fruits)

# 출력: ['사과', '바나나', '체리', '오렌지']

리스트 인덱싱 (List Indexing)

리스트의 각 항목은 인덱스(index)라고 하는 번호를 가지고 있습니다. 인덱스는 0부터 시작합니다. 따라서 리스트의 첫 번째 항목은 인덱스 0, 두 번째 항목은 인덱스 1에 해당합니다.

print(fruits[0]) # 출력: 사과

print(fruits[1]) # 출력: 바나나

음수 인덱싱도 가능합니다. 음수 인덱스는 리스트의 끝에서부터 항목을 참조합니다. `-1`은 마지막 항목, `-2`는 마지막에서 두 번째 항목을 의미합니다.

print(fruits[-1]) # 출력: 오렌지

print(fruits[-2]) # 출력: 체리

리스트 슬라이싱 (List Slicing)

슬라이싱을 사용하면 리스트의 특정 부분을 추출할 수 있습니다. `[start:stop:step]` 형식으로 사용하며, `start`부터 `stop` 이전까지의 항목을 추출합니다.

print(fruits[1:3]) # 출력: ['바나나', '체리'] (인덱스 1과 2의 항목)

print(fruits[:2]) # 출력: ['사과', '바나나'] (처음부터 인덱스 1까지)

print(fruits[2:]) # 출력: ['체리', '오렌지'] (인덱스 2부터 끝까지)

리스트 변경하기

리스트는 변경 가능하므로, 특정 인덱스의 항목을 수정하거나, 항목을 추가하거나 삭제할 수 있습니다.

  • append(): 리스트의 끝에 항목을 추가합니다.
  • insert(): 특정 위치에 항목을 삽입합니다.
  • remove(): 특정 값을 가진 첫 번째 항목을 삭제합니다.
  • pop(): 특정 인덱스의 항목을 삭제하고 그 값을 반환합니다. 인덱스를 지정하지 않으면 마지막 항목을 삭제합니다.
  • del: 특정 인덱스의 항목을 삭제합니다.

예시: 리스트 변경

fruits.append("포도")

print(fruits) # 출력: ['사과', '바나나', '체리', '오렌지', '포도']

fruits[0] = "딸기"

print(fruits) # 출력: ['딸기', '바나나', '체리', '오렌지', '포도']

del fruits[1]

print(fruits) # 출력: ['딸기', '체리', '오렌지', '포도']

리스트는 파이썬에서 가장 다양하게 활용되는 데이터 구조 중 하나이며, 데이터를 효율적으로 관리하는 데 필수적입니다.

튜플 (Tuple)

튜플은 순서가 있는 변경 불가능한(immutable) 객체의 모음입니다. 리스트와 유사하게 여러 데이터를 저장할 수 있지만, 튜플은 한번 생성되면 그 내용을 변경할 수 없다는 큰 차이가 있습니다. 튜플은 소괄호 `()`를 사용하여 생성하며, 항목은 쉼표로 구분합니다.

예시: 좌표 튜플

coordinates = (10.0, 20.0)

print(coordinates)

# 출력: (10.0, 20.0)

튜플 인덱싱 및 슬라이싱

튜플 역시 리스트와 마찬가지로 인덱싱과 슬라이싱을 지원합니다.

print(coordinates[0]) # 출력: 10.0

print(coordinates[1]) # 출력: 20.0

튜플 변경 불가능성

튜플은 변경 불가능하므로, 항목을 추가하거나 삭제, 수정하는 것이 불가능합니다. 만약 튜플의 내용을 변경해야 한다면, 새로운 튜플을 생성해야 합니다. 이러한 변경 불가능성은 튜플이 리스트보다 약간 더 빠르고, 딕셔너리의 키(key)로 사용될 수 있다는 장점을 제공합니다.

# fruits.append("망고") # 오류 발생! 튜플은 변경 불가능합니다.

# fruits[0] = "블루베리" # 오류 발생!

튜플은 주로 여러 값을 하나의 단위로 묶어서 전달하거나, 함수의 반환 값으로 사용될 때 많이 활용됩니다. 또한, 프로그램의 일관성을 유지해야 하는 중요한 데이터에 사용될 수 있습니다. 리스트와 튜플파이썬 프로그래밍 기초를 배우는 데 있어 매우 중요한 데이터 구조입니다. 데이터를 어떻게 구성하고 관리하느냐에 따라 프로그램의 효율성과 유연성이 크게 달라지기 때문입니다. 리스트는 유연하게 데이터를 변경해야 할 때, 튜플은 데이터의 일관성이 중요하거나 변경되지 않아야 할 때 사용하면 좋습니다. 데이터 구조에 대한 이해는 파이썬 프로그래밍을 한 단계 발전시키는 데 필수적입니다.

데이터 구조: 딕셔너리와 세트

우리는 앞서 여러 데이터를 순서대로 저장하는 리스트와 튜플을 배웠습니다. 하지만 때로는 데이터에 순서대로 접근하는 것보다, 특정 '이름'이나 '키(key)'를 사용하여 데이터를 찾고 싶을 때가 있습니다. 예를 들어, 사람의 이름과 전화번호를 저장할 때, 이름으로 전화번호를 바로 찾아내고 싶을 수 있습니다. 이러한 요구를 만족시키는 것이 바로 딕셔너리(Dictionary)입니다. 딕셔너리는 키(key)값(value)의 쌍으로 이루어진 데이터 구조로, 순서가 없고, 키를 통해 값에 접근합니다. 또한, 세트(Set)는 중복되지 않는 항목들의 모음으로, 주로 멤버십 테스트나 중복 제거에 사용됩니다. 파이썬 프로그래밍 기초에서 이 두 가지 데이터 구조는 매우 유용하게 활용됩니다.

딕셔너리 (Dictionary)

딕셔너리는 중괄호 `{}`를 사용하여 생성하며, 각 항목은 `키: 값` 형태로 표현됩니다. 키는 고유해야 하며, 변경 불가능한(immutable) 자료형(예: 문자열, 숫자, 튜플)만 사용할 수 있습니다. 값은 어떤 자료형이든 가능합니다.

예시: 학생 정보 딕셔너리

student = {

"name": "김철수",

"age": 20,

"major": "컴퓨터공학",

"is_student": True

}

print(student)

# 출력: {'name': '김철수', 'age': 20, 'major': '컴퓨터공학', 'is_student': True}

딕셔너리 값에 접근하기

딕셔너리의 값에 접근할 때는 해당 값의 키를 사용합니다. 리스트와 달리 대괄호 `[]` 안에 키를 넣어 접근합니다.

print(student["name"]) # 출력: 김철수

print(student["age"]) # 출력: 20

만약 존재하지 않는 키로 접근하려고 하면 `KeyError`가 발생합니다. 이를 방지하기 위해 `get()` 메서드를 사용할 수 있습니다. `get()` 메서드는 키가 존재하지 않을 경우 `None`을 반환하거나, 지정된 기본값을 반환합니다.

print(student.get("grade")) # 출력: None

print(student.get("grade", "정보 없음")) # 출력: 정보 없음

딕셔너리 항목 추가 및 수정

딕셔너리는 변경 가능하므로, 새로운 항목을 추가하거나 기존 항목의 값을 수정할 수 있습니다.

student["university"] = "한국대학교"

print(student)

# 출력: {'name': '김철수', 'age': 20, 'major': '컴퓨터공학', 'is_student': True, 'university': '한국대학교'}

student["age"] = 21 # 'age' 항목의 값 수정

print(student)

# 출력: {'name': '김철수', 'age': 21, 'major': '컴퓨터공학', 'is_student': True, 'university': '한국대학교'}

딕셔너리 항목 삭제

`del` 키워드나 `pop()` 메서드를 사용하여 항목을 삭제할 수 있습니다.

del student["is_student"]

print(student)

# 출력: {'name': '김철수', 'age': 21, 'major': '컴퓨터공학', 'university': '한국대학교'}

removed_major = student.pop("major") # 'major' 항목을 삭제하고 값을 반환

print(f"삭제된 전공: {removed_major}") # 출력: 삭제된 전공: 컴퓨터공학

print(student)

# 출력: {'name': '김철수', 'age': 21, 'university': '한국대학교'}

딕셔너리는 데이터를 이름표와 함께 저장하고, 이름으로 빠르게 찾을 수 있게 해주므로, 다양한 데이터를 구조화하는 데 매우 유용합니다.

세트 (Set)

세트는 중복되지 않는 항목들의 순서 없는(unordered) 모음입니다. 세트는 중괄호 `{}`를 사용하여 생성하지만, 딕셔너리와 달리 키와 값의 쌍이 아니라 항목 자체만 저장합니다. 비어있는 세트를 만들 때는 `set()` 함수를 사용해야 합니다. `{}`를 사용하면 빈 딕셔너리가 생성되기 때문입니다.

예시: 과일 세트

fruits_set = {"사과", "바나나", "체리", "사과"}

print(fruits_set)

# 출력: {'사과', '바나나', '체리'} (중복된 '사과'는 제거됨)

empty_set = set()

print(type(empty_set)) # 출력:

세트 항목 추가 및 삭제

세트도 변경 가능하므로 항목을 추가하거나 삭제할 수 있습니다.

  • add(): 세트에 항목을 하나 추가합니다.
  • update(): 여러 항목을 한 번에 추가합니다.
  • remove(): 특정 항목을 삭제합니다. 항목이 없으면 `KeyError`가 발생합니다.
  • discard(): 특정 항목을 삭제합니다. 항목이 없어도 오류가 발생하지 않습니다.

예시: 세트 변경

fruits_set.add("오렌지")

print(fruits_set)

# 출력: {'오렌지', '사과', '바나나', '체리'} (순서는 보장되지 않음)

fruits_set.remove("바나나")

print(fruits_set)

# 출력: {'오렌지', '사과', '체리'}

세트 연산

세트는 집합 연산(합집합, 교집합, 차집합)을 지원합니다.

  • 합집합 (| 또는 union()): 두 세트의 모든 항목을 포함하는 새로운 세트를 반환합니다.
  • 교집합 (& 또는 intersection()): 두 세트에 모두 포함된 항목만 포함하는 새로운 세트를 반환합니다.
  • 차집합 (- 또는 difference()): 첫 번째 세트에는 있지만 두 번째 세트에는 없는 항목만 포함하는 새로운 세트를 반환합니다.

set1 = {1, 2, 3, 4}

set2 = {3, 4, 5, 6}

print(set1 | set2) # 출력: {1, 2, 3, 4, 5, 6}

print(set1 & set2) # 출력: {3, 4}

print(set1 - set2) # 출력: {1, 2}

세트는 중복 데이터를 제거하거나, 여러 데이터 집합 간의 관계를 파악하는 데 매우 유용합니다. 딕셔너리와 세트파이썬 프로그래밍 기초 학습에서 데이터 구조를 확장하는 중요한 부분입니다. 데이터를 어떻게 구성하느냐에 따라 프로그램의 성능과 코드의 명확성이 크게 달라지므로, 이러한 데이터 구조들을 잘 이해하고 상황에 맞게 사용하는 능력을 키우는 것이 중요합니다.

입출력: 사용자 상호작용

프로그램이 단순히 계산만 하는 것이 아니라, 사용자와 소통하고 필요한 정보를 얻거나 결과를 보여주는 것은 매우 중요합니다. 이를 입출력(Input/Output, I/O)이라고 합니다. 파이썬은 사용자와 상호작용할 수 있는 간단하면서도 강력한 기능을 제공합니다.

입력 (Input)

`input()` 함수는 사용자로부터 텍스트 입력을 받을 때 사용됩니다. 이 함수는 사용자가 키보드로 입력한 내용을 문자열로 반환합니다. 함수 호출 시 괄호 안에 원하는 안내 메시지를 넣어 사용자에게 무엇을 입력해야 하는지 알려줄 수 있습니다.

예시: 사용자 이름 입력받기

user_name = input("당신의 이름은 무엇인가요? ")

print(f"안녕하세요, {user_name}님!")

이 코드를 실행하면 "당신의 이름은 무엇인가요? "라는 메시지가 출력되고, 사용자가 이름을 입력하면 그 이름으로 인사하는 메시지가 출력됩니다. `input()` 함수는 항상 문자열을 반환하므로, 만약 숫자를 입력받아 연산에 사용해야 한다면, 반드시 숫자형으로 변환해야 합니다.

예시: 사용자 나이 입력받고 계산하기

user_age_str = input("당신의 나이를 입력해주세요: ")

user_age = int(user_age_str) # 문자열을 정수형으로 변환

next_year_age = user_age + 1

print(f"내년에는 {next_year_age}세가 되시는군요!")

위 예시에서 `int()` 함수를 사용하여 입력받은 문자열 `user_age_str`을 정수형 `user_age`로 변환했습니다. 만약 사용자가 숫자가 아닌 다른 것을 입력하면 `ValueError`가 발생할 수 있으므로, 실제 프로그램에서는 이러한 오류 처리를 해주는 것이 좋습니다.

출력 (Output)

`print()` 함수는 프로그램의 결과를 화면에 출력할 때 사용됩니다. 이미 앞선 예제들에서 `print()` 함수를 많이 사용해 보았죠. `print()` 함수는 여러 개의 인자를 쉼표로 구분하여 전달할 수 있으며, 각 인자는 공백으로 구분되어 출력됩니다.

예시: 여러 값 출력하기

name = "Alice"

age = 30

print("이름:", name, "나이:", age)

# 출력: 이름: Alice 나이: 30

f-string (Formatted String Literal)

파이썬 3.6부터는 f-string을 사용하여 문자열 안에 변수나 표현식의 값을 쉽게 포함시킬 수 있습니다. 문자열 앞에 `f`를 붙이고, 중괄호 `{}` 안에 변수나 표현식을 넣어주면 됩니다. f-string은 기존의 문자열 포맷팅 방식보다 훨씬 간결하고 가독성이 좋습니다.

print(f"이름: {name}, 나이: {age}")

# 출력: 이름: Alice, 나이: 30

print(f"내년 나이는 {age + 1}세입니다.")

# 출력: 내년 나이는 31세입니다.

`sep`과 `end` 인자

`print()` 함수는 `sep` (separator)과 `end`라는 두 가지 유용한 인자를 가지고 있습니다. `sep`은 여러 인자 사이의 구분자를 지정하며, 기본값은 공백입니다. `end`는 출력의 끝에 추가될 문자를 지정하며, 기본값은 개행 문자(`\n`)입니다.

print("apple", "banana", "cherry", sep="-")

# 출력: apple-banana-cherry

print("Hello", end=" ") # 개행하지 않고 공백으로 끝냄

print("World!") # 이전 출력과 같은 줄에 이어서 출력

# 출력: Hello World!

입출력 기능을 이해하는 것은 사용자와 상호작용하는 프로그램을 만드는 데 필수적입니다. 파이썬 프로그래밍 기초를 배우는 과정에서 `input()`과 `print()` 함수를 능숙하게 다루는 것은 사용자 경험을 고려한 프로그램을 만드는 데 매우 중요합니다. 간단한 대화형 프로그램을 만들어보면서 입출력 기능을 익혀보세요!

모듈과 패키지: 코드의 확장

앞서 우리는 함수를 사용하여 코드를 재사용하는 방법을 배웠습니다. 하지만 우리가 작성하는 프로그램이 점점 커지고 복잡해지면, 모든 코드를 하나의 파일에 관리하는 것은 매우 비효율적입니다. 또한, 파이썬은 다른 개발자들이 만들어 놓은 매우 유용한 코드들을 모듈(Module)패키지(Package) 형태로 제공하여, 우리의 개발 생산성을 크게 높여줍니다. 모듈과 패키지를 이해하고 활용하는 것은 파이썬 프로그래밍 실력을 한 단계 끌어올리는 데 필수적인 요소입니다.

모듈 (Module)

모듈이란 `.`으로 구분된 이름과 `*.py` 확장자를 가진 파일로, 파이썬 정의와 문장들을 담고 있습니다. 즉, 하나의 파이썬 파일(`*.py`) 자체가 하나의 모듈이 될 수 있습니다. 모듈을 사용하면 관련된 함수, 변수, 클래스 등을 하나의 파일에 묶어서 관리할 수 있습니다. 예를 들어, 수학 관련 함수들을 `math.py`라는 파일에 모아두고, 필요할 때 이 파일을 가져와서 사용하는 것입니다.

모듈 가져오기 (Importing)

파이썬에서 다른 모듈의 기능을 사용하려면 `import` 문을 사용합니다. 모듈을 가져오는 방법은 여러 가지가 있습니다.

1. 모듈 전체 가져오기

가장 기본적인 방법으로, 모듈 전체를 가져옵니다. 이 경우, 모듈 안의 기능(함수, 변수 등)을 사용하려면 `모듈이름.함수이름` 형식으로 접근해야 합니다.

예시: `math` 모듈 사용

import math

print(math.sqrt(16)) # 제곱근 계산, 출력: 4.0

print(math.pi) # 원주율 값, 출력: 3.141592653589793

2. 모듈에서 특정 항목만 가져오기

모듈의 모든 것을 가져오는 대신, 필요한 특정 함수나 변수만 가져올 수도 있습니다. 이 경우, `from 모듈이름 import 항목이름` 형식으로 사용하며, 가져온 항목은 모듈 이름을 붙이지 않고 바로 사용할 수 있습니다.

from math import sqrt, pi

print(sqrt(25)) # 출력: 5.0

print(pi) # 출력: 3.141592653589793

3. 가져온 항목에 별명(Alias) 부여하기

모듈 이름이나 항목 이름이 길거나, 다른 이름과 충돌할 경우 `as` 키워드를 사용하여 별명을 부여할 수 있습니다.

import math as m

print(m.sqrt(36)) # 출력: 6.0

from math import sqrt as square_root

print(square_root(49)) # 출력: 7.0

4. 모듈의 모든 항목 가져오기 (권장하지 않음)

`from 모듈이름 import *` 와 같이 사용하면 모듈의 모든 항목을 가져올 수 있습니다. 하지만 이 방법은 이름 충돌의 위험이 있고, 코드의 가독성을 해칠 수 있어 일반적으로는 권장되지 않습니다. 프로젝트 규모가 커질수록 어떤 항목이 어디서 왔는지 파악하기 어려워집니다.

자신만의 모듈 만들기

다른 모듈을 가져오는 것 외에도, 여러분 스스로 모듈을 만들 수 있습니다. 예를 들어, 자주 사용하는 함수들을 `my_utils.py`라는 파일에 저장하고, 다른 파이썬 스크립트에서 `import my_utils`를 통해 불러와 사용할 수 있습니다.

패키지 (Package)

패키지는 더 큰 규모의 모듈들을 포함하는 디렉토리(폴더) 구조입니다. 파이썬은 패키지 시스템을 통해 관련 모듈들을 체계적으로 관리할 수 있도록 합니다. 패키지 안에는 `__init__.py` 라는 특별한 파일이 포함되어 있어야 해당 디렉토리가 파이썬 패키지로 인식됩니다. `__init__.py` 파일은 비어 있거나, 패키지가 처음 임포트될 때 실행될 초기화 코드를 포함할 수 있습니다.

패키지 사용하기

패키지 안의 모듈을 사용하려면 `import 패키지이름.모듈이름` 또는 `from 패키지이름 import 모듈이름`과 같이 접근합니다. 패키지 안의 하위 디렉토리에 있는 모듈에도 마찬가지로 점(`.`)을 사용하여 접근할 수 있습니다.

예시: 가상적인 `my_package` 패키지 구조

my_package/

├── __init__.py

├── module1.py

└── sub_package/

├── __init__.py

└── module2.py

이 구조에서 `module1.py`에 `hello_module1()` 함수가 정의되어 있고, `module2.py`에 `greet_module2()` 함수가 정의되어 있다면, 다른 파일에서 다음과 같이 사용할 수 있습니다.

import my_package.module1

my_package.module1.hello_module1()

from my_package.sub_package import module2

module2.greet_module2()

파이썬 표준 라이브러리

파이썬에는 기본적으로 매우 유용한 모듈과 패키지들이 많이 포함되어 있습니다. 이를 표준 라이브러리(Standard Library)라고 합니다. `math`, `datetime`, `os`, `sys`, `random`, `json` 등은 자주 사용되는 표준 라이브러리 중 일부입니다. 이러한 표준 라이브러리를 잘 활용하면, 복잡한 기능을 직접 구현할 필요 없이 편리하게 사용할 수 있습니다.

외부 라이브러리 설치

표준 라이브러리 외에도, 파이썬 커뮤니티에서 개발한 수많은 외부 라이브러리들이 존재합니다. 웹 개발을 위한 `Django`, `Flask`, 데이터 과학을 위한 `NumPy`, `Pandas`, `Scikit-learn`, 인공지능을 위한 `TensorFlow`, `PyTorch` 등이 대표적입니다. 이러한 외부 라이브러리는 pip라는 패키지 관리 도구를 사용하여 설치할 수 있습니다. 예를 들어, NumPy를 설치하려면 터미널에서 `pip install numpy` 명령을 실행하면 됩니다. pip는 파이썬 생태계의 중요한 부분이며, 외부 라이브러리 활용은 개발 생산성을 극대화하는 핵심입니다.

모듈과 패키지의 개념은 파이썬 프로그래밍 기초를 넘어, 실질적인 소프트웨어 개발을 위해 반드시 이해해야 하는 중요한 주제입니다. 이를 통해 여러분은 코드를 체계적으로 구성하고, 방대한 파이썬 생태계를 활용하여 더욱 강력하고 효율적인 프로그램을 만들 수 있습니다.

파일 입출력: 데이터 저장 및 불러오기

지금까지 우리는 프로그램 실행 중에 변수에 데이터를 저장하고, 사용자로부터 입력을 받고, 화면에 결과를 출력하는 방법을 배웠습니다. 하지만 프로그램이 종료되면 메모리에 저장되었던 데이터는 모두 사라지게 됩니다. 만약 프로그램의 실행 결과를 영구적으로 저장하거나, 프로그램 외부의 데이터를 가져와서 사용해야 한다면 어떻게 해야 할까요? 이때 필요한 것이 바로 파일 입출력(File I/O)입니다. 파일 입출력은 컴퓨터의 디스크에 있는 파일을 읽거나 쓰는 작업을 의미합니다. 파일을 통해 데이터를 영구적으로 저장하고 관리하는 것은 거의 모든 종류의 애플리케이션 개발에 필수적인 기능입니다.

파일 열기 및 닫기

파일을 사용하기 전에 반드시 파일을 열어야 합니다. 파일을 열 때는 `open()` 함수를 사용합니다. `open()` 함수는 파일 경로와 함께 모드(mode)를 인자로 받습니다. 모드는 파일을 어떤 목적으로 열 것인지를 지정합니다. 가장 기본적인 모드는 다음과 같습니다.

  • 'r' (read): 읽기 모드. 파일의 내용을 읽어올 때 사용합니다. 파일이 존재하지 않으면 `FileNotFoundError`가 발생합니다. (기본값)
  • 'w' (write): 쓰기 모드. 파일에 내용을 쓸 때 사용합니다. 파일이 이미 존재하면, 기존 내용을 모두 지우고 새로 씁니다. 파일이 없으면 새로 생성합니다.
  • 'a' (append): 추가 모드. 파일의 끝에 내용을 추가할 때 사용합니다. 파일이 없으면 새로 생성합니다.
  • 'x' (create): 생성 모드. 파일을 새로 생성합니다. 파일이 이미 존재하면 `FileExistsError`가 발생합니다.

또한, 텍스트 파일과 바이너리 파일 모드를 구분할 수 있습니다. 텍스트 파일의 경우 `t`를, 바이너리 파일의 경우 `b`를 모드에 추가할 수 있습니다. 예를 들어, `rb`는 바이너리 읽기 모드입니다. 텍스트 모드는 기본값이므로 보통 생략합니다.

파일을 열고 나면, 사용이 끝난 후에는 반드시 파일을 닫아야 합니다. 파일을 닫는 것은 시스템 자원을 해제하고, 버퍼에 남아있는 데이터가 파일에 완전히 쓰여지도록 보장하는 중요한 과정입니다. 파일을 닫을 때는 `close()` 메서드를 사용합니다.

예시: 파일 열고 닫기

f = open("myfile.txt", "w") # 쓰기 모드로 파일 열기

# 파일 작업 수행...

f.close() # 파일 닫기

하지만 `close()`를 수동으로 호출하는 것은 번거롭고, 오류 발생 시 파일이 닫히지 않을 위험도 있습니다. 이를 해결하기 위해 `with` 문을 사용하는 것이 좋습니다. `with` 문을 사용하면, 파일 작업이 완료되거나 오류가 발생했을 때 자동으로 파일을 닫아줍니다. `with` 문을 사용하는 것이 파이썬에서 파일을 다루는 가장 권장되는 방법입니다.

예시: `with` 문을 사용한 파일 작업

with open("myfile.txt", "w") as f:

# 파일 작업 수행

f.write("이것은 파일에 저장될 첫 번째 줄입니다.\n")

f.write("두 번째 줄입니다.\n")

# 'with' 블록을 벗어나면 파일은 자동으로 닫힙니다.

파일 쓰기 (Writing to Files)

파일에 내용을 쓸 때는 `write()` 메서드를 사용합니다. `write()` 메서드는 문자열을 인자로 받아 파일에 씁니다. `write()`는 문자열에 개행 문자를 포함하지 않으므로, 줄 바꿈을 하려면 `\n`을 명시적으로 추가해야 합니다.

예시: 파일에 여러 줄 쓰기

lines_to_write = ["Hello, File!", "This is the second line.", "Writing is fun!"]

with open("my_output.txt", "w") as f:

for line in lines_to_write:

f.write(line + "\\n")

`writelines()` 메서드를 사용하여 리스트에 있는 여러 문자열을 한 번에 파일에 쓸 수도 있습니다. 이때도 각 문자열 끝에 개행 문자를 추가해주는 것을 잊지 말아야 합니다.

with open("my_output_list.txt", "w") as f:

f.writelines([line + "\\n" for line in lines_to_write])

파일 읽기 (Reading from Files)

파일의 내용을 읽어올 때는 여러 가지 방법이 있습니다.

1. `read()` 메서드: 파일 전체 내용을 하나의 문자열로 읽어옴

파일이 크지 않을 때 유용합니다. 모든 내용을 메모리에 로드하기 때문에 큰 파일에는 부적합할 수 있습니다.

with open("my_output.txt", "r") as f:

content = f.read()

print(content)

2. `readline()` 메서드: 파일을 한 줄씩 읽어옴

파일을 한 줄씩 처리해야 할 때 유용합니다. 반복문과 함께 사용하면 파일의 각 줄을 순서대로 처리할 수 있습니다.

with open("my_output.txt", "r") as f:

line1 = f.readline()

line2 = f.readline()

print(f"첫 번째 줄: {line1.strip()}") # strip()으로 양 끝 공백 제거

print(f"두 번째 줄: {line2.strip()}")

3. `readlines()` 메서드: 파일의 모든 줄을 리스트로 읽어옴

파일의 모든 줄을 각각의 문자열 요소로 가지는 리스트를 반환합니다. 각 문자열에는 줄 끝의 개행 문자(`\n`)가 포함되어 있습니다.

with open("my_output.txt", "r") as f:

all_lines = f.readlines()

print(all_lines)

# 예를 들어, 각 줄을 처리하려면:

for line in all_lines:

print(f"처리 중: {line.strip()}")

이처럼 파일 입출력은 데이터를 지속적으로 관리하고 외부와 상호작용하는 데 매우 중요합니다. 파이썬 프로그래밍 기초를 배우는 과정에서 파일 입출력 기능을 익히는 것은 실질적인 애플리케이션을 개발하는 데 필수적인 역량을 키우는 것입니다. 간단한 텍스트 파일을 직접 생성하고 읽어보는 연습을 통해 파일 입출력에 익숙해지도록 해보세요!

오류 처리: 예외 처리

프로그램을 개발하다 보면 예상치 못한 상황이나 잘못된 입력으로 인해 오류가 발생하는 경우가 흔합니다. 예를 들어, 0으로 나누려고 하거나, 존재하지 않는 파일을 열려고 하거나, 문자열을 숫자로 변환할 때 유효하지 않은 문자를 입력하는 경우 등이 있습니다. 이러한 오류가 발생하면 프로그램이 비정상적으로 종료될 수 있습니다. 이러한 상황에 대비하여 프로그램이 오류로 인해 중단되지 않고, 우아하게 대처할 수 있도록 하는 것을 예외 처리(Exception Handling)라고 합니다. 파이썬 프로그래밍 기초를 배우면서 예외 처리는 매우 중요한 부분이며, 안정적이고 견고한 프로그램을 만드는 데 필수적인 기술입니다.

예외 (Exceptions)

파이썬에서 오류는 예외라고 불립니다. 예외는 프로그램 실행 중에 발생하는 사건으로, 프로그램의 정상적인 흐름을 방해합니다. 파이썬은 다양한 종류의 내장 예외 타입을 가지고 있습니다. 몇 가지 예시는 다음과 같습니다.

  • ZeroDivisionError: 0으로 나누려고 할 때 발생합니다.
  • FileNotFoundError: 존재하지 않는 파일을 열려고 할 때 발생합니다.
  • ValueError: 함수에 잘못된 형식의 인자가 전달되었을 때 발생합니다. (예: `int("abc")`)
  • TypeError: 연산이나 함수에 적합하지 않은 타입의 객체가 사용되었을 때 발생합니다.
  • IndexError: 리스트나 튜플의 범위를 벗어나는 인덱스로 접근할 때 발생합니다.
  • KeyError: 딕셔너리에 존재하지 않는 키로 접근할 때 발생합니다.

파이썬 인터프리터는 이러한 예외가 발생하면, 해당 예외에 대한 정보를 포함하는 예외 객체를 생성하고, 이를 처리해 줄 코드를 찾습니다. 만약 예외를 처리해 줄 코드가 없다면, 프로그램은 오류 메시지를 출력하고 종료됩니다.

`try-except` 블록

예외를 처리하는 가장 기본적인 방법은 `try-except` 블록을 사용하는 것입니다. `try` 블록 안에는 예외가 발생할 가능성이 있는 코드를 작성하고, `except` 블록에는 해당 예외가 발생했을 때 실행할 코드를 작성합니다. `try-except` 문은 프로그램의 안정성을 높이는 가장 기본적인 도구입니다.

예시: 0으로 나누기 예외 처리

try:

numerator = 10

denominator = 0

result = numerator / denominator # ZeroDivisionError 발생 지점

print(f"결과: {result}")

except ZeroDivisionError:

print("오류: 0으로 나눌 수 없습니다.")

이 코드를 실행하면, `ZeroDivisionError`가 발생하지만, `except` 블록에서 이 예외를 잡아서 "오류: 0으로 나눌 수 없습니다."라는 메시지를 출력하고 프로그램이 비정상 종료되지 않습니다. 결과적으로 프로그램은 정상적으로 계속 실행될 수 있습니다.

특정 예외 처리

필요에 따라 여러 개의 `except` 블록을 사용하여 각기 다른 종류의 예외를 처리할 수 있습니다. 이는 어떤 종류의 오류가 발생했는지에 따라 다르게 대응해야 할 때 유용합니다.

try:

value = input("숫자를 입력하세요: ")

number = int(value) # ValueError 발생 가능

result = 100 / number # ZeroDivisionError 발생 가능

print(f"100을 {number}으로 나눈 결과: {result}")

except ValueError:

print("오류: 유효한 숫자를 입력해주세요.")

except ZeroDivisionError:

print("오류: 0으로는 나눌 수 없습니다.")

except Exception as e: # 그 외 모든 예외 처리

print(f"예상치 못한 오류 발생: {e}")

`Exception as e`와 같이 작성하면, 발생한 예외 객체를 `e` 변수에 담아 예외에 대한 자세한 정보를 얻을 수 있습니다.

`else` 및 `finally` 절

`try-except` 블록에는 `else`와 `finally`라는 두 개의 추가적인 절을 사용할 수 있습니다.

  • else 절: `try` 블록에서 예외가 발생하지 않았을 때 실행됩니다. 즉, 성공적으로 실행되었을 때 추가적인 작업을 수행할 때 사용합니다.
  • finally 절: 예외 발생 여부와 관계없이 항상 실행됩니다. 주로 파일 닫기, 자원 해제 등 뒷정리 작업을 할 때 사용됩니다.

예시: `else`와 `finally` 사용

try:

num = int(input("숫자를 입력하세요: "))

result = 10 / num

except ValueError:

print("잘못된 입력입니다.")

except ZeroDivisionError:

print("0으로 나눌 수 없습니다.")

else:

print(f"계산 결과: {result}") # 예외가 없을 때만 실행

finally:

print("프로그램 실행이 종료되었습니다.") # 항상 실행

`finally` 절은 오류 발생 여부와 상관없이 반드시 실행되어야 하는 코드를 넣기에 매우 유용합니다. `with` 문이 파일을 자동으로 닫아주는 것처럼, `finally` 절은 프로그램의 마무리 작업을 보장하는 역할을 합니다. 예외 처리파이썬 프로그래밍 기초를 넘어, 실제 프로덕션 환경에서 사용되는 견고한 소프트웨어를 만들기 위한 필수적인 기술입니다. 오류를 두려워하지 말고, 예외 처리를 통해 프로그램을 더욱 안정적으로 만들어 보세요.

마무리하며: 여러분의 파이썬 여정

자, 우리는 파이썬 프로그래밍 기초라는 긴 여정을 함께 걸어왔습니다. 파이썬 설치부터 시작해서 변수, 자료형, 연산자, 제어문, 함수, 데이터 구조, 입출력, 그리고 예외 처리까지, 정말 많은 내용을 다루었습니다. 처음에는 다소 어렵게 느껴질 수도 있지만, 이 모든 과정을 차근차근 따라오신 여러분 모두에게 진심으로 박수를 보냅니다! 파이썬 프로그래밍 기초를 탄탄하게 다지는 것은 앞으로 여러분이 더 복잡하고 흥미로운 파이썬 기술들을 배우고 활용하는 데 있어 확고한 기반이 될 것입니다. 파이썬은 배우기 쉽고 강력하며, 활용 분야가 무궁무진한 언어입니다. 웹 개발, 데이터 분석, 인공지능, 자동화 등 여러분이 흥미를 느끼는 분야가 있다면, 파이썬은 여러분의 아이디어를 현실로 만드는 데 든든한 동반자가 되어줄 것입니다.

앞으로 나아갈 길

오늘 배운 파이썬 프로그래밍 기초 지식은 시작일 뿐입니다. 이제 여러분은 이 지식을 바탕으로 더욱 깊이 있는 학습을 이어갈 수 있습니다. 몇 가지 추천하는 학습 방향은 다음과 같습니다.

  • 라이브러리 활용: `NumPy`, `Pandas`와 같은 데이터 과학 라이브러리, `Requests`와 같은 웹 스크래핑 라이브러리, `Tkinter`나 `PyQt`와 같은 GUI 라이브러리 등을 익혀보세요.
  • 객체 지향 프로그래밍 (OOP): 클래스와 객체를 사용하여 코드를 더욱 구조화하고 재사용하는 방법을 배웁니다.
  • 웹 개발 프레임워크: `Django`나 `Flask`와 같은 프레임워크를 사용하여 웹 애플리케이션을 개발하는 방법을 익힙니다.
  • 데이터베이스 연동: SQL이나 NoSQL 데이터베이스와 파이썬을 연동하여 데이터를 관리하는 방법을 배웁니다.
  • 알고리즘 및 자료구조 심화 학습: 문제 해결 능력을 더욱 향상시키기 위해 다양한 알고리즘과 자료구조를 파이썬으로 구현해보는 연습을 합니다.

꾸준함이 답입니다

가장 중요한 것은 꾸준함입니다. 매일 짧은 시간이라도 코딩을 연습하고, 새로운 것을 배우는 습관을 들이세요. 오류가 발생하는 것을 두려워하지 마세요. 오류는 코딩 과정에서 배우는 가장 소중한 교훈 중 하나입니다. 궁금한 점이 있다면 주저하지 말고 검색하고, 커뮤니티에 질문하세요. 전 세계 수많은 파이썬 개발자들이 여러분의 질문에 기꺼이 답해줄 것입니다. 코딩은 단순히 기술을 배우는 것을 넘어, 생각하는 방식을 바꾸고 문제 해결 능력을 키우는 여정입니다. 파이썬이라는 훌륭한 도구를 통해 여러분의 창의적인 아이디어들을 마음껏 펼쳐나가시길 바랍니다.

여러분의 파이썬 여정을 응원합니다! 파이썬 프로그래밍 기초를 마스터하신 여러분은 이미 멋진 첫걸음을 내딛으셨습니다. 앞으로 펼쳐질 무한한 가능성을 기대하며, 즐겁고 보람찬 코딩 라이프를 이어가시길 바랍니다. 다시 한번, 파이썬 프로그래밍 기초 학습을 완수하신 것을 축하드립니다!

댓글 쓰기

다음 이전