メインコンテンツにスキップ

変数とデータ型

変数とは?

変数は値を格納するコンテナです。Pythonは動的型付けを使用して、型を自動的に推論します。

# 변수 선언과 할당
name = "홍길동"
age = 25
height = 175.5
is_student = True

print(name) # 홍길동
print(age) # 25

変数名のルール

# ✅ 올바른 변수명
user_name = "김철수"
age2 = 30
_private = "내부용"
total_price = 10000

# ❌ 잘못된 변수명
2age = 30 # 숫자로 시작 불가
user-name = "" # 하이픈 불가
for = 10 # 예약어 불가

命名規則

- snake_caseを使用(Python標準)
- 小文字で始める
- 意味のある名前を使用
- 予約語を避ける(if、for、classなど)

基本データ型

1. 数値 (Numbers)

整数 (int)

# 정수
x = 10
y = -5
big_number = 1000000

# 연산
print(10 + 5) # 15 (덧셈)
print(10 - 5) # 5 (뺄셈)
print(10 * 5) # 50 (곱셈)
print(10 / 5) # 2.0 (나눗셈 - 실수 반환)
print(10 // 5) # 2 (정수 나눗셈)
print(10 % 3) # 1 (나머지)
print(2 ** 3) # 8 (거듭제곱)

浮動小数点数 (float)

# 실수
pi = 3.14
temperature = -15.5
scientific = 1.5e3 # 1500.0

# 정밀도 주의
print(0.1 + 0.2) # 0.30000000000000004 (부동소수점 오차)

# 반올림
result = round(0.1 + 0.2, 1)
print(result) # 0.3

複素数 (complex)

z = 3 + 4j
print(z.real) # 3.0 (실수부)
print(z.imag) # 4.0 (허수부)

2. 文字列 (String)

# 문자열 생성
name = "홍길동"
message = '안녕하세요'
multi_line = """여러 줄
문자열
작성"""

# 문자열 연산
greeting = "안녕" + "하세요" # 안녕하세요 (연결)
repeat = "!" * 3 # !!! (반복)

# 인덱싱과 슬라이싱
text = "Python"
print(text[0]) # P (첫 글자)
print(text[-1]) # n (마지막 글자)
print(text[0:3]) # Pyt (0부터 3 전까지)
print(text[2:]) # thon (2부터 끝까지)
print(text[:4]) # Pyth (처음부터 4 전까지)

文字列メソッド

text = "Hello, Python!"

# 대소문자 변환
print(text.upper()) # HELLO, PYTHON!
print(text.lower()) # hello, python!
print(text.capitalize()) # Hello, python!

# 검색
print(text.find("Python")) # 7 (위치)
print(text.count("l")) # 2 (개수)
print("Python" in text) # True (포함 여부)

# 변환
print(text.replace("Python", "World")) # Hello, World!
print(text.split(", ")) # ['Hello', 'Python!']

# 공백 제거
text = " hello "
print(text.strip()) # "hello"
print(text.lstrip()) # "hello "
print(text.rstrip()) # " hello"

文字列フォーマット

name = "홍길동"
age = 25

# f-string (Python 3.6+, 추천)
message = f"이름: {name}, 나이: {age}"
print(message) # 이름: 홍길동, 나이: 25

# 계산도 가능
print(f"내년 나이: {age + 1}") # 내년 나이: 26

# 포맷 지정
price = 1234.5678
print(f"가격: {price:.2f}원") # 가격: 1234.57원

# format() 메서드
message = "이름: {}, 나이: {}".format(name, age)

# % 포매팅 (오래된 방식)
message = "이름: %s, 나이: %d" % (name, age)

3. ブール値 (Boolean)

# 불린 값
is_active = True
is_deleted = False

# 비교 연산
print(5 > 3) # True
print(5 == 5) # True
print(5 != 3) # True

# 논리 연산
print(True and False) # False
print(True or False) # True
print(not True) # False

# 실제 활용
age = 20
is_adult = age >= 18
print(is_adult) # True

TruthyとFalsy

# False로 간주되는 값들
print(bool(0)) # False
print(bool("")) # False
print(bool(None)) # False
print(bool([])) # False
print(bool({})) # False

# True로 간주되는 값들
print(bool(1)) # True
print(bool("hello")) # True
print(bool([1, 2])) # True
print(bool({"a": 1})) # True

# 조건문에서 활용
if "hello": # "hello"는 True
print("실행됨")

4. None型

# None은 '값이 없음'을 나타냄
result = None

if result is None:
print("결과가 없습니다")

# 함수 기본값
def greet(name=None):
if name is None:
print("안녕하세요!")
else:
print(f"안녕하세요, {name}님!")

greet() # 안녕하세요!
greet("홍길동") # 안녕하세요, 홍길동님!

型変換

明示的変換

# 문자열 → 숫자
age = int("25") # 25
price = float("19.99") # 19.99

# 숫자 → 문자열
age_str = str(25) # "25"

# 불린 변환
print(bool(1)) # True
print(bool(0)) # False
print(bool("hello")) # True
print(bool("")) # False

# 리스트 → 튜플
numbers = [1, 2, 3]
numbers_tuple = tuple(numbers) # (1, 2, 3)

型チェック

age = 25
name = "홍길동"
height = 175.5

# type() 함수
print(type(age)) # <class 'int'>
print(type(name)) # <class 'str'>
print(type(height)) # <class 'float'>

# isinstance() 함수
print(isinstance(age, int)) # True
print(isinstance(name, str)) # True
print(isinstance(height, int)) # False

演算子

算術演算子

a = 10
b = 3

print(a + b) # 13 (덧셈)
print(a - b) # 7 (뺄셈)
print(a * b) # 30 (곱셈)
print(a / b) # 3.333... (나눗셈)
print(a // b) # 3 (몫)
print(a % b) # 1 (나머지)
print(a ** b) # 1000 (거듭제곱)

比較演算子

print(5 == 5)  # True  (같음)
print(5 != 3) # True (다름)
print(5 > 3) # True (큼)
print(5 < 3) # False (작음)
print(5 >= 5) # True (크거나 같음)
print(5 <= 3) # False (작거나 같음)

# 문자열 비교
print("a" < "b") # True (사전순)

論理演算子

age = 20
has_license = True

# and: 모두 True여야 True
can_drive = age >= 18 and has_license
print(can_drive) # True

# or: 하나만 True면 True
is_free = age < 7 or age >= 65
print(is_free) # False

# not: 반대
is_not_adult = not (age >= 18)
print(is_not_adult) # False

代入演算子

x = 10

x += 5 # x = x + 5 → 15
x -= 3 # x = x - 3 → 12
x *= 2 # x = x * 2 → 24
x /= 4 # x = x / 4 → 6.0
x //= 2 # x = x // 2 → 3.0
x %= 2 # x = x % 2 → 1.0
x **= 3 # x = x ** 3 → 1.0

実践例

温度変換器

def celsius_to_fahrenheit(celsius):
"""섭씨를 화씨로 변환"""
fahrenheit = (celsius * 9/5) + 32
return fahrenheit

def fahrenheit_to_celsius(fahrenheit):
"""화씨를 섭씨로 변환"""
celsius = (fahrenheit - 32) * 5/9
return celsius

# 사용
c = 25
f = celsius_to_fahrenheit(c)
print(f"{c}°C = {f:.1f}°F") # 25°C = 77.0°F

f = 77
c = fahrenheit_to_celsius(f)
print(f"{f}°F = {c:.1f}°C") # 77°F = 25.0°C

BMI計算機

def calculate_bmi(weight, height):
"""BMI 계산 (체중kg, 키m)"""
bmi = weight / (height ** 2)
return round(bmi, 1)

def get_bmi_category(bmi):
"""BMI 카테고리 반환"""
if bmi < 18.5:
return "저체중"
elif bmi < 23:
return "정상"
elif bmi < 25:
return "과체중"
else:
return "비만"

# 사용
weight = 70 # kg
height = 1.75 # m

bmi = calculate_bmi(weight, height)
category = get_bmi_category(bmi)

print(f"BMI: {bmi}")
print(f"분류: {category}")

テキスト分析器

def analyze_text(text):
"""텍스트 분석"""
length = len(text)
words = len(text.split())
uppercase = sum(1 for c in text if c.isupper())
lowercase = sum(1 for c in text if c.islower())
digits = sum(1 for c in text if c.isdigit())

print(f"=== 텍스트 분석 ===")
print(f"전체 길이: {length}")
print(f"단어 수: {words}")
print(f"대문자: {uppercase}")
print(f"소문자: {lowercase}")
print(f"숫자: {digits}")

# 사용
text = "Hello Python 2024!"
analyze_text(text)

入力を受け取る

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

# 숫자 입력 (변환 필요)
age = int(input("나이를 입력하세요: "))
next_year_age = age + 1
print(f"내년 나이: {next_year_age}")

# 여러 값 입력
text = input("두 숫자를 띄어쓰기로 입력: ")
a, b = map(int, text.split())
print(f"합: {a + b}")

よくある質問

Q1. 変数宣言時に型を指定する必要がありますか?

A: Pythonは動的型付けのため、型は自動的に決定されます。

# 타입 자동 추론
x = 10 # int
x = "hello" # 이제 str (재할당 가능)

# 타입 힌트는 가능 (검증은 안 됨)
age: int = 25
name: str = "홍길동"

Q2. 除算(/)と(//)の違いは?

A: /は浮動小数点数を返し、//は整数を返します

print(7 / 2)   # 3.5 (실수)
print(7 // 2) # 3 (정수)

# 음수도 마찬가지
print(-7 // 2) # -4 (내림)

Q3. 文字列が不変(immutable)とは?

A: 文字列は作成後に変更できません。

text = "hello"
# text[0] = "H" # ❌ 에러!

# 새 문자열 생성해야 함
text = "H" + text[1:] # "Hello"

Q4. isと==の違いは?

A: isはオブジェクトの同一性、==は値の等価性をチェックします

a = [1, 2, 3]
b = [1, 2, 3]
c = a

print(a == b) # True (값이 같음)
print(a is b) # False (다른 객체)
print(a is c) # True (같은 객체)

# None 비교는 is 사용
x = None
print(x is None) # ✅ 권장
print(x == None) # 가능하지만 비권장

次のステップ

変数と基本型を学びました!

要点:
✅ 変数宣言と命名規則
✅ 数値、文字列、ブール値、None
✅ 型変換とチェック
✅ 各種演算子
✅ 入力を受け取る

次のステップ文字列処理で文字列についてさらに学びましょう!