ABS
- 절대값을 구할 때 사용하는 명령어
- 절대값을 구하고 싶은 수를 매개변수로 넣고 절대값을 얻을 수 있음.


- 위와 같은 상황에서 값에서 Avg 값을 차감하여 양수인 경우 + 출력, 음수인 경우 -를 출력하고자 함.

- ABS 명령어를 사용하여 위와 같이 차이만큼의 +와 - 개수를 '출력'할 수 있음.
Random
- 범위 내의 난수를 출력하는 명령어로 무작위의 데이터를 사용 가능

- 사용할 때는 import random으로 모듈을 불러와서 사용해야 함.
- random.random()은 0이상 1미만의 실수 난수 생성
- randint(시작, 끝)은 시작과 끝 사이의 정수 난수 생성
- randrange(시작, 끝, 간격)운 시작과 끝 사이에서 간격만큼의 난수를 생성
반복문
- 반복문 실습을 하는데 마름모를 만드는게 이렇게 어려운 줄 몰랐다..

- 고민하고 입력하는데 1시간 정도 걸린 것 같다.. 정말 멀었다...
함수란
- 함수는 제공된 데이터를 사용해 특정 결과물을 내주는 기능을 말함.
- 사용자 함수를 사용하기 위해서는 def 라는 키워드를 선언해야 함.
- def / 함수명(첫글자는 영문 소문자)() / :(콜론)
실행문 들여쓰기
- 파이썬은 기본으로 제공하는 내장함수와 사용자가 직접 선언하는 사용자 함수가 있음.
- 함수는 특정 코드를 지속적으로 반복하여 사용하기 위해 사용함.
함수 선언

- 위와 같이 선언하여 사용할 수 있으며, 이미지 최하단과 같이 호출을 해야 함.
함수 내 또 다른 함수 선언

- 위 이미지와 같이 사용할 수 있으며, 실행문이 없는 경우 실행문에 pass를 입력해 오류를 방지할 수 있음.
인수와 매개변수
- 함수의 인수와 매개변수의 수는 동일해야함.

- 위와 같이 매개변수의 수가 정해지지 않은 경우 '*' 이용하여 대처할 수 있음.

- 위와 같이 round를 사용하면 소수점을 줄일 수 있음.
- round(인자, 소수점자리)를 입력하여 소수점 자리만큼으로 줄일 수 있음.
- 미입력 시 소수점 첫째자리에서 반올림하여 소수점을 없앰.
데이터 반환

- 제공된 데이터를 반환받을 수 있음.
- return은 되돌리는 기능이기 때문에 하단의 추가명령을 실행시킬 수 없고 종료됨.
- return 함수는 매우 중요하니 꼭 기억하기!
지역변수와 전역변수
- 전역변수 : 함수 밖에 선언된 변수로 어디에서나 사용가능하지만, 함수 안에서 수정은 불가함.
- 지역변수 : 함수 안에 선언된 변수로 함수 안에서만 사용가능함.
- 글로벌함수 : glgbal을 사용하면 함수 안에서도 전역변수의 값을 수정할 수 있다.

- 위와 같이 global을 이용해 전역변수의 값을 수정할 수 있음.
중첩 함수
def calculation(n1, n2, operator):
def addCal():
print(f'덧셈 연산 : {round(n1 + n2, 2)}')
def subCal():
print(f'뺄셈 연산 : {round(n1 - n2, 2)}')
def mulCal():
print(f'곱셈 연산 : {round(n1 * n2, 2)}')
def divCal():
print(f'나눗셈 연산 : {round(n1 / n2, 2)}')
if operator == 1:
addCal()
elif operator == 2:
subCal()
elif operator == 3:
mulCal()
elif operator == 4:
divCal()
while True:
n1 = float(input('실수(n1) 입력 : '))
n2 = float(input('실수(n2) 입력 : '))
operatorNum = int(input('1. 덧셈 \t 2. 뺄셈 \t 3. 곱셈 \t 4. 나눗셈 \t 5. 종료'))
if operatorNum ==5:
print('Bye~')
break
calculation(n1, n2, operatorNum)
lambda 함수
- 기존의 함수선언을 간단하게 할 수 있는 함수

