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******
'부스트캠프 AI Tech 공부 기록 > Python' 카테고리의 다른 글
| [Python] Conditionals and Loops (0) | 2022.02.02 |
|---|---|
| [Python] Variable & List : 변수와 리스트 (0) | 2022.01.23 |
| [Python] Jupyter Notebook & Colab (0) | 2022.01.18 |
| [Python] Coding Environment : 파이썬 코딩 환경 (0) | 2022.01.18 |
| [Python] Python 제대로 알기 : 개요와 특징 (0) | 2022.01.18 |