Python 기초 — 변수와 데이터 타입
변수(Variable)란 무엇인가
변수(Variable)는 데이터를 저장하기 위한 이름이 붙은 메모리 공간입니다. 파이썬에서는 = 기호를 사용해 변수에 값을 할당합니다.
# 변수 선언과 할당
이름 = "김파이썬"
나이 = 25
키 = 175.5
학생여부 = True
파이썬은 동적 타이핑(Dynamic Typing) 언어이므로, 변수 선언 시 자료형을 명시하지 않아도 됩니다. 할당된 값을 보고 파이썬이 자동으로 자료형을 결정합니다.
변수 이름 규칙
파이썬 변수 이름에는 다음 규칙이 있습니다.
| 규칙 | 설명 | 예시 |
|---|---|---|
| 허용 문자 | 영문자, 숫자, 밑줄(_) | my_var, score1 |
| 시작 문자 | 영문자 또는 밑줄(_)로 시작 | _private, name |
| 대소문자 구분 | Name과 name은 다른 변수 | Name != name |
| 예약어 사용 불가 | if, for, while 등 사용 불가 | if = 5 |
권장 네이밍 컨벤션 (스네이크 케이스):
# 좋은 예
student_name = "홍길동"
total_score = 95
is_active = True
# 나쁜 예 (틀린 건 아니지만 관례에 어긋남)
StudentName = "홍길동"
totalScore = 95
기본 자료형 4가지
1. int — 정수형
소수점 없는 정수를 나타냅니다. 파이썬 3에서는 정수 크기에 제한이 없습니다.
a = 10
b = -5
c = 0
d = 1000000000
# 다양한 진수 표현
이진수 = 0b1010 # 10 (2진수)
팔진수 = 0o12 # 10 (8진수)
십육진수 = 0x0A # 10 (16진수)
print(이진수, 팔진수, 십육진수) # 10 10 10
2. float — 실수형
소수점이 있는 숫자를 나타냅니다. 내부적으로 부동소수점 방식을 사용합니다.
pi = 3.14159
temperature = -2.5
speed = 1.5e3 # 과학적 표기법: 1500.0
print(pi) # 3.14159
print(speed) # 1500.0
# 부동소수점 주의 사항
print(0.1 + 0.2) # 0.30000000000000004 (부동소수점 오차)
print(round(0.1 + 0.2, 1)) # 0.3 (round로 해결)
3. str — 문자열형
텍스트 데이터를 나타냅니다. 작은따옴표(') 또는 큰따옴표(") 로 감쌉니다.
name1 = "파이썬"
name2 = '프로그래밍'
long_text = """
이것은
여러 줄
문자열입니다.
"""
print(name1) # 파이썬
print(name2) # 프로그래밍
print(long_text)
4. bool — 논리형
True 또는 False 두 가지 값만 가집니다. 대소문자에 주의하세요.
is_raining = True
is_sunny = False
print(is_raining) # True
print(type(is_raining)) # <class 'bool'>
# 비교 연산의 결과는 bool
print(5 > 3) # True
print(5 < 3) # False
print(5 == 5) # True
type() 함수 — 자료형 확인
type() 함수로 변수의 자료형을 확인할 수 있습니다.
a = 10
b = 3.14
c = "안녕"
d = True
print(type(a)) # <class 'int'>
print(type(b)) # <class 'float'>
print(type(c)) # <class 'str'>
print(type(d)) # <class 'bool'>
형변환 (Type Casting)
한 자료형을 다른 자료형으로 변환하는 것을 형변환이라고 합니다.
명시적 형변환
# str → int
age_str = "25"
age_int = int(age_str)
print(age_int + 1) # 26
# str → float
price_str = "9.99"
price_float = float(price_str)
print(price_float * 2) # 19.98
# int → str
score = 95
score_str = str(score)
print("점수: " + score_str) # 점수: 95
# int → float
x = 5
y = float(x)
print(y) # 5.0
# float → int (소수점 버림)
z = 3.9
print(int(z)) # 3 (반올림 아님, 버림!)
# str → bool
print(bool("")) # False (빈 문자열)
print(bool("hello")) # True
print(bool(0)) # False
print(bool(1)) # True
형변환 오류 주의
# 이런 변환은 오류 발생!
wrong = int("abc") # ValueError: invalid literal for int()
산술 연산자
a = 17
b = 5
print(a + b) # 22 (덧셈)
print(a - b) # 12 (뺄셈)
print(a * b) # 85 (곱셈)
print(a / b) # 3.4 (나눗셈, 항상 float 반환)
print(a // b) # 3 (몫, 정수 나눗셈)
print(a % b) # 2 (나머지)
print(a ** b) # 1419857 (거듭제곱: 17^5)
복합 할당 연산자
x = 10
x += 5 # x = x + 5 → 15
x -= 3 # x = x - 3 → 12
x *= 2 # x = x * 2 → 24
x //= 5 # x = x // 5 → 4
print(x) # 4
input() 함수 — 사용자 입력받기
input() 함수는 사용자로부터 키보드 입력을 받습니다. 반환값은 항상 문자열(str)입니다.
# 기본 사용법
name = input("이름을 입력하세요: ")
print("안녕하세요,", name + "님!")
# 숫자 입력받기 — 반드시 형변환 필요
age = int(input("나이를 입력하세요: "))
print("내년 나이:", age + 1)
# 실수 입력받기
height = float(input("키를 입력하세요(cm): "))
print("키(m):", height / 100)
중요: input()은 항상 문자열을 반환합니다. 숫자 계산이 필요하다면 반드시 int() 또는 float()로 변환하세요.
# 이렇게 하면 안 됨!
n = input("숫자 입력: ")
print(n + 1) # TypeError: can only concatenate str (not "int") to str
# 이렇게 해야 함
n = int(input("숫자 입력: "))
print(n + 1) # 정상 동작
문자열 심화
문자열 연산
first = "Hello"
second = "World"
# 연결 (concatenation)
combined = first + ", " + second + "!"
print(combined) # Hello, World!
# 반복
print("=" * 20) # ====================
print("ha" * 3) # hahaha
문자열 인덱싱과 슬라이싱
s = "Python"
# 0 1 2 3 4 5 (양수 인덱스)
# -6-5-4-3-2-1 (음수 인덱스)
print(s[0]) # P (첫 번째 문자)
print(s[-1]) # n (마지막 문자)
print(s[2:5]) # tho (인덱스 2~4)
print(s[:3]) # Pyt (처음부터 인덱스 2까지)
print(s[3:]) # hon (인덱스 3부터 끝까지)
print(s[::-1]) # nohtyP (문자열 뒤집기)
주요 문자열 메서드
text = " Hello, Python World! "
print(text.strip()) # "Hello, Python World!" (앞뒤 공백 제거)
print(text.lower()) # " hello, python world! " (소문자)
print(text.upper()) # " HELLO, PYTHON WORLD! " (대문자)
print(text.replace("Python", "파이썬")) # " Hello, 파이썬 World! "
print(text.split(",")) # [' Hello', ' Python World! '] (분리)
print(len(text)) # 24 (문자열 길이)
print(text.count("l")) # 3 (문자 개수)
print(text.find("Python")) # 9 (처음 나타나는 인덱스)
print("Python" in text) # True (포함 여부)
f-문자열 (f-string) — 권장 방식
파이썬 3.6 이상에서 사용 가능한 강력한 문자열 포매팅 방법입니다.
name = "Alice"
age = 30
score = 95.5
# f-string
print(f"이름: {name}, 나이: {age}세")
# 출력: 이름: Alice, 나이: 30세
# 수식도 가능
print(f"내년 나이: {age + 1}세")
# 출력: 내년 나이: 31세
# 소수점 자리수 제어
print(f"점수: {score:.1f}점")
# 출력: 점수: 95.5점
# 정수 자릿수 맞추기
print(f"번호: {42:03d}")
# 출력: 번호: 042
None — 아무것도 없음
None은 파이썬의 특별한 값으로, ‘값이 없음’ 또는 ‘아직 정해지지 않음’을 나타냅니다.
result = None
print(result) # None
print(type(result)) # <class 'NoneType'>
# None 여부 확인
if result is None:
print("값이 없습니다")
다중 할당
파이썬에서는 여러 변수에 동시에 값을 할당할 수 있습니다.
# 동시 할당
x, y, z = 1, 2, 3
print(x, y, z) # 1 2 3
# 같은 값 할당
a = b = c = 0
print(a, b, c) # 0 0 0
# 값 교환 (swap) — 파이썬의 우아한 방법
a, b = 10, 20
a, b = b, a
print(a, b) # 20 10
실전 예제 — 간단한 계산기
# simple_calc.py
print("=== 간단한 계산기 ===")
a = float(input("첫 번째 숫자를 입력하세요: "))
b = float(input("두 번째 숫자를 입력하세요: "))
print(f"\n{a} + {b} = {a + b}")
print(f"{a} - {b} = {a - b}")
print(f"{a} * {b} = {a * b}")
if b != 0:
print(f"{a} / {b} = {a / b:.4f}")
else:
print("나눗셈: 0으로 나눌 수 없습니다!")
학습 정리
| 항목 | 핵심 내용 |
|---|---|
| 변수 | =으로 값 할당, 동적 타이핑 |
| int | 정수형, 사칙연산 + 몫// 나머지% 거듭제곱** |
| float | 실수형, 부동소수점 오차 주의 |
| str | 문자열, 인덱싱/슬라이싱, 메서드 활용 |
| bool | True/False, 비교연산 결과 |
| 형변환 | int(), float(), str(), bool() |
| input() | 항상 str 반환 → 숫자 계산 시 형변환 필수 |
| f-string | f"{변수}" 형식으로 문자열 안에 변수 삽입 |
실전 퀴즈 5문항
Q1. 다음 코드의 출력 결과를 쓰세요.
x = "5"
y = 3
print(int(x) + y)
print(x * y)
A1.
- 첫 번째 줄:
8—int("5")는 정수 5가 되고, 3을 더하면 8 - 두 번째 줄:
555— 문자열"5"에* 3은 문자열 반복이므로"555"
Q2. input() 함수가 반환하는 자료형은 무엇인가요? 사용자로부터 나이를 입력받아 10년 후 나이를 출력하는 코드를 작성하세요.
A2. input()은 항상 문자열(str)을 반환합니다.
age = int(input("나이를 입력하세요: "))
print("10년 후 나이:", age + 10)
Q3. 아래 코드에서 오류가 발생하는 이유와 수정 방법을 설명하세요.
A3. input()은 항상 문자열을 반환하므로 num은 str 타입입니다. str과 int를 +로 연산하면 TypeError가 발생합니다. 수정 방법: num = int(input("숫자 입력: ")) 으로 즉시 정수로 형변환해야 합니다.
Q4. f-string을 사용하여 변수 name = "홍길동", score = 88.7을 활용해 "홍길동 님의 점수: 88.7점" 을 출력하는 코드를 작성하세요.
A4.
name = "홍길동"
score = 88.7
print(f"{name} 님의 점수: {score}점")
Q5. 다음 코드를 실행하면 result에 어떤 값이 저장될까요? 이유도 함께 설명하세요.
A5. result에는 3이 저장됩니다. int()는 반올림이 아니라 소수점 이하를 버림(truncation)합니다. 따라서 3.9에서 소수점 이하 .9를 버리고 3이 됩니다. 반올림을 원한다면 round(3.9)를 사용해야 합니다 (결과: 4).
OIYO 편집부
편집부OIYO 편집부는 경제·법률·생활·자기이해 주제를 1차 자료와 공개 통계로 검증해 정리합니다. 모든 글은 출처 표기와 정기 점검을 거쳐 실용성과 정확성을 함께 유지합니다.