본문 바로가기

부스트캠프 AI Tech 공부 기록/Python

[Python] Function and Console I/O

Python Basics for AI

2-2. Function and Console I/O

1) function

함수

- 어떤 일을 수행하는 코드의 덩어리

- 반복적인 수행을 1회만 작성 후 호출

- 코드를 논리적인 단위로 분리

- 캡슐화 : 인터페이스만 알면 타인의 코드를 사용할 수 있음

함수 선언 문법

- 함수 이름, parameter(매개변수), indentation(들여쓰기), return value(반환 값, optional)

def 함수 이름 ( parameters ):
    수행문 #1(statements)
    수행문 #2(statements)
    return <반환값>

- 함수 선언 예시

def calculate_rectangle_area(x, y):
	return x * y
    
rectangle_x = 10
rectangle_y = 20
rectangle_area = calculate_rectangle_area(rectangle_x, rectangle_y)

함수 수행 순서

- 함수 부분을 제외한 메인 프로그램부터 시작

- 함수 호출 시 함수부분을 수행한 후 돌아옴

   * 함수를 선언하면 메모리에 올라가 있고, 호출했을 때 실행된다. 

   * 함수는 제일 상단에 선언해주기!

def calculate)rectangle_area(x, y): # 함수 선언
	return x * y

rectangle_x = 10
ractangle_y = 20
print('사각형 x의 길이: ', rectangle_x)
print('사각형 y의 길이: ', rectangle_y)

print('사각형의 넓이: ', calculate_rectangle_area(rectangle_x, rectangle_y)) # 함수 호출

함수 vs 함수

- 프로그래밍 함수와 수학의 함수는 유사

- 모두 입력값과 출력 값으로 이루어짐

   * 수학의 함수를 프로그래밍으로 작성해 볼 수 있음 : 문제를 읽고 최대한 문제에서 나타나는 설명을 그대로 코드로 옮겨보는 연습을 하기!

# 수학의 함수
f(x) = 2x + 7 , g(x) = x^2이고, x = 2일 때,
f(x) + g(x) + f(g(x)) + g(f(x))의 값은?
# 프로그래밍의 함수
def f(x) : 
	return 2 * x + 7
def g(x) :
	return x ** 2
x = 2
print(f(x) + g(x) + f(g(x)) + g(f(x)))

Parameter vs Argument

- parameter : 함수의 입력 값 인터페이스

def f(x) : 
	return 2 * x + 7

- argument : 실제 parameter에 대입된 값

f(2)	# x = 2 대입

   *(사실 parameter와 argument를 심각하게 구분지어 사용하지는 않는다)

함수 형태

- parameter 유무, 반환 값(return) 유무에 따라 함수의 형태가 다름

  parameter 없음 parameter 존재
return 값 없음 함수 내의 수행문만 수행
(들어오고 나감이 없음)
parameter를 사용, 수행문만 수행 
return 값 존재 parameter없이, 수행문 수행 후 결과값 반환 parameter를 사용하여 수행문 수행 후 결과값 반환

   * return 값 != print된 결과 : 함수에서 결과값이 출력되었다고 해서 값이 return 된 것은 아님

def f(x):
	print(x + 10)
>>> f(10)
20			# 출력 값. return 값이 아님
>>> c = f(10)
20			# 출력 값. return 값이 아님
>>> print(c)
(None) 			# c는 return 값인데, f(x)는 return 값이 없으므로 None

2) Console in / out : 어떻게 프로그램과 데이터를 주고 받을 것인가?

GUI vs CLI

- GUI : Graphical User Interface, 우리가 윈도우, 맥 등에서 마우스로 명령(앱 클릭하기 등)을 하는 인터페이스

- CLI : Command Line Interface, 마우스가 아닌 키보드로(text로) 명령을 입력하여 프로그램을 실행하는 인터페이스

   * window CLI 환경 : CMD window, Windows Terminal, 윈도우 cmder도 권장

   * Mac, Linux CLI 환경 : Terminal

 

콘솔창(=CLI) 입출력 - input

- input() 함수는 콘솔창에서 문자열을 입력 받는 함수

 

   console_test.py

print('Enter your name:')
sombody = input()		# 콘솔 창에서 입력한 값을 somebody에 저장
print("Hi", somebody, "How are you today?")

   실행(CLI = 콘솔창)

python console_test.py
Enter your name:
Sujeong Im
Hi Sujeong Im How are you today?

- 숫자 입력 받기

   * input() 함수에 입력값으로 문자열을 넣으면 그 문자열이 출력되고 나서 사용자의 입력을 기다린다

   * input() 은 입력 값을 문자열 형태로 return하기 때문에,  입력 받고자 하는 값이 문자열이 아니라면 input의 결과값을 형변환 해줘야 함

   temperature.py

