본문 바로가기
Coding/TIL & 배운것들

인공지능을 위한 파이썬 3주차 & 4주차

by 코딩짜는 머글 2024. 10. 1.
제어문과 반복문
  • 제어문: 프로그램이 결정을 내리도록 하는 도구로, 조건에 따라 코드를 실행하거나 실행하지 않도록 제어합니다.
  • 반복문: 프로그램이 동일한 작업을 반복하도록 하는 도구로, 반복적인 작업을 자동화합니다.
  • 결합 사용: 제어문과 반복문을 결합하여 복잡한 논리 흐름을 구성합니다.
while 문

 

↓기본구조

 
 while 조건식:
        실행할 코드

 

↓예시

 
 count = 5

 while count > 0:
        print(f"카운트다운: {count}")
        count -= 1

 print("발사!")

 

↓실습

 
 # 사용자로부터 숫자를 입력받아, 그 숫자가 0이 될 때까지 반복해서 입력받는 프로그램
 number = int(input("숫자를 입력하세요 (0을 입력하면 종료): "))

 while number != 0:
         print(f"입력한 숫자는 {number}입니다.")
         number = int(input("다시 숫자를 입력하세요 (0을 입력하면 종료): "))

 print("프로그램을 종료합니다.")
 

 

break

반복문을 즉시 종료. 특정 조건이 만족되면 더 이상 반복할 필요가 없을 때 사용한다.

 
 for i in range(1, 11):
      if i == 5:             # i 가 5 일때 반복문이 종료
           break
      print(i)
 

 

continue
현재 반복을 건너뛰고, 다음 반복을 이어간다. 특정 조건에서 코드 블록의 일부를 실행하지 않고 다음 반복으로 넘어가고 싶을 때 사용한다.
 
 for i in range(1, 6):
      if i % 2 == 0:       # i 가 짝수일 때 실행되어, 그 다음 코드는 건너뛰고 반복문이 계속된다. 따라서 1,3,5 만 출력됨.
             continue
      print(i)
 

 

range() 함수

특정 범위의 숫자 시퀀스를 생성한다. for 문과 함께 자주 사용되며, 반복 횟수를 지정할 때 유용하다.

                                       
 for i in range(시작, 종료, 단계):           
       실행할 코드
 
  * 시작 : 시작할 숫자 (기본값 0)
  * 종료 : 종료할 숫자 (해당 숫자는 포함되지 않음)
  * 단계 : 숫자 간의 간격 (기본값 1)
 

 

중첩 반복문 

2차원 데이터(예: 행렬)를 처리하거나, 복잡한 반복 작업을 수행할 때 유용하다.

 
 for i in range(첫 번째 범위):
       for j in range(두 번째 범위):
             실행할 코드

 


예외 처리 개념

 

에러와 예외의 차이

에러(error) : 프로그램이 실행 중에 발생하는 문제로, 종종 프로그램이 비정상적으로 종료되게 만듭니다. 예를 들어, 파일을 열려고 하는데 해당 파일이 없거나, 숫자를 0으로 나누는 경우 에러가 발생할 수 있습니다.

 

예외(Exception) : 에러의 한 종류로, 예외가 발생하면 프로그램이 멈추고 에러 메시지를 출력합니다. 하지만 예외는 예외 처리를 통해 프로그램이 멈추지 않고, 에러를 처리하며 계속 실행되게 할 수 있습니다.

 

try, except 예외 처리 기본 구조 
 
 try:
       # 예외가 발생할 가능성이 있는 코드
 except 예외타입:      
       # 예외가 발생했을 때 실행할 코드


 

finally

예외 발생 여부에 상관없이 항상 실행되는 코드 블록이다. 주로 리소스 정리 (예:파일 닫기, 네트워크 연결 종료 등) 와 같은 작업을 수행할 때 사용된다.

 
 try:
       # 예외가 발생할 가능성이 있는 코드
except 예외타입:
       # 예외가 발생했을 때 실행할 코드
finally:
       # 예외 발생 여부와 상관없이 항상 실행할 코드
 

 

예외 처리의 중요성과 활용
  • 프로그램의 안정성 : 예외 처리를 통해 프로그램이 예기치 않은 상황에서도 안정적으로 동작하도록 만들 수 있다. 사용자가 잘못된 입력을 하거나, 외부 시스템에 문제가 발생하더라도, 프로그램이 비정상적으로 종료되지 않도록 할 수 있다.
  • 디버깅에 도움 : 예외 처리 구문을 사용하여, 발생할 수 있는 다양한 에러상황을 미리 대비할 수 있다. 특정 예외에 대해 의미 있는 오류 메시지를 제공하면, 문제 발생시 원인을 파악하고 해결하는 데 도움이 된다.
  • 리소스 관리 : 파일, 네트워크 연결, 데이터베이스 연결 등 리소스를 사용하는 코드에서 finally 블록을 통해 리소스를 적질히 정리함으로써, 자원 누수를 방지할 수 있다.

 


