개발자 끄적끄적

파이썬 기초(if문, elif문, for문, while문, 함수, 모듈(Module), 패키지(Package), 클래스(Class), 생성자) 본문

데이터 마이닝

파이썬 기초(if문, elif문, for문, while문, 함수, 모듈(Module), 패키지(Package), 클래스(Class), 생성자)

햏치 2023. 3. 9. 00:58

<if 문>
- 파이썬은 들여쓰기가 매우 중요하다
- if문 다음에 '실행할 문장'은 if문 다음 줄에서 들여쓰기를 해서 작성
- 들여쓰기를 할 때는 Tab보다 Space Bar를 눌러 4칸정도 들여쓰기 권장
- 대화형 모드에서는 '실행할 문장' 모두 끝나고 Enter 2번 눌러야 if문이 끝나는 것으로 간주
ex)
a = 99
if a < 100 :
    print("100보다 작군요.")
출력 결과 : 100보다 작군요.

ex)
>>>hungry = True
>>>if hungry : 
... print("i'm hungry")
...
i'm hungry

>>>hungry = False
>>>if hungry :
    print("i'm hungry")
...
... else :
    print("i'm not hungry")
    print("i'm sleepy")
...
i'm not hungry
i'm sleepy

- if 문에서 두 문장 이상을 실행하고자 할 때
ex)
a = 200
if a<100 :
    print("100보다 작군요.")
    print("거짓이므로 이 문장은 안 보이겠죠?")


print("프로그램 끝")
출력 결과 : 프로그램 끝




<if~else문>
- if 조건식 : 
    실행할 문장 1
  else :
    실행할 문장 2
ex)
a = 200

if a < 100 :
    print("100보다 작군요.")
else :
    print("100보다 크군요.")
출력 결과 : 100보다 크군요.


<if~else~if~else문>
- if문을 한 번 실행한 후 그 결과에서 if문을 다시 실행하는 것
- if 조건식 1 :
    if 조건식 2:
        실행할 문장 1
    else :
        실행할 문장 2
  else :
    실행할 문장3
ex)
a = 75

if a > 50 :
    if a < 100 :
        print("50보다 크고 100보다 작군요.")
    else :
        print("와~ 100보다 크군요.")
else :
    print("에고~ 50보다 작군요.")
출력 결과 : 50보다 크고 100보다 작군요.



<if~elif~else문>
ex)
score = int(input("점수를 입력하세요 : ")) //input은 문자열로 입력받는다

if score >= 90 :
    print("A")
elif score >= 80 :
     print("B")
elif score >= 70 :
     print("C")
elif score >= 60 :
     print("D")
else :
    print("F")

print("학점입니다. ^^")


<for문>
- 반복(루프)처리에는 for문을 사용한다
>>> for i in[1,2,3] :
...    print(i)

<for문의 개념>
- 기본형식
ex)
for 변수 in range(시작값, 끝값+1, 증가값) :
  이 부분을 반복

ex_1)range() 함수 사용과 내부적 변경
for i in range(0,3,1) :  //range(3)은 range(0,3,1)과 같다 -> 0부터 3까지 1씩 증가시켜 -> 0, 1 2(끝 값은 포함X)
    print("안녕하세요? for 문을 공부 중입니다.")

ex_2)
for i in[0,1,2] :
    print("안녕하세요? for문을 공부중입니다")


- 중첩 for문의 기본 형식
ex)
for i in range(0,3,1) :
    for k in range(0,2,1) :
        print("파이썬은 꿀잼입니다. (i값 : %d, k값 : %d)" %(i,k))
출력 결과 :
파이썬은 꿀잼입니다. (i 값 : 0, k값 : 0)
파이썬은 꿀잼입니다. (i 값 : 0, k값 : 1)
파이썬은 꿀잼입니다. (i 값 : 1, k값 : 0)
파이썬은 꿀잼입니다. (i 값 : 1, k값 : 1)
파이썬은 꿀잼입니다. (i 값 : 2 ,k값 : 0)
파이썬은 꿀잼입니다. (i 값 : 2, k값 : 1)


- 반복문을 탈출시키는 break문
ex)
for i in range(1, 100) :
    print("for문을 %d번 실행했습니다." %i)
    break
출력 결과 : for문을 1번 실행했습니다.


<for문과 while문 비교>
- for문의 형식
  for 변수 in range(시작값, 끝값+1, 증가값)
- for문은 반복할 횟수를 range() 함수에서 결정 후 그 횟수만큼 반복한다
- while문은 반복 횟수를 결정하기 보다는 조건식이 참일 때 반복하는 방식

ex)
i = 0
while i < 3 :
    print("%d : 안녕하세요? while문을 공부 중입니다." %i)
    i = i+1
출력 결과 :
0 : 안녕하세요? while문을 공부 중입니다.
1 : 안녕하세요? while문을 공부 중입니다.
2 : 안녕하세요? while문을 공부 중입니다.



<함수>
- 특정 기능을 수행하는 일련의 명령들을 묶어 하나의 함수로 정의할 수 있다
>>>def hello() : 
....       print("Hello World!")
....
>>>hello()
Hello World!
- 함수는 인수를 취할 수 있다
- '+' 연산자를 사용하여 문자열을 이어 붙일 수 있다
>>> def hello(object) :
....        print("Hello" + object + "!")
....
>>> hello("cat")
Hello cat!

- 함수의 형식과 활용
ex)
##함수 선언 부분##
def plus(v1, v2) : 
    reuslt = 0
    result = v1 + v2
    return result

