Python 기초 문법 튜토리얼: 프로그래밍의 첫걸음
Python 소개
Python은 간결하고 읽기 쉬운 문법으로 유명한 프로그래밍 언어입니다. 초보자가 배우기 쉬우면서도 강력한 기능을 제공하여 웹 개발, 데이터 분석, 인공지능, 자동화 등 다양한 분야에서 활용됩니다. Python의 철학은 “가독성이 중요하다(Readability counts)”로, 코드를 작성하는 것만큼 읽기 쉬운 코드를 작성하는 것을 중요하게 생각합니다.
설치 및 실행 방법
Python을 시작하려면 먼저 Python을 설치해야 합니다. python.org에서 최신 버전을 다운로드할 수 있습니다:
# Python 버전 확인
python --version
# Python 대화형 셸 실행
python
# Python 스크립트 실행
python script.py
1. 변수와 자료형
변수란?
변수는 데이터를 저장하는 공간입니다. Python에서는 변수를 선언할 때 자료형을 명시하지 않아도 되며, 값을 할당하면 자동으로 자료형이 결정됩니다.
# 변수 선언과 할당
# Python에서는 변수 타입을 명시하지 않습니다
name = "김철수" # 문자열
age = 25 # 정수
height = 175.5 # 실수
is_student = True # 불린
print("이름:", name)
print("나이:", age)
print("키:", height)
print("학생 여부:", is_student)
# 변수의 타입 확인
print("\n변수의 자료형 확인:")
print("name의 타입:", type(name))
print("age의 타입:", type(age))
print("height의 타입:", type(height))
print("is_student의 타입:", type(is_student))
# 다중 할당
x, y, z = 10, 20, 30
print(f"\nx = {x}, y = {y}, z = {z}")
# 변수 값 교환
a, b = 5, 10
print(f"교환 전: a = {a}, b = {b}")
a, b = b, a # Python의 특별한 기능
print(f"교환 후: a = {a}, b = {b}")
변수 명명 규칙
Python에서 변수 이름을 지을 때는 몇 가지 규칙을 따라야 합니다. 변수명은 영문자, 숫자, 언더스코어(_)로 구성되며, 숫자로 시작할 수 없습니다. 또한 Python의 예약어는 변수명으로 사용할 수 없습니다.
# 올바른 변수명
user_name = "홍길동"
userAge = 30
_private_var = "비공개"
MAX_SIZE = 100 # 상수는 대문자로 표현
# 잘못된 변수명 (실행 시 에러 발생)
# 2name = "error" # 숫자로 시작
# user-name = "error" # 하이픈 사용 불가
# class = "error" # 예약어 사용 불가
# Python 예약어 확인
import keyword
print("Python 예약어 목록:")
print(keyword.kwlist)
2. 숫자형 데이터
Python은 정수(int), 실수(float), 복소수(complex) 등 다양한 숫자형 데이터를 지원합니다. 각 타입은 서로 변환이 가능하며, 다양한 수학 연산을 수행할 수 있습니다.
# 정수형 (int)
integer_num = 42
binary_num = 0b1010 # 2진수 (10)
octal_num = 0o12 # 8진수 (10)
hex_num = 0xFF # 16진수 (255)
print(f"정수: {integer_num}")
print(f"2진수 0b1010 = {binary_num}")
print(f"8진수 0o12 = {octal_num}")
print(f"16진수 0xFF = {hex_num}")
# 실수형 (float)
float_num = 3.14159
scientific_num = 1.23e-4 # 과학적 표기법
print(f"\n실수: {float_num}")
print(f"과학적 표기법: {scientific_num}")
# 기본 연산
a, b = 10, 3
print(f"\n기본 연산 (a={a}, b={b}):")
print(f"덧셈: {a} + {b} = {a + b}")
print(f"뺄셈: {a} - {b} = {a - b}")
print(f"곱셈: {a} * {b} = {a * b}")
print(f"나눗셈: {a} / {b} = {a / b}")
print(f"정수 나눗셈: {a} // {b} = {a // b}")
print(f"나머지: {a} % {b} = {a % b}")
print(f"거듭제곱: {a} ** {b} = {a ** b}")
# 수학 함수 사용
import math
print(f"\n수학 함수:")
print(f"절댓값: abs(-5) = {abs(-5)}")
print(f"반올림: round(3.7) = {round(3.7)}")
print(f"제곱근: math.sqrt(16) = {math.sqrt(16)}")
print(f"올림: math.ceil(3.2) = {math.ceil(3.2)}")
print(f"내림: math.floor(3.8) = {math.floor(3.8)}")
3. 문자열 다루기
문자열은 텍스트 데이터를 다루는 기본 자료형입니다. Python에서는 작은따옴표(”) 또는 큰따옴표(“”)로 문자열을 표현하며, 다양한 문자열 메서드를 제공합니다.
# 문자열 생성
single_quote = 'Python은 재미있다'
double_quote = "Python은 강력하다"
multi_line = """여러 줄
문자열을
작성할 수 있습니다"""
print("단일 따옴표:", single_quote)
print("이중 따옴표:", double_quote)
print("여러 줄 문자열:")
print(multi_line)
# 문자열 연산
str1 = "Hello"
str2 = "World"
print(f"\n문자열 연결: {str1} + {str2} = {str1 + ' ' + str2}")
print(f"문자열 반복: {str1} * 3 = {str1 * 3}")
# 문자열 인덱싱과 슬라이싱
text = "Python Programming"
print(f"\n원본 문자열: {text}")
print(f"첫 번째 문자: {text[0]}")
print(f"마지막 문자: {text[-1]}")
print(f"처음 6글자: {text[:6]}")
print(f"7번째부터 끝까지: {text[7:]}")
print(f"역순: {text[::-1]}")
# 문자열 메서드
sample = " Hello, Python World! "
print(f"\n원본: '{sample}'")
print(f"대문자: {sample.upper()}")
print(f"소문자: {sample.lower()}")
print(f"공백 제거: '{sample.strip()}'")
print(f"치환: {sample.replace('Python', 'Java')}")
print(f"분리: {sample.split(',')}")
# 문자열 포맷팅
name = "김철수"
age = 25
height = 175.5
# 방법 1: % 포맷팅 (구식)
print("\n%s님은 %d살이고 키는 %.1fcm입니다." % (name, age, height))
# 방법 2: format() 메서드
print("{}님은 {}살이고 키는 {:.1f}cm입니다.".format(name, age, height))
# 방법 3: f-string (Python 3.6+, 권장)
print(f"{name}님은 {age}살이고 키는 {height:.1f}cm입니다.")
4. 리스트(List)
리스트는 여러 개의 값을 순서대로 저장할 수 있는 가변(mutable) 자료형입니다. 대괄호 []를 사용하여 생성하며, 서로 다른 타입의 요소를 포함할 수 있습니다.
# 리스트 생성
empty_list = []
numbers = [1, 2, 3, 4, 5]
mixed = ["apple", 3.14, True, [1, 2]]
fruits = ["사과", "바나나", "오렌지", "포도"]
print("빈 리스트:", empty_list)
print("숫자 리스트:", numbers)
print("혼합 리스트:", mixed)
print("과일 리스트:", fruits)
# 리스트 인덱싱과 슬라이싱
print(f"\n첫 번째 과일: {fruits[0]}")
print(f"마지막 과일: {fruits[-1]}")
print(f"처음 두 개: {fruits[:2]}")
print(f"2번째부터 끝까지: {fruits[1:]}")
# 리스트 수정
fruits[0] = "딸기"
print(f"\n수정 후: {fruits}")
# 리스트 메서드
print("\n리스트 메서드 사용:")
fruits.append("수박") # 끝에 추가
print(f"append 후: {fruits}")
fruits.insert(1, "키위") # 특정 위치에 삽입
print(f"insert 후: {fruits}")
removed = fruits.pop() # 마지막 요소 제거 및 반환
print(f"pop 후: {fruits}, 제거된 요소: {removed}")
fruits.remove("키위") # 특정 값 제거
print(f"remove 후: {fruits}")
# 리스트 정렬
numbers = [3, 1, 4, 1, 5, 9, 2]
print(f"\n원본 숫자: {numbers}")
numbers.sort()
print(f"오름차순 정렬: {numbers}")
numbers.sort(reverse=True)
print(f"내림차순 정렬: {numbers}")
# 리스트 컴프리헨션
squares = [x**2 for x in range(1, 6)]
print(f"\n1-5의 제곱: {squares}")
even_numbers = [x for x in range(1, 11) if x % 2 == 0]
print(f"1-10 중 짝수: {even_numbers}")
5. 튜플(Tuple)
튜플은 리스트와 유사하지만 불변(immutable)한 자료형입니다. 한 번 생성되면 수정할 수 없으며, 소괄호 ()를 사용하여 생성합니다.
# 튜플 생성
empty_tuple = ()
single_tuple = (1,) # 요소가 하나일 때는 콤마 필수
coordinates = (3, 5)
info = ("김철수", 25, "서울")
print("빈 튜플:", empty_tuple)
print("단일 요소 튜플:", single_tuple)
print("좌표:", coordinates)
print("정보:", info)
# 튜플 인덱싱
print(f"\n이름: {info[0]}")
print(f"나이: {info[1]}")
print(f"도시: {info[2]}")
# 튜플 언패킹
x, y = coordinates
print(f"\nx 좌표: {x}, y 좌표: {y}")
name, age, city = info
print(f"이름: {name}, 나이: {age}, 도시: {city}")
# 튜플의 불변성
# info[0] = "이영희" # 에러 발생: 튜플은 수정 불가
# 튜플을 사용하는 경우
def get_min_max(numbers):
return min(numbers), max(numbers) # 여러 값 반환
nums = [3, 1, 4, 1, 5, 9]
minimum, maximum = get_min_max(nums)
print(f"\n최솟값: {minimum}, 최댓값: {maximum}")
6. 딕셔너리(Dictionary)
딕셔너리는 키(key)와 값(value)의 쌍으로 이루어진 자료형입니다. 순서가 없고, 키를 통해 값에 빠르게 접근할 수 있습니다.
# 딕셔너리 생성
empty_dict = {}
person = {
"이름": "김철수",
"나이": 25,
"직업": "개발자",
"취미": ["독서", "영화감상"]
}
print("빈 딕셔너리:", empty_dict)
print("사람 정보:", person)
# 값 접근
print(f"\n이름: {person['이름']}")
print(f"나이: {person.get('나이')}")
print(f"주소: {person.get('주소', '정보 없음')}") # 기본값 설정
# 값 추가 및 수정
person["이메일"] = "kim@example.com"
person["나이"] = 26
print(f"\n수정 후: {person}")
# 딕셔너리 메서드
print(f"\n키 목록: {list(person.keys())}")
print(f"값 목록: {list(person.values())}")
print(f"키-값 쌍: {list(person.items())}")
# 딕셔너리 순회
print("\n딕셔너리 순회:")
for key in person:
print(f"{key}: {person[key]}")
print("\n키-값 쌍으로 순회:")
for key, value in person.items():
print(f"{key} => {value}")
# 중첩 딕셔너리
students = {
"S001": {"이름": "김철수", "점수": {"국어": 90, "수학": 85}},
"S002": {"이름": "이영희", "점수": {"국어": 95, "수학": 90}},
}
print(f"\n학생 정보:")
for student_id, info in students.items():
print(f"{student_id}: {info['이름']} - 국어: {info['점수']['국어']}, 수학: {info['점수']['수학']}")
7. 집합(Set)
집합은 중복되지 않은 요소들의 모음입니다. 수학의 집합 개념과 동일하며, 집합 연산을 수행할 수 있습니다.
# 집합 생성
empty_set = set() # 빈 집합은 set()으로 생성
numbers = {1, 2, 3, 4, 5}
fruits = {"사과", "바나나", "오렌지", "사과"} # 중복 제거됨
print("빈 집합:", empty_set)
print("숫자 집합:", numbers)
print("과일 집합:", fruits) # '사과'는 하나만 포함
# 리스트에서 중복 제거
duplicates = [1, 2, 2, 3, 3, 3, 4]
unique = list(set(duplicates))
print(f"\n중복 제거: {duplicates} → {unique}")
# 집합 연산
set_a = {1, 2, 3, 4, 5}
set_b = {4, 5, 6, 7, 8}
print(f"\n집합 A: {set_a}")
print(f"집합 B: {set_b}")
print(f"합집합: {set_a | set_b}")
print(f"교집합: {set_a & set_b}")
print(f"차집합 (A-B): {set_a - set_b}")
print(f"대칭차집합: {set_a ^ set_b}")
# 집합 메서드
colors = {"빨강", "파랑", "노랑"}
print(f"\n원본 색상: {colors}")
colors.add("초록")
print(f"add 후: {colors}")
colors.update(["보라", "주황"])
print(f"update 후: {colors}")
colors.remove("노랑")
print(f"remove 후: {colors}")
8. 조건문
조건문은 특정 조건에 따라 다른 코드를 실행하도록 하는 제어 구조입니다. Python에서는 if, elif, else를 사용합니다.
# 기본 if문
age = 20
if age >= 18:
print("성인입니다.")
else:
print("미성년자입니다.")
# elif를 사용한 다중 조건
score = 85
print(f"\n점수: {score}")
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
elif score >= 60:
grade = "D"
else:
grade = "F"
print(f"학점: {grade}")
# 논리 연산자 사용
username = "admin"
password = "1234"
if username == "admin" and password == "1234":
print("\n로그인 성공!")
else:
print("\n로그인 실패!")
# in 연산자 사용
fruits = ["사과", "바나나", "오렌지"]
search = "바나나"
if search in fruits:
print(f"\n{search}가 목록에 있습니다.")
else:
print(f"\n{search}가 목록에 없습니다.")
# 삼항 연산자 (조건부 표현식)
age = 15
status = "성인" if age >= 18 else "미성년자"
print(f"\n나이 {age}세: {status}")
# 중첩 조건문
temperature = 25
humidity = 60
print(f"\n온도: {temperature}°C, 습도: {humidity}%")
if temperature >= 20:
if humidity < 70:
print("쾌적한 날씨입니다.")
else:
print("덥고 습합니다.")
else:
print("쌀쌀합니다.")
9. 반복문
반복문은 특정 코드를 여러 번 실행할 때 사용합니다. Python에서는 for와 while 두 가지 반복문을 제공합니다.
# for 반복문 - 리스트 순회
fruits = ["사과", "바나나", "오렌지", "포도"]
print("과일 목록:")
for fruit in fruits:
print(f"- {fruit}")
# range() 함수 사용
print("\n1부터 5까지:")
for i in range(1, 6):
print(i, end=" ")
print()
# enumerate() 사용
print("\n인덱스와 함께 출력:")
for index, fruit in enumerate(fruits):
print(f"{index}: {fruit}")
# 딕셔너리 순회
scores = {"국어": 90, "수학": 85, "영어": 88}
print("\n과목별 점수:")
for subject, score in scores.items():
print(f"{subject}: {score}점")
# while 반복문
count = 0
print("\nwhile 반복문:")
while count < 5:
print(f"카운트: {count}")
count += 1
# break와 continue
print("\nbreak 예제:")
for i in range(1, 11):
if i == 6:
break
print(i, end=" ")
print()
print("\ncontinue 예제 (홀수만 출력):")
for i in range(1, 11):
if i % 2 == 0:
continue
print(i, end=" ")
print()
# 중첩 반복문
print("\n구구단 (2단~3단):")
for i in range(2, 4):
print(f"\n{i}단:")
for j in range(1, 10):
print(f"{i} × {j} = {i*j}")
# 리스트 컴프리헨션 vs 반복문
# 반복문 방식
squares_loop = []
for i in range(1, 6):
squares_loop.append(i**2)
# 리스트 컴프리헨션 방식
squares_comp = [i**2 for i in range(1, 6)]
print(f"\n제곱수 (반복문): {squares_loop}")
print(f"제곱수 (컴프리헨션): {squares_comp}")
10. 함수
함수는 특정 작업을 수행하는 코드 블록입니다. 코드의 재사용성을 높이고, 프로그램을 구조화하는 데 필수적입니다.
# 기본 함수 정의
def greet():
print("안녕하세요!")
greet() # 함수 호출
# 매개변수가 있는 함수
def greet_with_name(name):
print(f"안녕하세요, {name}님!")
greet_with_name("김철수")
# 반환값이 있는 함수
def add(a, b):
return a + b
result = add(3, 5)
print(f"\n3 + 5 = {result}")
# 기본 매개변수
def introduce(name, age, city="서울"):
print(f"\n이름: {name}")
print(f"나이: {age}")
print(f"도시: {city}")
introduce("김철수", 25)
introduce("이영희", 30, "부산")
# 가변 인자 (*args)
def sum_all(*numbers):
total = 0
for num in numbers:
total += num
return total
print(f"\n합계: {sum_all(1, 2, 3, 4, 5)}")
print(f"합계: {sum_all(10, 20, 30)}")
# 키워드 인자 (**kwargs)
def print_info(**info):
print("\n정보:")
for key, value in info.items():
print(f"{key}: {value}")
print_info(이름="김철수", 나이=25, 직업="개발자")
# 람다 함수 (익명 함수)
square = lambda x: x**2
print(f"\n5의 제곱: {square(5)}")
# 람다 함수 활용
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers))
print(f"제곱수: {squared}")
# 함수 문서화
def calculate_area(width, height):
"""
사각형의 넓이를 계산합니다.
Args:
width: 가로 길이
height: 세로 길이
Returns:
사각형의 넓이
"""
return width * height
print(f"\n넓이: {calculate_area(5, 3)}")
print(f"함수 설명: {calculate_area.__doc__}")
11. 모듈과 패키지
모듈은 Python 코드를 담고 있는 파일이며, 패키지는 여러 모듈을 모아놓은 디렉토리입니다. 코드를 구조화하고 재사용하는 데 중요합니다.
# 표준 라이브러리 모듈 import
import math
import random
import datetime
from collections import Counter, defaultdict
# math 모듈 사용
print("Math 모듈 사용:")
print(f"원주율: {math.pi}")
print(f"제곱근: {math.sqrt(16)}")
print(f"올림: {math.ceil(3.2)}")
# random 모듈 사용
print("\nRandom 모듈 사용:")
print(f"랜덤 정수 (1-10): {random.randint(1, 10)}")
print(f"랜덤 실수 (0-1): {random.random():.4f}")
fruits = ["사과", "바나나", "오렌지"]
print(f"랜덤 선택: {random.choice(fruits)}")
# datetime 모듈 사용
print("\nDatetime 모듈 사용:")
now = datetime.datetime.now()
print(f"현재 시각: {now}")
print(f"날짜: {now.date()}")
print(f"시간: {now.time()}")
print(f"포맷팅: {now.strftime('%Y년 %m월 %d일 %H시 %M분')}")
# collections 모듈 사용
print("\nCollections 모듈 사용:")
# Counter
words = ["apple", "banana", "apple", "cherry", "banana", "apple"]
word_count = Counter(words)
print(f"단어 빈도: {word_count}")
# defaultdict
dd = defaultdict(list)
dd["fruits"].append("apple")
dd["fruits"].append("banana")
dd["vegetables"].append("carrot")
print(f"defaultdict: {dict(dd)}")
# 사용자 정의 모듈 예제
# my_module.py 파일이 있다고 가정
"""
# my_module.py 내용
def add(a, b):
return a + b
def multiply(a, b):
return a * b
PI = 3.14159
"""
# 사용 예제
# import my_module
# result = my_module.add(5, 3)
# print(result)
12. 종합 예제: 성적 관리 프로그램
지금까지 배운 내용을 종합하여 간단한 성적 관리 프로그램을 만들어보겠습니다. 이 예제는 Python의 다양한 기능을 활용합니다.
# 종합 예제: 학생 성적 관리 시스템
import json
import datetime
from statistics import mean, median
class StudentGradeManager:
def __init__(self):
self.students = {}
self.subjects = ["국어", "영어", "수학", "과학"]
def add_student(self, student_id, name):
"""학생 추가"""
if student_id not in self.students:
self.students[student_id] = {
"이름": name,
"점수": {},
"등록일": datetime.datetime.now().strftime("%Y-%m-%d")
}
print(f"학생 '{name}'(ID: {student_id})이 추가되었습니다.")
else:
print(f"이미 존재하는 학생 ID입니다: {student_id}")
def add_score(self, student_id, subject, score):
"""점수 추가"""
if student_id in self.students:
if subject in self.subjects:
if 0 <= score <= 100:
self.students[student_id]["점수"][subject] = score
print(f"{self.students[student_id]['이름']}의 {subject} 점수가 {score}점으로 등록되었습니다.")
else:
print("점수는 0-100 사이여야 합니다.")
else:
print(f"유효하지 않은 과목입니다. 가능한 과목: {', '.join(self.subjects)}")
else:
print(f"존재하지 않는 학생 ID입니다: {student_id}")
def calculate_average(self, student_id):
"""평균 점수 계산"""
if student_id in self.students:
scores = self.students[student_id]["점수"].values()
if scores:
return mean(scores)
else:
return 0
return None
def get_grade(self, score):
"""점수를 학점으로 변환"""
if score >= 90:
return "A"
elif score >= 80:
return "B"
elif score >= 70:
return "C"
elif score >= 60:
return "D"
else:
return "F"
def print_report_card(self, student_id):
"""성적표 출력"""
if student_id in self.students:
student = self.students[student_id]
print(f"\n{'='*50}")
print(f"성적표 - {student['이름']} (ID: {student_id})")
print(f"{'='*50}")
total_score = 0
count = 0
for subject in self.subjects:
if subject in student["점수"]:
score = student["점수"][subject]
grade = self.get_grade(score)
print(f"{subject:8} : {score:3}점 ({grade})")
total_score += score
count += 1
else:
print(f"{subject:8} : 미입력")
if count > 0:
average = total_score / count
print(f"{'-'*50}")
print(f"평균 점수: {average:.1f}점 ({self.get_grade(average)})")
print(f"{'='*50}\n")
else:
print(f"존재하지 않는 학생 ID입니다: {student_id}")
def print_class_statistics(self):
"""전체 통계 출력"""
print(f"\n{'='*50}")
print("전체 학급 통계")
print(f"{'='*50}")
if not self.students:
print("등록된 학생이 없습니다.")
return
# 과목별 통계
subject_scores = {subject: [] for subject in self.subjects}
for student in self.students.values():
for subject, score in student["점수"].items():
subject_scores[subject].append(score)
print("과목별 평균 점수:")
for subject, scores in subject_scores.items():
if scores:
avg = mean(scores)
print(f" {subject}: {avg:.1f}점 (최고: {max(scores)}, 최저: {min(scores)})")
# 전체 평균
all_averages = []
for student_id in self.students:
avg = self.calculate_average(student_id)
if avg:
all_averages.append(avg)
if all_averages:
print(f"\n전체 평균: {mean(all_averages):.1f}점")
print(f"최우수 학생 평균: {max(all_averages):.1f}점")
print(f"{'='*50}\n")
# 메인 프로그램
def main():
manager = StudentGradeManager()
# 학생 추가
print("=== 학생 성적 관리 시스템 ===")
print("\n1. 학생 등록")
manager.add_student("S001", "김철수")
manager.add_student("S002", "이영희")
manager.add_student("S003", "박민수")
manager.add_student("S004", "정수진")
# 점수 입력
print("\n2. 점수 입력")
# 김철수
manager.add_score("S001", "국어", 85)
manager.add_score("S001", "영어", 92)
manager.add_score("S001", "수학", 88)
manager.add_score("S001", "과학", 90)
# 이영희
manager.add_score("S002", "국어", 92)
manager.add_score("S002", "영어", 88)
manager.add_score("S002", "수학", 95)
manager.add_score("S002", "과학", 87)
# 박민수
manager.add_score("S003", "국어", 78)
manager.add_score("S003", "영어", 85)
manager.add_score("S003", "수학", 82)
# 정수진
manager.add_score("S004", "국어", 95)
manager.add_score("S004", "영어", 98)
manager.add_score("S004", "수학", 100)
manager.add_score("S004", "과학", 96)
# 개별 성적표 출력
print("\n3. 개별 성적표")
for student_id in ["S001", "S002", "S003", "S004"]:
manager.print_report_card(student_id)
# 전체 통계
print("\n4. 전체 통계")
manager.print_class_statistics()
# 추가 기능: 우수 학생 찾기
print("\n5. 우수 학생 (평균 90점 이상)")
honor_students = []
for student_id, student in manager.students.items():
avg = manager.calculate_average(student_id)
if avg >= 90:
honor_students.append((student["이름"], avg))
if honor_students:
honor_students.sort(key=lambda x: x[1], reverse=True)
for name, avg in honor_students:
print(f" - {name}: {avg:.1f}점")
else:
print(" 우수 학생이 없습니다.")
# 프로그램 실행
if __name__ == "__main__":
main()
마무리
이 튜토리얼에서는 Python의 기초 문법을 체계적으로 살펴보았습니다. 변수와 자료형부터 시작하여 조건문, 반복문, 함수, 그리고 객체지향 프로그래밍의 기초까지 다루었습니다. 마지막 종합 예제를 통해 이러한 개념들이 실제로 어떻게 활용되는지 확인할 수 있었습니다.
- 매일 조금씩이라도 코드를 작성하며 연습하세요
- 에러 메시지를 두려워하지 말고, 이해하려고 노력하세요
- 다른 사람의 코드를 읽고 분석해보세요
- 작은 프로젝트부터 시작하여 점진적으로 복잡한 프로그램을 만들어보세요
- Python 공식 문서와 커뮤니티를 적극 활용하세요
#python #tutorial #파이썬 #튜토리얼 #기초 #문법 #가이드