Python (2) - 제어문, 함수, 입출력

if문

 

if문은 다음과 같은 구조를 가집니다.

if 조건문:
    문장
elif 조건문:
    문장
else:
    문장
    
# 문장이 한 줄인 경우
if 조건문: 문장
elif 조건문: 문장
else: 문장

 

중요) if문뿐만 아니라 파이썬의 모든 문법에는 다른 언어와 달리 중괄호{} 가 사용되지 않고 콜론(:)과 들여쓰기(indentation)를 기준으로 구분하기 때문에 들여쓰기를 하지 않거나 그 깊이(depth)를 맞추지 않으면 에러가 납니다.

 

조건문 연산자

 

1. 비교 연산자

 

2. 논리 연산자

 

 

조건부 표현식

 

파이썬의 조건부 표현식(conditional expression)을 사용하면 다음과 같이 간단하게 표현도 가능합니다.

변수 = 참일때 값 if 조건문 else 거짓일때 값

message = "success" if score >= 60 else "failure"

 

 

while문

 

while문은 다음과 같은 구조를 가집니다.

while 조건문:
    문장1
    문장2
    문장3
    
# 무한 루프
while True:
    문장1
    문장2
    문장3

 

반복문 안에서 반복문을 즉시 종료하고 빠져나가는 break와 해당 반복 회차를 건너뛰고 다음 반복을 진행하는 continue 키워드를 사용하여 흐름을 제어할 수 있습니다.

 

 

for문

 

for문은 다음과 같은 구조를 가집니다.

for 변수 in 반복 가능한 객체:
    문장1
    문장2

 

for문도 동일하게 반복문 안에서 반복문을 즉시 종료하고 빠져나가는 break와 해당 반복 회차를 건너뛰고 다음 반복을 진행하는 continue 키워드를 사용하여 흐름을 제어할 수 있습니다.

 

range()

 

range() 함수는 숫자 시퀀스를 생성하는 파이썬 내장 함수로 주로 for 반복문에서 많이 사용됩니다.

range(시작, 끝, 간격)	# 시작 <= x < 끝

a = range(5)		# 0, 1, 2, 3, 4
range(1, 3)		# 1, 2
range(1, 9, 2)		# 1, 3, 5, 7

list(a)			# [0, 1, 2, 3, 4]

 

다양한 for문

a = [(1, 2), (3, 4), (5, 6)]
for (start, end) in a:
    print(start + end)

for i in range(2, 10):
    for j in range(1, 10):
        print(i*j)

 

리스트 컴프리헨션

 

리스트 컴프리헨션(List Comprehension)은 파이썬에서 리스트를 간결하고 직관적인 방식으로 생성할 수 있는 문법입니다. 반복문과 조건문을 한 줄로 표현할 수 있어 코드가 짧고 읽기 쉬워집니다.

[표현식 for 항목 in 반복가능한객체]

[표현식 for 항목 in 반복가능한객체 if 조건문]

a = [1, 2, 3, 4]
result = [num*3 for num in a if num%2 == 0]

 

 

함수

 

파이썬에서 함수는 다음과 같이 정의합니다.

def 함수명(매개변수):
    문장1
    문장2

 

매개변수와 인수

매개변수와 인수는 혼용해서 사용되기 쉬운 용어입니다. 매개변수는 함수에 입력으로 전달된 값을 받는 변수, 인수는 함수를 호출할 때 전달하는 입력값을 의미합니다.

def add(a, b):		# a, b는 매개변수
    return a + b;
    
print(add(3, 4))	# 3, 4는 인수

 

함수 호출

add(3, 4)

add(a = 3, b = 4)

 

가변 위치 인자(*)

 

입력값이 여러 개일 경우에는 가변 위치 인자(*)를 사용해서 튜플로 받을 수 있습니다.

def add_many(*args):
    result = 0
    for i in args:
        result += i
    return result
    
# 호출
add_many(1, 2, 3, 4, 5)

 

가변 키워드 인자(**)

 

입력값이 여러 개인 경우에 가변 키워드 인자(**)를 사용해서 딕셔너리로 받을 수 있습니다.

def print_kwargs(**kwargs):
    print(kwargs)
    
# 호출
print_kwargs(name = "jin", age = 30)	# {name: "jin", age: 30}

 

함수의 리턴값

 

파이썬에서 함수의 리턴값은 하나만 가능합니다.

def add_and_mul(a, b):
    return a+b, a*b
    
result = add_and_mul(3, 4)	# (7, 12)

 

위 코드와 같이 함수에서 여러 개의 값을 리턴하는 경우 해당 값들을 가지는 튜플의 형태로 반환을 하게 됩니다.

 

매개변수 초깃값

 

다음과 같이 함수의 매개변수에 초깃값을 지정할 수 있습니다.

def say_myself(name, age, man=True):
    if man:
        print("남자: %s (%d)" % (name, age))
    else:
        print("여자: %s (%d)" % (name, age))
초깃값이 없는 매개변수는 초깃값이 있는 매개변수 뒤에 사용할 수 없기 때문에, 초기화하고 싶은 매개변수는 항상 제일 마지막에 선언해야합니다.

 

함수 내 변수의 스코프

 

