본문으로 건너뛰기
Advertisement

Ch 1.4 첫 번째 파이썬 프로그램

파이썬 개발 환경이 갖춰졌다면, 이제 첫 번째 코드를 작성해봅시다. 전통적인 "Hello, World!"부터 시작하여 입력과 출력, 그리고 파이썬 프로그램의 기본 구조를 배웁니다.

1. Hello World

print("Hello, World!")

단 한 줄로 실행됩니다. 파일을 hello.py로 저장하고 터미널에서 실행하세요.

python3 hello.py
# Hello, World!

Java나 C와 비교해보면 파이썬이 얼마나 간결한지 느낄 수 있습니다.

# 파이썬 — 1줄
print("Hello, World!")

# Java — 5줄 필요
# public class Hello {
# public static void main(String[] args) {
# System.out.println("Hello, World!");
# }
# }

2. 파이썬 코드 구조

들여쓰기(Indentation)가 문법

파이썬에서는 들여쓰기가 단순한 스타일이 아닌 문법의 일부입니다. 일관된 들여쓰기 없이는 코드가 실행되지 않습니다.

# 올바른 들여쓰기 (스페이스 4칸 권장)
if True:
print("이것은 if 블록 안입니다")
print("같은 들여쓰기 = 같은 블록")
print("이것은 if 블록 밖입니다")

# 잘못된 들여쓰기 — IndentationError 발생
# if True:
# print("오류!") # IndentationError: expected an indented block

세미콜론 불필요

파이썬은 줄 끝에 세미콜론(;)이 필요하지 않습니다. 줄 바꿈이 문장의 끝을 의미합니다.

# 정상 코드
x = 10
y = 20
z = x + y

# 세미콜론을 써도 되지만 권장하지 않음
a = 1; b = 2; c = 3 # 여러 문장을 한 줄에 쓸 때만 가끔 사용

주석(Comment)

# 한 줄 주석: # 기호 사용

x = 10 # 인라인 주석도 가능

"""
여러 줄 주석 또는 문서화 문자열(docstring).
실제로는 문자열이지만 문서화 목적으로 자주 사용됩니다.
"""

def add(a, b):
"""두 숫자를 더해서 반환합니다.""" # docstring
return a + b

3. 여러 출력 방법

print() 함수는 다양한 매개변수를 지원합니다.

# 기본 출력
print("Hello, Python!")

# 여러 값 출력 (기본 구분자: 공백)
print("사과", "바나나", "딸기")
# 사과 바나나 딸기

# sep — 구분자 변경
print("2024", "01", "15", sep="-")
# 2024-01-15

print("이름", "나이", "직업", sep=" | ")
# 이름 | 나이 | 직업

# end — 줄 끝 문자 변경 (기본값: '\n')
print("로딩 중", end="")
print(".", end="")
print(".", end="")
print(".")
# 로딩 중...

# file — 출력 대상 변경
import sys
print("에러 메시지", file=sys.stderr)

# flush — 버퍼 즉시 비우기 (진행 표시 등에 사용)
import time
for i in range(5):
print(f"\r진행률: {i * 20}%", end="", flush=True)
time.sleep(0.3)
print("\r완료! ")

4. 사용자 입력 받기

input() 함수로 사용자로부터 문자열을 입력받습니다.

# 기본 입력
name = input("이름을 입력하세요: ")
print(f"안녕하세요, {name}님!")

# input()은 항상 문자열(str)을 반환합니다
age_str = input("나이를 입력하세요: ")
print(type(age_str)) # <class 'str'>

# 숫자로 사용하려면 형변환 필요
age = int(age_str)
print(f"내년에는 {age + 1}살이 됩니다.")

# 한 줄로 처리
height = float(input("키를 입력하세요 (cm): "))
print(f"키: {height:.1f}cm")

5. 간단한 계산기 예제

사용자로부터 두 수를 입력받아 사칙연산을 수행하는 완전한 프로그램입니다.

def calculator():
"""간단한 사칙연산 계산기"""
print("=== 파이썬 계산기 ===")