클래스 & 객체 

객체지향의 대표적인 요소가 클래스와 객체

 

객체지향 : 컴퓨터의 프로그램을 조금 더 잘 구조화하고 쉽게 유지 보수하기 위해 나온 개념.

최신에 나온 언어들은 객체지향을 목적으로 나오는것들이 많다.

 

절차지향 : 초기의 컴퓨터들이 사용한 개념. 절차에 따라 순서대로 실행함. 명령이 단순할때는 편리하지만 점차 컴퓨터의 성능이 좋아지고 복잡해지면서 문제점들과 단점들이 부각. 지금의 거의 사용되지 않고 있다.

 

클래스 : 객체를 만들기 위한 청사진 또는 설계도. 속성(Attributes)과 메서드(Methods)로 구성되며, 속성은 객체의 데이터를, 메서드는 객체의 동작을 정의한다.

 

객체(Object) : 클래스의 인스턴스(Instance)로, 클래스라는 설계도로부터 실제로 생성된 구체적인 데이터와 기능을 가지는 실체이다. 객체는 클래스에 정의된 속성과 메서드를 가지고 있다. 

 

∞class에서 self 는 필수적인 관례이다. 첫번째 인자로 메서드를 정의하는 경우 반드시 써줘야 함∞

 

객체지향(OOP)의 4대 핵심 원칙

 

 ▷ 캡슐화(Encapsulation) : 캡슐화는 객체의 속성과 메서드를 하나로 묶고, 일부를 외부에 감추어 객체 내부의 구현을 숨기는 원칙입니다. 이를 통해 데이터의 무결성을 보호하고, 외부에서의 직접 접근을 제한합니다.  

↓예시

 
 class Dog:
        def __init__(self, name):
              self.__name = name      # 비공개 속성 (외부에서 접근 불가)

        def get_name(self):             # 비공개 속성에 접근하기 위한 메서드
              return self.__name
 

 

상속(Inheritance) : 상속은 기존 클래스(부모 클래스)를 기반으로 새로운 클래스(자식 클래스)를 만드는 방법입니다. 상속을 통해 부모 클래스의 속성과 메서드를 자식 클래스가 물려받아 사용할 수 있으며, 이를 확장하거나 수정할 수 있습니다.

↓예시

 
 class Animal: # 부모 클래스
        def __init__(self, species):
               self.species = species

 class Dog(Animal): # 자식 클래스
        def __init__(self, name, breed):
              super().__init__("Dog") # 부모 클래스의 초기화 메서드 호출
              self.name = name
              self.breed = breed
 

 

다형성(Polymorphism) : 다형성은 동일한 이름의 메서드가 여러 객체에서 다르게 동작할 수 있는 원칙입니다.

↓예시

 
 class Dog:
        def speak(self):
               return "멍멍!"

 class Cat:
        def speak(self):
               return "야옹!"

 def make_sound(animal):
        print(animal.speak())

make_sound(Dog()) # 멍멍!
make_sound(Cat()) # 야옹!
 

 

추상화(Abstraction) : 추상화는 복잡한 시스템을 단순화하여, 필요한 부분만 보여주고 나머지는 감추는 원칙입니다.

추상화를 통해 사용자는 객체의 내부 구현에 신경 쓰지 않고, 필요한 인터페이스만 사용할 수 있습니다.

↓ 예시

 
 from abc import ABC, abstractmethod

 class Animal(ABC): # 추상 클래스
        @abstractmethod
         def speak(self):
                pass

 class Dog(Animal): # 구체 클래스
        def speak(self):
               return "멍멍!"
 

 

객체의 속성을 외부에서 새롭게 만드는 건 주의해야 함. 객체간의 사용법이 괴장히 틀어질 수도 있음.

 

클래스와 객체 사용의 장점
♬ 재사용성 : 한번 정의된 신경망 구조를 여러 곳에서 재사용할 수 있습니다.
♬ 확장성 : 새로운 계층을 쉽게 추가하거나 수정할 수 있습니다.
♬ 모듈화 : 복잡한 신경망을 여러 개의 모듈로 나누어 관리할 수 있습니다.



'Coding > TIL & 배운것들' 카테고리의 다른 글

TIL 나의 공부일지  (1) 2024.10.02
이진법에 대하여...  (1) 2024.10.02
인공지능을 위한 파이썬 1주차 & 2주차  (2) 2024.09.30
(Python) NumPy 란  (1) 2024.09.25
(Python) pandas 란  (0) 2024.09.25