##전역 변수 선언 부분##
hap = 0

##메인 코드 부분##
hap = plus(100, 200)
print("100과 200의 plus() 함수 결과는 %d" %hap)
출력 결과 : 100과 200의 plus() 함수 결과는 300


<모듈>
- 함수의 집합

<모듈의 생성과 사용>
Modul1.py
##함수 선언 부분##
def func1() :
    print("Module1.py의 func1()이 호출됨.")

def func2() :
    print("Module1.py의 func2()이 호출됨.")

def func3() :
    print("Module1.py의 func3()이 호출됨.")

A.py
import Module1

##메인 코드 부분##
Module1.lfunc1()
Module1.lfunc2()
Module1.lfunc3()
출력 결과 :
Module1.py의 func1()이 호출됨.
Module1.py의 func2()이 호출됨.
Module1.py의 func3()이 호출됨.


- 모듈명을 생략하고 함수명만 쓸 때 1행 형식
from 모듈명 import 함수1, 함수2, 함수3
또는
from 모듈명 import *

B.py
from Modue1 import func1, func2, func3 #또는 from Module import *#

##메인 코드 부분##
func1()
func2()
func3()


<패키지>
- 모듈이 하나의 *.py 파일 안에 함수가 여러 개 들어 있는 것이라면,
- 패키지(Package)는 여러 모듈을 모아 놓은 것으로 폴더의 형태로 나타낸다
- 모듈을 주제별로 분리할 때 주로 사용한다
ex)
패키지(폴더)
1. 모듈1(파일)
  - 함수1
  - 함수2
2. 모듈 2(파일)
  - 함수3
  - 함수4


<클래스>
- 클래스 정의에는 '__init__'라는 특별한 메서드가 있는데, 클래스를 초기화하는 방법을 정의한다
  초기화용 메서디를 생성자(Constructor)라고도 하며, 클래스의 인스턴스가 만들어질 때 한 번만 불린다
  또한, 파이썬에서는 메서드의 첫 번째 인수로 자신(자신의 인스턴스(객체))을 나타내는 self를 명시적으로 쓰는 것이 특징이다
class 클래스 이름 : 
    def __init__(self, 인수, ...) :         #생성자
    ....
    def 메서드 이름 1(self, 인수, ...) : #메서드 1
    ....
    def 메서드 이름 2(self, 인수, ...) : #메서드 2


<클래스의 개념>
- 클래스의 모양과 생성
class 클래스 명 : 
  #이 부분에 관련 코드 구현

-  자동차를 클래스로 구현
class 자동차 :
    #자동차의 속성
        색상
        속도
    #자동차의 기능
        속도 올리기()
        속도 내리기()
- 자동차 클래스의 개념을 실제 코드로 구현
  - 자동차의 속성은 지금까지 사용 한 변수처럼 생성(필드(Field))
  *필드(Field) : 상태(속성)를 나타내는 변수
  - 자동차의 기능은 지금까지 사용한 함수 형식으로 구현
  - 클래스 안에서 구현된 함수는 함수라고 하지 않고 메서드라고 한다
ex)
##클래스 선언 부분##
class Car :
    color = ""
    speed = 0
 
    def__init__(selt) :  #생성자
        self.color = "빨강"  #메서드
        self.speed = 0      #메서드, self.speed는 클래스에서 만들어진 인스턴스 변수이다

    def upSpeed(self, value) :  #메서드
        self.speed += value     

    def downSpeed(self, value) :
        self.speed -= value

##메인 코드 부분##
myCar1 = Car()  #Car()라는 클래스를 호출, 생성자에 매개변수가 없기때문에 () 공백
myCar2 = Car()

print("자동차1의 색상은 %s이며, 현재 속도는 %dkm입니다." %(myCar1.color, myCar1.speed))
print("자동차2의 색상은 %s이며, 현재 속도는 %dkm입니다." %(myCar2.color, myCar2.speed))


<생성자>
- 생성자의 개념
  - 인스턴스를 생성하면서 필드값을 초기화시키는 함수
- 생성자의 기본
  - 생성자의 기본 형태 : __init__()라는 이름
  - __init__()는 앞 뒤에 언더바(_)가 2개씩, init는 Initialize의 약자로 초기화 의미
  - 언더바가 2개 붙은 것은 파이썬에서 예약해 놓은 것
  - 프로그램을 작성 시 이 이름을 사용해서 새로운 함수나 변수명을 만들지 말 것
class 클래스 명 :
    color = ""
    speed = 0
    def __init__(self) : 
        #이 부분에 초기화할 코드 입력
        self.color = "빨강"
        self.speed = 0

- 자동차 세 대의 인스턴스 생성 코드
  myCar1 = Car()
  myCa21 = Car()
  myCar3 = Car()

- 메서드의 호출
  myCar1.upSpeed(30)
  myCar2.downSpeed(60)
    

ex)  #self.name -> 인스턴스 변수, self -> 클래스 자신을 가리킨다
Class Man : 
    def __init(self, name) : #name(지역변수)
        self.name = name  #(위 name = name)
        print("Initialized!")

    def hello(self) : 
        print("Hello" + self.name + "!")

    def goodbye(self) :
        print("Good-bye" + self.name + "!")

m = Man("David")  #m이라는 인스턴스를 생성하고 Man이라는 클래스를 부르고 name에 David 매개변수를 사용한다
m.hello()
m.goodbye()
출력 결과 :
Hello David!
Hello David!
Hello David!