# 입력받기
try:
num1 = float(input("첫 번째 숫자: "))
num2 = float(input("두 번째 숫자: "))
except ValueError:
print("오류: 올바른 숫자를 입력해주세요.")
return

# 연산 선택
print("\n연산 선택:")
print("1. 덧셈 (+)")
print("2. 뺄셈 (-)")
print("3. 곱셈 (*)")
print("4. 나눗셈 (/)")

choice = input("선택 (1-4): ")

# 결과 계산
if choice == "1":
result = num1 + num2
operator = "+"
elif choice == "2":
result = num1 - num2
operator = "-"
elif choice == "3":
result = num1 * num2
operator = "*"
elif choice == "4":
if num2 == 0:
print("오류: 0으로 나눌 수 없습니다.")
return
result = num1 / num2
operator = "/"
else:
print("올바른 선택이 아닙니다.")
return

# 결과 출력
print(f"\n{num1} {operator} {num2} = {result}")


calculator()

6. if __name__ == "__main__": 패턴

파이썬 파일은 직접 실행하거나 다른 파일에서 import할 수 있습니다. 이 패턴은 두 상황을 구분합니다.

# calculator.py

def add(a: float, b: float) -> float:
"""두 수를 더합니다."""
return a + b

def multiply(a: float, b: float) -> float:
"""두 수를 곱합니다."""
return a * b

def main():
"""메인 실행 함수"""
print(f"3 + 4 = {add(3, 4)}")
print(f"3 * 4 = {multiply(3, 4)}")

if __name__ == "__main__":
# 이 파일을 직접 실행할 때만 main() 호출
# import calculator 로 가져올 때는 실행되지 않음
main()
# 다른 파일에서 import 시 main()이 자동 실행되지 않음
import calculator

result = calculator.add(10, 20) # 함수만 사용 가능
print(result) # 30

실행 결과:

# 직접 실행 시
python3 calculator.py
# 3 + 4 = 7
# 3 * 4 = 12

# import 후 사용 시
# main()이 실행되지 않고, 함수만 사용 가능

고수 팁: print 디버깅 vs logging, pprint 모듈

print 디버깅은 빠르지만 프로덕션 코드에는 적합하지 않습니다. 실무에서는 logging 모듈을 사용합니다.

import logging

# 로깅 설정
logging.basicConfig(
level=logging.DEBUG,
format="%(asctime)s [%(levelname)s] %(message)s",
datefmt="%Y-%m-%d %H:%M:%S",
)
logger = logging.getLogger(__name__)

def process_data(data: list) -> list:
logger.debug(f"입력 데이터: {data}")
result = [x * 2 for x in data]
logger.info(f"처리 완료: {len(result)}개 항목")
return result

data = [1, 2, 3, 4, 5]
output = process_data(data)
# 2024-01-15 10:30:00 [DEBUG] 입력 데이터: [1, 2, 3, 4, 5]
# 2024-01-15 10:30:00 [INFO] 처리 완료: 5개 항목

pprint 모듈로 복잡한 데이터를 보기 좋게 출력합니다.

from pprint import pprint, pformat

data = {
"users": [
{"id": 1, "name": "Alice", "roles": ["admin", "user"]},
{"id": 2, "name": "Bob", "roles": ["user"]},
],
"total": 2,
}

# 일반 print — 한 줄로 출력되어 읽기 어려움
print(data)

# pprint — 들여쓰기로 보기 쉽게 출력
pprint(data)
# {'total': 2,
# 'users': [{'id': 1, 'name': 'Alice', 'roles': ['admin', 'user']},
# {'id': 2, 'name': 'Bob', 'roles': ['user']}]}

# 문자열로 변환
formatted = pformat(data, indent=2)
print(formatted)

print()input()으로 기본적인 입출력을 익혔습니다. 다음 챕터에서는 가상환경과 패키지 관리를 통해 전문적인 파이썬 프로젝트 구조를 만드는 방법을 알아보겠습니다.

Advertisement