기본적으로 함수 안에서 선언한 지역변수는 함수 안에서만 유효하기 때문에 함수 밖의 변수의 값을 변경하기 위해서는 아래와 같이 해야 합니다.

a = 1
def vartest(a):
    return a += 1
    
a = vartest(a)

 

아래와 같이 global 명령어를 사용하여 함수 밖의 변수를 직접 사용할 수도 있지만, 외부 변수에 종속적인 함수는 좋지 않기 때문에 권장되지 않습니다.

a = 1
def vartest():
    global a
    a += 1
    
vartest()

 

lambda

 

파이썬에서 lambda 키워드는 익명 함수(anonymous function)를 정의할 때 사용됩니다. lambda 함수는 이름이 없고, 주로 간단한 연산을 수행할 때 유용합니다.

변수명 = lambda arguments: expression

# example
add = lambda a, b: a + b

 

 

입출력

 

표준 입출력

 

input()

input() 함수는 사용자로부터 문자열 형태의 입력을 받습니다.

number = input("숫자를 입력하세요: ")

 

위 코드와 같이 사용할 수 있으며 주의해야할 점은 input()은 입력되는 모든 것을 문자열로 취급하기 때문에 숫자를 입력해도 타입은 문자열이라는 것입니다.

 

print()

print() 함수는 값을 콘솔에 출력합니다.

a = [1, 2, 3]
print(a)	# [1, 2, 3]

print("life" "is" "too short")		# lifeistoo short
print("life" + "is" + "too short")	# lifeistoo short

print("life", "is", "too short")	# life is too short

 

end 키워드는 출력 후 자동으로 붙는 문자열을 지정하는 데 사용되며, 기본값은 줄바꿈 문자 '\n'입니다.

print("Hello", end=" ")
print("World")

# Hello World

 

파일 입출력

 

파일 생성

f = open("newFile.txt", "w")
f.close()

 

파일은 위와 같이 생성할 수 있습니다. 첫 번째 인자는 파일명이고, 두 번째 인자는 파일의 열기 모드입니다.

파이썬 코드에서는 파일 경로를 표시할 때 슬래시(/)를 사용하며, 역슬래시(\)를 사용한다면 다른 이스케이프 문자로 인식되지 않도록 역슬래시를 두 번(\\) 해줘야 합니다.

 

파일 쓰기 (w)

파일 쓰기는 다음과 같이 할 수 있습니다.

f = open("C:/python/newFile.txt", "w")

for i in range(1, 11):
    data = "%d번째 줄입니다.\n" % i
    f.write(data)
    
f.close

 

파일 읽기 (r)

파이썬에서는 여러 가지 파일 읽는 방법을 제공합니다.

 

1. readline()

- readline()은 더이상 읽을 줄이 없을 경우, 빈 문자열("")을 반환합니다.

f = open("C/python/newFile.txt", "r")

while True:
    line = f.readline()
    if not line: break
    print(line)
f.close()

 

2. readlines()

- readlines()는 파일의 모든 줄을 읽어서 각각의 줄을 요소로 가지는 리스트를 반환합니다.

f = open("C:/python/newFile.txt", "r")

lines = f.readlines()
    for line in lines:
    print(line)
f.colse
또한 줄바꿈 문자를 제거하고 싶으면 공백 문자 전반(스페이스, 탭, 줄바꿈 등)을 제거하는 strip() 메서드를 사용하면 됩니다.

 

3. read()

- read()는 파일 내용 전체를 한 번에 문자열로 반환합니다.

f = open("C:/python/newFile.txt", "r")

data = f.read()
print(data)
f.close

 

4. 파일 객체

- 파일 객체는 기본적으로 아래와 같이 for 문과 함께 사용하여 파일을 줄 단위로 읽을 수 있습니다.

f = open("C:/python/newFile.txt", "r")

for line in f:
    print(line)
f.close()

 

내용 추가 (a)

쓰기 모드('w')로 파일을 열 때 이미 존재하는 파일을 열면 그 파일의 내용이 모두 사라지게 됩니다. 하지만 원래 있던 값을 유지하면서 단지 새로운 값만 추가해야할 경우 추가 모드('a')로 열면 됩니다.

f = open("C:/python/newFile.txt", "a")

for i in range(11, 20):
    data = "%d번째 줄입니다.\n" & i
    f.write(data)
    
f.close()

 

자동 자원 해제 (with)

파일은 열면 항상 닫아주어야 합니다. 그런데 아래와 같이 with 키워드를 사용하면 파이썬이 자동으로 파일 객체를 닫아줍니다.

with open("foo.txt", "w") as f:
    f.write("Python")

 

프로그램 입출력

 

파이썬에서는 sys 모듈을 사용하여 프로그램에 인수를 전달할 수 있습니다.(command-line arguments)

#sys1.py
import sys

args = sys.argv[1:]
for i in args:
    print(i)
c:>python sys1.py aaa bbb ccc

# aaa
# bbb
# ccc

 

위와 같이 코드를 작성하고 명령 프롬프트에서 실행하면 위와 같이 출력됩니다. 기본적으로 명령줄 인자는 리스트의 형태로 첫 번째 인덱스는 파일명, 그 뒤로 입력된 인수들을 요소로 갖습니다.