temperature = float(input('온도를 입력하세요 : ')) 	# 입력 시 바로 형변환하기
print(temperature)

   실행

python temperature.py
온도를 입력하세요 : 103
103.0

 

콘솔창(=CLI) 입출력 - print

- print() 함수는 콘솔창에 내용을 출력하는 함수

- 콤마(,)를 사용할 경우 print문이 연결됨(한 칸 띄어져서 출력)

>>> print('Hello world!', "hello world!')
Hello world! hello world!

   * type이 다른데 한 칸 띄어서 출력하지 않고 붙여서 출력하고 싶다면?

    → type을 통일한 후 concat해서 하나의 객체로 만든후 그 객체를 출력

 

콘솔창(=CLI) 입출력 - print formatting

- print formatting : 형식(format)에 맞춰 출력을 할 때가 있음

- print formatting 방식 3가지 (1) % string (2) format 함수 (3) fstring

- (1) % string  : "%datatype"%(variable) 형태로 출력 양식을 표현

   * %d : 십진수, %s : 문자열, %f : 실수형

print('I eat %d apples.' % 3) 
print('I eat %s apples.' % 3) 
number = 3; day = 'three' 
print('I ate %d apples. I was sick for %s days.'% (number, day)) 
print('Product : %s, Price per unit : %f' % ('Apple', 5.234))

    * % - format : %(정수)(소수)(datatype) → 정수는 비워두는 칸 수, 소수점은 소수점 출력 자릿수를 의미

>>> print('Art : %5d, Price per Unit : %8.2f' ( 543, 59.058 ))  # 5칸 만큼 출력 / 8칸 비우고 소숫점 둘째자리까지 출력
>>> Art :      453, Price per Unit :         59.06

- (2) str.format() 함수 : "~~~~{datatype}~~~~".format(argument)

age = 36
name = 'Sujeong Im'
print("I'm {0} years old.".format(age))
print('My name is {0} and I'm {1} years old.'.format(name, age))
print('Product: {0}, Price per unit : {1:.3f}".format("Apple", 5.243)) # 소숫점 3번째 자리까지 출력
>>> print("Art : {0:5d}, Price per Unit : {1:8.2f}".format(453, 59.058)) # 5칸 만큼 출력 / 8칸 비우고 소숫점 둘째자리까지 출력
>>> Art :      453, Price per Unit :         59.06

   * padding : 여유 공간 지정하여 글자 배열 + 소수점 자릿수 맞추기

# 5칸 만큼 출력 / 소숫점 5번째 자릿수까지 출력
print("Product: {0:5s}, Price per unit : {1:.5f}".format("APPLE", 5.243))

# 5칸 만큼 오른쪽 정렬하여 출력 / 소숫점 5번째 자릿수까지 출력
print("Product: {0:>5s}, Price per unit : {1:.5f}".format("APPLE", 5.243))

# 5칸 만큼 왼쪽 정렬하여 출력 / 소숫점 5번째 자릿수까지 출력
print("Product: {0:<5s}, Price per unit : {1:.5f}".format("APPLE", 5.243))

   * naming : 해당 표시할 내용을 변수로 표시하여 입력

# % string
print("Product : %(name)10s, Price per unit : %(price)10.5f." % {'name':"Apple", 'price' : 5.243})
# format()
print("Product : {name:>10s}, Price per unit : {price:10.5f}.".foramt(name="Apple", price=5.243))

 

- f-string : python 3.6 이후, PEP(python 개선 요청 사항)498에 근거한 formatting 기법

>>> name = "Sujeong"
>>> age = 24

# f를 문자열의 앞에 붙이고, {} 안에 변수명을 바로 쓰면 됨
>>> print(f"Hello, {name}. You are {age}.")
>>> Hello, Sujeong. You are 24.

# 20칸 만큼 출력 (문자열 나머지 칸은 공란('')으로 자동 채움,  왼쪽 정렬이 default )
>>> print(f"{name:20}")
>>> Sujeong
>>> print(f"{name:<20}")
>>> Sujeong

# 20칸 만큼 출력 (문자열 나머지 칸은 공란('')으로 자동 채움) & 오른쪽 정렬
>>> print(f"{name:>20}")
>>>               Sujeong

# 20칸 만큼 출력, 왼쪽 정렬 출력하고 나머지 칸은 별표('*')로 채우기
>>> print(f"{name:*<20}")
>>> Sujeong*************

# 20칸 만큼 출력, 오른쪽 정렬 출력하고 나머지 칸은 별표('*')로 채우기
>>> print(f"{name:*>20}")
>>> *************Sujeong

# 20칸 잡고, 가운데 정렬로 출력하고 나머지 칸은 별표('*')로 채우기
>>> print(f"{name:*^20}")
>>> *******Sujeong******