module
- 내부모듈 : 파이썬에서 사용가능한 기본 모듈
- 외부 모듈 : 별도 설치 후 사용가능한 모듈
- 사용자 모듈 : 사용자가 직접 만든 모듈
모듈 제작
- 모듈명.접근연산자 로 모듈 내 기능을 사용할 수 있음.

- 파이썬 파일명을 모듈명으로 하여 불러올 수 있으며 위의 이미지와 같이 사용 가능.
모듈을 사용하는 키워드
1. import
- import 모듈명 을 이용해 사용 가능

2. as
- 사용하고자 하는 모듈의 이름이 긴 경우 사용 가능
- import calcualtor 의 경우 calculator이라는 모듈명이 너무 김.

- 위와 같이 import calculator as cal 이라는 명령어를 사용하는 경우 모듈을 cal로 호출이 가능.
3. from ~ import
- 모듈 내의 특정 기능만 사용하고 싶은 경우 사용

- from 모듈명 import 특정기능 으로 입력하여 사용 가능

- from 모듈명 import * 를 입력하면 모듈 내 모든 기능을 불러와 사용 가능

- 'from 모듈명 import 기능 나열' 모듈 내 기능을 나열하는 방법으로도 모든 기능을 불러와 사용 가능
전역변수 name
1. name 기본 개념
-
name에는 파이썬이 기본적으로 제공하는 변수
-
name에는 기본적으로 파이썬 파일의 이름이 저장됨.
-
메인 실행 파일을 찾기 위함.
-
메인이 아닌 경우 실행되지 않게 하기 위해 아래와 같은 코드 입력 필요
-

2. 전역변수 name을 이용한 실행파일 지정
패키지
1. 패키지 기본개념
- 관련이 있는 모듈을 묶어서 그룹으로 관리하는 것.

2. 패키지 만들기
- 다른 디렉토리에 있는 모듈을 어디에서나 사용가능하게 만들 수 있음.
- site-packages 라는 곳에 넣어두면 사용할 수 있음.


- 위와 같이 입력하면 파이썬 프로그램을 실행하기 위해 참조하는 경로가 나타남.
자주 사용하는 모듈
1. math
- 수학과 관련한 모듈
- 수학관련 함수

- sum : 합과 관련한 모듈
- max : 최대 값
- min : 최소 값
- pow : 제곱
- round : 반올림
- maht 모듈

- fabs : 절대값
- 올림 : ceil
- 내림 : floor
- 버림 : trunc
- 최대공약수 : gcd
- 팩토리얼 : factorial
2. random
- 난수와 관련한 모듈

- random : 0이상 1미만 난수
- randint : ~ 이상 ~ 이하 난수
- randrange : ~ 이상 ~ 미만 난수
- sample : ~ 이상 ~ 미만 난수 n개
- choice : 무작위 1개 추출
- suffle : 섞음.
3. time
객체지향 프로그래밍
1. 객체를 이용한 프로그램으로 객체는 속성과 기능으로 구성
- 객체(Object) : 속성(attribute) + 기능(funtion)
- 객체 생성
- 속성, 기능 등으로 묶어 클래스(객체를 만들기 위한 틀)를 생성
- 클래스에 맞춰 필요에 의해 메모리에 생성
- 객체 사용의 장점
2. 클래스 만들기
- 클래스 선언 (class 키워드:)

- 키워드의 첫 글자는 대문자로 생성해야 함.
- 클래스는 객체 생성을 위한 준비이고, 선언만 하였다고 인스턴트되지 않음.
- 인자로 self를 넣어줘야 함.
3. 객체 속성 변경

