문자열 서식화 (String Formatting)
Python에서는 다양한 방법으로 변수를 문자열에 삽입할 수 있습니다. 대표적으로 % 연산자를 활용한 전통적인 포매팅 방식이 있습니다.
기본 사용법: %s와 %d
name = input("이름을 입력하세요: ")
age = int(input("나이를 입력하세요: "))
msg = "안녕하세요, 저는 %s이고, %d세입니다." % (name, age)
print(msg)
입력 예시:
이름을 입력하세요: 홍길동
나이를 입력하세요: 25
출력 결과:
안녕하세요, 저는 홍길동이고, 25세입니다.
이름을 입력하세요: 홍길동
나이를 입력하세요: 25
출력 결과:
안녕하세요, 저는 홍길동이고, 25세입니다.
여러 데이터 타입 혼합
username = input("사용자명: ")
years = input("경력 연수: ")
position = input("직무: ")
interest = input("관심 분야: ")
profile = '''--- %s의 프로필 ---
사용자명 : %s
경력 : %s년
직무 : %s
관심사 : %s
------------------''' % (username, username, years, position, interest)
print(profile)
특수 문자 출력: %%
문자 '%' 자체를 출력하려면 %%를 사용해야 합니다. 단일 %는 포매팅 시작을 의미하기 때문입니다.
progress = 15
print("현재 학습 진행률: %d%%" % progress)
출력 결과:
현재 학습 진행률: 15%
현재 학습 진행률: 15%
while 루프와 else 블록
Python의 while 문은 선택적으로 else 절을 가질 수 있으며, 이는 루프가 정상 종료되었을 때 실행됩니다. 단, break로 인해 종료된 경우엔 실행되지 않습니다.
# continue 사용 시 (else 실행됨)
counter = 0
while counter < 3:
counter += 1
if counter == 2:
continue
print(f"카운트: {counter}")
else:
print("루프가 정상적으로 종료되었습니다.")
# break 사용 시 (else 미실행)
flag = False
count = 0
while count < 3:
count += 1
if count == 2:
break
else:
flag = True
if not flag:
print("break로 인해 else 블록이 실행되지 않았습니다.")
문자 인코딩의 기초
컴퓨터는 모든 데이터를 이진수(0과 1)로 저장하고 처리합니다. 텍스트 역시 특정 규칙에 따라 숫자로 변환되어 저장되며, 이를 인코딩이라 부릅니다.
- ASCII: 영문자, 숫자, 특수문자 등 128개 문자를 7비트로 표현. 한 문자당 1바이트 사용.
- Unicode: 전 세계 모든 언어의 문자를 포함하기 위한 표준. 초기에는 각 문자에 2~4바이트 할당.
- UTF-8: 유니코드의 가변 길이 인코딩 방식. ASCII 호환성 유지하며, 한글은 일반적으로 3바이트 사용.
- GBK: 중국어 간체자를 위한 인코딩. 한자는 2바이트로 표현.
ASCII 인코딩 일부 예시
| 10진수 | 16진수 | 문자 | 설명 |
|---|---|---|---|
| 65 | 0x41 | A | 대문자 A |
| 97 | 0x61 | a | 소문자 a |
| 48 | 0x30 | 0 | 숫자 0 |
| 32 | 0x20 | (공백) | 스페이스 |
| 10 | 0x0A | - | 줄바꿈(LF) |
| 13 | 0x0D | - | 캐리지 리턴(CR) |
연산자와 논리 평가
산술 및 비교 연산자
- 산술: +, -, *, /, // (정수 나눗셈), ** (제곱)
- 비교: ==, !=, >, <, >=, <=
- 할당: =, +=, -=, *=, /=, //=, %=, **=
논리 연산자와 평가 순서
논리 연산자 and, or, not은 다음과 같은 우선순위를 가집니다: 괄호() > not > and > or
# 복합 조건식 평가
result = 2 > 1 and 1 < 4 or 2 < 3 and 9 > 6 or 2 < 4 and 3 < 2
# (True and True) or (True and True) or (True and False)
# True or True or False → 최종: True
print(result) # 출력: True
단축 평가와 피연산자 반환
Python의 and와 or는 불리언 값만 반환하는 것이 아니라, 실제 피연산자 값을 반환할 수 있습니다.
# 'or'의 동작 방식
print(1 or 2) # 출력: 1 (첫 번째 참 값)
print(0 or 3) # 출력: 3 (0은 거짓, 다음 값 반환)
print(0 or 4) # 출력: 4
# 'and'의 동작 방식
print(1 and 2) # 출력: 2 (모두 참이면 마지막 값 반환)
print(0 and 3) # 출력: 0 (첫 번째 거짓 값 반환)
print(5 and 0) # 출력: 0
숫자의 불리언 변환
모든 숫자는 bool() 함수를 통해 불리언 값으로 변환 가능합니다.
print(bool(0)) # False
print(bool(-1)) # True
print(bool(100)) # True
print(bool(0.0)) # False
실습 문제
문제 1: 민감한 키워드 필터링
사용자 입력에서 특정 민감 키워드("소녀스타일", "철망치")가 포함되었는지 확인하고, 포함되면 재입력을 요청하는 프로그램을 작성하세요.
sensitive_words = ["소녀스타일", "철망치"]
while True:
user_input = input("내용을 입력하세요: ")
contains_blocked = any(word in user_input for word in sensitive_words)
if contains_blocked:
print("민감한 키워드가 포함되어 있습니다. 다시 입력해 주세요.")
else:
print(f"입력 완료: {user_input}")
break
문제 2: 맞춤형 재미 템플릿
사용자의 이름, 선호 장소, 취미를 입력받아 창의적인 문장을 생성하는 스크립트를 작성하세요.
name = input("이름: ")
place = input("좋아하는 장소: ")
hobby = input("취미: ")
template = f"존경받는 {name}님은 {place}에서 {hobby}하는 것을 세상에서 제일 좋아합니다!"
print(template)