Post

[Python] 함수 사용자입력 반복문 클래스

📌 들어가며

이번 글에서는 반복문(for/range/내포), 함수(가변인자·다중반환·global·lambda), 사용자 입력, 파일 입출력, 그리고 클래스까지 폭넓게 리뷰한다.


1. 반복문

커피 자판기 — while + 조건문:

1
2
3
4
5
6
7
coffee = 10
while True:
    money = int(input("돈을 넣어 주세요 : "))
    if   money == 300: print("커피를 드립니다."); coffee -= 1
    elif money > 300:  print("거스름 돈은 %d원입니다." % (money-300)); coffee -= 1
    else:              print("금액이 부족합니다.")
    if coffee == 0:    print("매진되었습니다"); break

for문 — 파이썬의 직관성을 잘 보여준다.

1
2
3
4
5
6
7
8
9
list = [1, 2, 3, 4, 5]
for i in list:          # 원소를 하나씩
    print(i)

a = [(1,2), (3,4), (5,6)]
for x in a:             # 튜플 세트로
    print(x)            # (1,2), (3,4), (5,6)
for x, y in a:          # 튜플을 각 값으로 분해
    print(x + y)        # 3, 7, 11

rangerange(start, stop, step) (start 생략 시 0, step 생략 시 1):

1
2
3
4
5
6
7
for i in range(1, 11, 2): ...   # 1,3,5,7,9
for i in range(11, 1, -2): ...  # 11,9,7,5,3 (감소)

# 구구단
for i in range(2, 10):
    for j in range(1, 10):
        print(i * j, end=" ")

리스트 내포 — 여러 줄을 한 줄로:

1
2
a = [1, 2, 3, 4]
result = [n*3 for n in a if n % 2 == 0]   # 짝수만 3배 → [6, 12]

💡 조건(if)이 먼저 검사되고, 통과한 n이 연산되어 리스트에 담긴다.


2. 함수

함수는 매개변수 유무 × 리턴값 유무로 4종류가 있다.

가변 인자 — 개수를 모를 때 * 사용:

1
2
3
4
5
6
def add_many(*args):    # 여러 개 받기
    result = 0
    for i in args:
        result += i
    return result
add_many(1, 2, 3, 4, 5)   # 15

다중 반환 — 튜플로:

1
2
3
4
def add_mul(a, b):
    return a + b, a * b       # (7, 12) 튜플로 반환
result = add_mul(3, 4)        # (7, 12)
result1, result2 = add_mul(3, 4)   # 언패킹 → 7, 12

💡 리턴값은 언제나 한 개다. 식이 2개면 튜플 하나로 묶여 나온다. return을 만나면 함수는 즉시 종료되므로, 그 아래의 두 번째 return은 의미 없다.

변수 범위와 global:

1
2
3
4
5
6
7
8
9
10
a = 1
def vartest(a):    # 매개변수 a는 함수 안에서만
    a = a + 1
vartest(a); print(a)   # 1 (원본 안 바뀜)

a = 1
def vartest2():
    global a           # 전역 a를 사용
    a = a + 1
    return a

lambda — 함수를 한 줄로:

1
2
add = lambda a, b: a + b
add(3, 4)   # 7

3. 사용자 입력

input()문자열(str)만 반환한다. 숫자로 쓰려면 int(input()).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def num(a):
    if a % 2 == 1: print("홀수입니다.")
    else:          print('짝수입니다')
num(int(input()))

# choice로 로직 분기
def add_mul(choice, *args):
    if choice == "add":
        result = 0
        for i in args: result += i
    elif choice == "mul":
        result = 1
        for i in args: result *= i
    return result
print(add_mul('mul', 1, 2, 3, 5))   # 30

4. 파일 입출력

자바보다 훨씬 간단하다.

1
2
f = open("파일이름.txt", 'w')   # 생성
f.close()                        # 항상 닫기
모드역할
'w'쓰기(새로)
'r'읽기
'a'추가(append)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 쓰기
f = open("새파일.txt", 'w')
for i in range(1, 11):
    f.write("%d번째 줄입니다.\n" % i)
f.close()

# 읽기 (한 줄씩)
f = open("새파일.txt", 'r')
while True:
    line = f.readline()
    if not line: break
    print(line)
f.close()

# read() → 전체를 하나의 문자열로
lines = open("새파일.txt", 'r').read()

with — 자동으로 닫아준다:

1
2
with open("새파일.txt", 'w') as f:
    f.write("No pain No gain")   # close 자동

5. 클래스 맛보기

1
2
3
4
5
6
7
8
9
10
class Calculator:
    def __init__(self):   # 생성자
        self.result = 0
    def add(self, num):
        self.result += num
        return self.result

cal1 = Calculator()
print(cal1.add(3))   # 3
print(cal1.add(3))   # 6 (result 누적)

💡 self.result가 객체의 상태로 남아 있어, add를 호출할 때마다 값이 누적된다.


📝 정리

1
2
3
4
5
6
함수·입력·파일·클래스
├─ for/range  원소 순회, range(s,e,step), 리스트 내포
├─ 함수       *args(가변) / 다중반환(튜플) / global / lambda
├─ 입력       input()은 str → int() 변환
├─ 파일       open('w'/'r'/'a') + close, with는 자동
└─ 클래스     __init__ + self로 상태 유지
개념한 줄 정의
*args개수 모를 때 가변 인자
lambda한 줄짜리 익명 함수
with open파일을 자동으로 닫음
self.변수객체의 상태 유지

파이썬의 함수·파일 처리는 자바보다 훨씬 간결하다. 특히 *args, lambda, with open은 파이썬다운 표현력을 잘 보여준다.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.