- 클래스를 만든 이후 변수에 담아줘야 함... 자꾸 까먹음
4. 객체와 메모리
- 변수는 객체의 메모리 주소를 저장하고, 이를 이용해서 객체를 참고한다.
- 얕은 복사

- 기존의 객체를 또다른 객체에 할당하는 경우 객체가 할당되는 것이 아닌 메모리 주소만 복사 됨.
- list 에서 copy 함수로 복사가 가능.
- enumerate로 for문에서 변수를 2개 사용할 수 있으며, 자료형 구조에서 사용
5. 객체의 얕은복사와 깊은 복사
- 얕은 복사 : 객체의 주소를 복사
- 깊은 복사 : 객체 자체를 복사하는 것으로 또 다른 객체가 생성됨.
copy라는 모듈을 이용해 사용할 수 있음.
id 라는 함수를 이용해 할당된 주소값을 확인할 수 있음.
for문을 이용할 수 있음.
extend를 이용할 수 있음.
.copy를 이용할 수 있음.
슬라이싱을 이용할 수 있음.
- 최고값과 최저값 삭제
- pop 함수를 이용
- .pop(0) 사용 시 최저값 삭제
- .pop() 사용 시 최고값 삭제
6. 클래스 상속
- 클래스는 또 다른 클래스를 상속해서 내것처럼 사용할 수 있음.
- 클래스1(클래스2(클래스3))인 경우 클래스3은 클래스 1, 2의 기능을 모두 사용 가능하며, 클래스2는 클래스1의 기능을 사용할 수 있음.

- 사용방법은 위 이미지와 같이 상속 받을 클래스 뒤에 상속할 클래스의 이름을 넣으면 됨.
7. 생성자
상위 상속자의 초기화
위와 같이 상위 상속자의 init 메서드를 강제로 호출할 수 있음.
위와 같이 super()를 이용해 init 메서드를 강제로 호출할 수도 있으며, 이 경우에는 self를 생략함.
2개 이상의 클래스 상속(다중 상속)
,(콤마)를 이용해 열거하여 상속받을 수 있음.
- 다중상속은 필요한 경우에만 최소한으로 사용하는 것을 권장
8. 오버라이딩
메서드 재정의
- 하위 클래스에서 상위클래스의 매서드를 재정의(override)한다.
위와 같이 사용 가능.
9. 추상 클래스
- 상위클래스에서 하위클래스에 메서드 구현을 강요
- 상위클래스에 선언만 되어있고, 메서드 구체화가 안되어있어 하위클래스에서 구현해야 하는 경우

- 이 경우 위와 같이 from abc import ABCmeta / from abc import abstractmethod 함수를 불러와 @abstractmethod라는 명령어를 입력해 추상메서드로 지정하고 이를 통해 메서드 구현 을 강제해야 함.
10. 예외
예외의 원인 및 종류
- 문법적인 문제는 없으나, 실행 중 발생하는 예상하지 못한 문제
예외 관련 클래스는 Exception 클래스를 상속한다.
- 0을 나눈다던지, 문자를 정수화한다던지 하는 오류 등
예외 발생 시 실행 구문(try ~ except)
- 예상하지 못한 예외가 프로그램 전체 실행에 영향이 없도록 처리함.
예외 발생 예상 구문을 try ~ except로 감싼다.
위의 경우 5 이하의 숫자 5개를 조건 외의 데이터가 입력되는 경우 예외발생으로 다시 초기로 넘어가는 구조임. 예외발생의 경우 continue를 통해 위로 다시 올라가게 만들어진 구조임.
예외 미발생 시 실행 구문(else)
else를 이용해 사용 가능
예외발생 유무와 관계없이 항상 실행(finally)
예외 발생 유무와 관계 없이 항상 실행되며 마지막에 입력
exception 클래스(exception as 키워드)
문제가 발생하였을 경우 파이썬이 어떤 오류인지 알려줄 수 있게 하는 기능
예외 강제 발생(raise)