TigerCow.Door


안녕하세요. 문범우입니다.

오늘은 파이썬에서 예외처리를 하는 방법에 대해서 알아보도록 하겠습니다.


1. 예외 처리(Exception)


우리가 파이썬을 통해(또는 다른 프로그래밍 언어를 통해) 프로그램을 제작할 때 수없이 많은 오류가 발생할 수 있습니다.

물론 그러한 오류를 발생시키지 않도록 하는 것이 좋을 수 있으나 때로는 특정 오류를 그냥 무시하게끔 하는 것이 필요할 때도 있습니다.

이러한 것을 하기 위해 파이썬에서는 예외(오류)처리를 할 수 있도록 try, except문을 이용합니다.



2. 오류는 언제 발생할까?


우리가 직접적으로 오류를 처리해보기 전에 어떠한 오류들이 어떻게 발생하는지 몇가지만 간단히 알아보겠습니다.


먼저, 우리가 해당 경로에 존재하지 않는 파일을 열려고 했을 때 발생하는 오류입니다.



위의 코드에서 오류난 것을 살펴보면 FileNotFoundError 라는 것을 반환해주고 있습니다.



두번째는 숫자를 0으로 나눴을 때 발생하는 오류입니다.



위의 코드에서는 ZeroDivisionError를 반환해줍니다.



마지막으로는 리스트의 인덱스 범위를 벗어났을때 오류입니다.



위의 코드를 보면, list는 0번째, 1번째, 2번째 요소값만 가지고 있었는데 3번째 값을 요청하니 IndexError를 반환합니다.



3. 오류 예외 처리 하기


그럼 위에서 간단히 알아본 오류들을 어떻게 처리하는지 살펴보겠습니다.

처음에 간단히 언급하였듯이 파이썬에서는 예외처리를 위해 try, except 문을 이용합니다.

먼저 해당 try, except 문에 대한 기본적인 구조는 아래와 같습니다.


try:

<실행할 문장1>

<실행할 문장2>

<실행할 문장3>

...

except [발생오류[as 오류 메세지 변수]]:

<오류를 무시하고 실행할 문장1>

<오류를 무시하고 실행할 문장2>

<오류를 무시하고 실행할 문장3>

...


위의 구조를 살펴보면, 먼저 try 이하에서 특정 코드(들)를 실행합니다.

그리고 우리가 except에서 걸어준 발생오류가 발생하면 프로그램을 정지시키지 않고 except 이하의 코드를 실행합니다.

여기서 except 문 오른쪽에 대괄호( [, ] )로 묶인 이유는 생략이 가능하기 때문입니다.

즉, 특정한 오류에 대해 그 오류명을 지정하여 그에 대해서만 예외처리가 가능하며 어찌되었든 오류가 발생했을때의 상황에 대한 예외처리도 가능합니다.

또한 as를 사용함으로써 오류메세지의 내용까지 확인할 수 있습니다.


간단하게 0으로 나누는 코드에서 오류메세지의 내용을 출력해보는 코드는 아래와 같습니다.



또한 추가적으로 try문은 else절을 지원합니다. 

else 절은 예외가 발생하지 않은 경우에만 실행이 되며 except 절 바로 다음에 위치해야 합니다.



즉 위의 코드는 test.txt 라는 파일이 있을때는 그 내용을 읽어서 data라는 변수에 저장하지만, 파일이 존재하지 않을때는 오류메세지를 출력합니다.


또한 try문에서는 finally절을 지원합니다.

finally절은 else절과 다르게, 오류 발생여부에 상관없이 항상 수행됩니다. 



4. 오류 회피하기



오류를 회피하는 방법으로는 위 코드와 같이 try, except 문을 이용하여 오류를 잡아주고 except절 이하에서 단순히 pass 처리를 하면됩니다.



5. 오류 발생시키기


지금까지는 오류를 어떻게 처리하는지, 회피하는지 알아보았는데 프로그래밍을 하다보면 일부러 오류를 발생시켜야 하는 경우도 있습니다. 이럴때는 raise 라는 명령어를 통해서 오류를 발생시키면 됩니다.



위의 코드 처럼 raise 뒤에 적절한 오류명을 적어줌으로써 오류를 발생시킬 수 있습니다.

추가적으로 해당 오류명뒤에 괄호를 통해 오류내용을 함께 포함시킬 수 있습니다.

이때, 정의되어있지 않은 오류명은 NameError 라는 다른 오류를 발생시킵니다.



이렇게 해서 파이썬에서 오류(예외)를 처리하는 방법에 대해서 알아보았습니다.

잘 해결되지 않거나 추가적인 궁금사항은 댓글을 이용해주세요 :)

블로그 이미지

Tigercow.Door

Data-Analysis / AI / back-end / Algorithm / DeepLearning / etc


안녕하세요.

이번 포스팅에서는 파이썬에서 모듈과 패키지이 무엇인지, 그리고 어떻게 사용하는지 알아보도록 하겠습니다.


1. 모듈(Module)


모듈이란, 함수나 변수 또는 클래스 들을 모아놓은 파일을 말합니다.

즉, A.py 이라는 파일에 F1, F2 라는 함수와 C1, C2 라는 클래스를 만들었을때, B.py라는 파일에서 A.py를 모듈로써 사용하여 F1, F2 함수 또는 C1, C2 클래스를 사용할 수 있는 것입니다.

이러한 모듈을 통해 우리는 다른사람이 만들어 놓은 모듈을 사용하여 함수나 클래스를 사용할 수 있게됩니다.

그럼 간단한 모듈을 직접 만들어 보도록 하겠습니다.



위의 코드와 같은 파일을 module1.py 라고 저장하였습니다.

그리고 위의 파일을 모듈로써 사용하기 위해 우리는 import 를 사용합니다.

아래 코드에서 import를 통해 module1을 가져오고, module1에 있는 함수를 사용합니다.



위의 코드를 CMD에서 실행시키면 아래와 같이 올바른 결과가 출력됩니다.



import를 사용할때는, 


import 파일이름


와 같은 식으로 사용하며 파일이름 뒤에 있는 .py 라는 확장자는 생략합니다.



2. 모듈 사용 응용하기


모듈을 사용할때, 몇 가지 추가적인 방법이 있습니다.

먼저,


from 모듈이름 import 모듈함수


와 같은 방법입니다.

우리는 위의 코드에서 module1의 sum 함수를 사용하기 위해 module1.sum() 이라는 식으로 호출을 하였습니다.

하지만, from module1 import sum 과 같이 사용하면 sum함수를 이름 그대로 호출할 수 있습니다.



또한 두번째로, import문 맨 뒤에 as를 통해 자신이 함수이름을 다르게 설정할 수도 있습니다.

예를 들어, sum함수를 불러오는데 plus라는 이름의 함수로 사용하고 싶다면,


from module1 import sum as plus


와 같은 식으로 사용하면 됩니다.



세번째로 알아볼 내용은

if __name__ == "__main__":

입니다.

이를 제대로 확인하기 위해 먼저 module1.py 의 코드를 아래와 같이 수정합니다.



위의 코드와 같이 수정하고 다시 CMD창에서 module1.py를 사용하는 파일을 실행하면 다음과 같이 출력이 됩니다.



그런데, 우리는 prac.py에서 단순히 module1.py 의 함수만 사용하고 싶은데, module1.py에 있는 print()문 까지 함께 실행이 되어버렸습니다.

이러한 경우 우리는 if __name__ == "__main__": 를 통해 모듈을 호출할때 해당 파일의 함수나 클래스, 변수만 가져오도록 할 수 있습니다.

module1.py의 코드를 아래와 같이 수정합니다.



위의 코드처럼 수정하고 다시 prac.py를 실행하면 module1.py의 print()문은 실행되지 않는 것을 볼 수 있습니다.


if __name__ == "__main__": 에 대해서 간단히 살펴보면

이는 직접 해당 파일을 실행시켰을 때는 if 문이 참이되어 그 이하 문장이 실행되지만, 단순히 모듈로써 불러서 사용하는 경우에는 if문이 거짓이 되어 이하 문장이 실행되지 않는 구조입니다.


위에서는 주로 함수를 예로 들어 모듈에 대해서 알아보았는데 클래스나 변수 또한 함수와 같은 방식으로 사용할 수 있습니다.



3. 패키지


패키지는 간단히 말해, 여러개의 모듈을 묶은 집합입니다.

예를 들어 아래의 파일구조와 같이 package 라는 폴더에 module1.py module2.py 를 만들고 package라는 폴더와 같은 위치에 prac.py 라는 파일이 있다고 합시다.



이때 우리는 package라는 폴더를 하나의 패키지라고 합니다.

이러한 패키지를 이용하는 방법은 모듈에서 사용한 방법과 매우 유사합니다.

prac.py 에서 package라는 패키지에 있는 moduel1.py를 이용하고 싶을땐,


from package.module1 import sum


과 같은 방식으로 사용하면 됩니다.


이렇게 해서 파이썬에서 모듈과 패키지에 대해서 알아보았습니다.

잘 진행이 되지 않거나 추가적으로 궁금한 사항은 언제든지 댓글을 이용해주세요.


블로그 이미지

Tigercow.Door

Data-Analysis / AI / back-end / Algorithm / DeepLearning / etc


안녕하세요. 문범우입니다.

이번 포스팅에서는 파이썬에서 클래스의 상속(Inheritance)에 대해서 알아보도록 하겠습니다.


1. 상속(Inheritance)


상속(Inheritance)이란, 다들 아시다시피 '물려받다'라는 의미를 가지고 있습니다.

클래스의 상속은 이러한 의미가 적용됩니다.

즉, B라는 클래스를 만들때 이미 만들어져 있던 A라는 클래스의 기능을 물려받는 것 입니다.

보다 쉽게 이해하기 위해 아래와 같은 Univ 클래스를 구성하였습니다.



Univ class에서는 기본적으로 University를 '서울시립대학교'로 지정하고, __init__함수에서 학년을 설정하게됩니다.

그리고 hello()함수를 통해 자신의 학교, 학년, 이름을 말하게 됩니다.


이제 상속을 사용해보도록 합니다.

ECE라는 클래스를 만드는데 Univ에게 상속을 받으며 University를 '서울시립대학교 전자전기컴퓨터공학부'로 바꾸겠습니다.



위의 코드와 같이 ECE 클래스를 구성하여 해당 파일을 실행시키면 아래와 같은 결과가 나옵니다.



ECE 클래스에서는 hello() 함수를 따로 선언하지 않았지만, Univ 클래스에게 상속받음으로써 이를 사용할 수 있는 것입니다.


위와 같이 상속은 아래와 같은 구조를 가지게 됩니다.


class 상속받을 클래스명(상속할 클래스명):

<내용 1>

<내용 2>

...



2. 매서드 오버라이딩(Method overriding)


상속에 개념중에서 알아야할 또 다른 개념은 매서드 오버라이딩(Method overriding)입니다.

이는 상속받은 함수를 새롭게 구현하는 것입니다.

예를 들어, 위의 ECE 클래스에서 다른 방식으로 인사를 해야한다면 아래와 같이 매서드 오버라이딩을 하면 됩니다.



위의 코드에서 11,12번 라인을 보면 hello()함수를 새롭게 구현한 것을 보실 수 있습니다.

이러한 것이 매서드 오버라이딩입니다.



3. 연산자 오버로딩(overloading)


연산자 오버로딩이란 연산자(+, -, *, /, ... )를 객체끼리 사용할 수 있게 하도록 하는 것입니다.

즉 연산자를 새롭게 구현하는 것입니다.

연산자 오버로딩을 통해 다음과 같은 것을 구현할 수 있습니다.



코드에서 13,14라인을 보시면 __add__라는 함수를 구현한 것을 볼 수 있습니다.

위와 같은 것이 연산자 오버로딩입니다.


이렇게 해서 파이썬에서 클래스에 대한 개념에 대해 두번의 포스팅으로 알아보았습니다.

다음 포스팅에서는 '모듈'에 대해서 알아보겠습니다.



블로그 이미지

Tigercow.Door

Data-Analysis / AI / back-end / Algorithm / DeepLearning / etc


안녕하세요. 문범우입니다.

이번 포스팅에서는 파이썬에서의 클래스(Class)에 대해서 알아보도록 하겠습니다.


1. 클래스(Class)는 왜 필요할까?


클래스는 도대체 무엇이고, 왜 필요할까요?

먼저 하나의 예시를 들어서, 보다 쉽게 이해해보도록 하겠습니다.


계산기 기능을 하는 adder라는 프로그램이 있습니다. 

보다 쉬운 이해를 위해 단순히 덧셈만 계산한다고 가정합니다.

계산기는 단순히 두개 또는 세개의 숫자만 더하는 것이 아닙니다. 제가 입력하는 모든 숫자들의 합을 구해야합니다.

따라서 아래와 같은 모습을 가지게 될 것입니다.



위의 계산기 adder에서는 전역변수로 선언된, 초기값 0을 가진 result를 가져와 주어진 값을 더합니다.

따라서 해당 코드가 실행된 후에 result 값을 확인하면, 3+6+12 = 21의 값을 갖고 있을 것입니다.


그런데 특정 상황에 의해, adder라는 계산기가 두개 필요하다고 생각해봅시다.

예를 들어, 3+4+5 라는 연산과 9+10 이라는 연산을 한번에 진행해야 하는 것입니다.

이러한 상황을 고려해보면, adder라는 함수 하나보다는 adder_1과 adder_2가 필요합니다.

따라서 아래와 같은 코드가 구현될 것입니다.



네, 여기까지는 문제가 없는 것 같습니다.

그런데 위와 같은 adder라는 계산기가 5개, 10개가 필요할때는 어떡할까요?

2개를 구현했던 것처럼 하나하나 모두 직접 함수를 구현해야 할까요?


클래스의 개념을 익히면 위와 같은 상황을 매우 쉽게 해결할 수 있습니다.


위의 예시를 보시면서 어느정도 감히 잡혔을지 모르지만,

많은 곳들에서 클래스를 틀, 공장 등으로 비유하는 경우가 많습니다.


말 그대로 클래스는 틀 또는 공장과 같은 성격을 가지고 있습니다.

위의 상황에 이어서, Adder라는 클래스(class)가 있다고 가정합시다.

그럼 Adder는 덧셈을 구현하는 계산기를 만들어내는 틀 또는 공장이 되는 것 입니다.


이것을 코드로 나타내보면 아래와 같습니다.



위의 코드를 보시면 먼저 class Adder가 만들어 집니다.

__init__ 함수에 대해서는 조금 더 뒤에서 설명드리니 일단 넘어갑니다.

Adder 클래스를 확인하면 adder라는 함수가 있습니다.

해당 함수에서는 입력받은 num 값을 result에 더해서 반환하는 역할입니다.


이러한 클래스를 통해 그 아래에서 3개의 계산기를 손쉽게 만들어 냈습니다.


이렇게 클래스(class)는 틀, 공장과 같은 역할을 해서 자신의 형태와 같은 결과물(인스턴스)를 만들어 냅니다.



2. 클래스(Class)에서 self와 __init__


그럼 위의 코드에서 self는 무엇이고 __init__은 무엇일까요?


먼저 self는 단어 그대로 자기자신이라고 생각하시면 됩니다.

즉 위에서 생성된 adder_1, adder_2, adder_3 객체 모두 result라는 요소를 가지고 있습니다.

그런데 우리가 adder_2의 result가 궁금할 때 어떻게 호출할까요?


adder_2.result


를 호출함으로써 알 수 있게 됩니다.

또한, adder_2에서 adder라는 함수가 실행될 때 어떤 result를 참조하는지를 self를 통해 자기자신의 result를 참조한다고 알려줍니다.

그런데 이는 객체를 통해 함수나 변수를 호출할 때 생략될 수 있습니다. 때문에 adder라는 함수에서 self를 포함해 입력 인자2개를 받지만, 객체 자신을 통해서 해당 함수를 호출하면 self를 생략할 수 있습니다.

따라서 아래의 두 문장은 서로 일치하는 문장입니다.


Adder.(adder_2, 3) == adder_2(3)



그럼 두번째로, __init__ 은 무엇일까요?

간단하게 한 문장으로 말씀드리면,

인스턴스가 생성될 때 항상 실행되는 것입니다.

즉, 위의 Adder라는 클래스를 통해 adder_1, adder_2, adder_3 라는 세개의 인스턴스가 생성되었는데 각 인스턴스가 생성될 때 마다 __init__이라는 함수가 실행되어 각각의 인스턴스 모두 self.result = 0 이라는 문장을 실행한 것입니다.



또한 클래스(Class)에는 클래스 상속(Inheritance)과 오버로딩(Overloadging) 이라는 개념이 존재합니다.

하지만 이러한 것들 또한 위에서 설명된 내용들을 잘 이해한다면 쉽게 이해하실 수 있는 내용이기에 따로 설명은 생략하겠습니다.


이렇게해서 파이썬에서의 클래스(Class)에 대해서 알아보았습니다.

클래스는 프로그래밍을 하면서 매우 유용하게, 자주 사용되므로 꼭 직접 코드를 작성해보시면서 이해하시면 좋을 것 같습니다.

막히는 부분이 있거나 잘못된 부분이 있다면 언제든 말씀해주세요 :)


블로그 이미지

Tigercow.Door

Data-Analysis / AI / back-end / Algorithm / DeepLearning / etc


안녕하세요. 문범우입니다.

오늘은 파이썬에서의 사용자의 입력과 출력, 그리고 파일IO(Input / Output)에 대해서 알아보도록 하겠습니다.



1. 사용자 입력


우리가 평소에 사용하는 프로그램들에서는 사용자의 입력을 받아서 이에 대한 값을 바탕으로 특정 함수를 통해 결과값을 출력합니다.

예를 들어 지난 포스팅들에서 학습한 내용을 바탕으로, 구구단을 출력하는데 특정 숫자에 대한 구구단이 아닌

사용자가 확인하고 싶어하는 숫자에 대한 구구단을 출력하는 것입니다.


이럴 때, 사용자가 확인하고 싶어하는 숫자는 어떻게 입력받고 이를 어떻게 처리할까요?


먼저 사용자에게 입력을 요청하는 함수는 input() 입니다.

이것은 아래와 같이 사용됩니다.



input()을 통해 입력 받은 값을 a라는 변수에 집어넣은 것입니다.

여기서 주의해야 할 점이 있습니다.

input은 입력되는 모든 것을 문자열로 취급합니다. 즉, 숫자를 입력받았어도 이것을 바로 산술계산으로 사용할 수 없습니다.



위의 코드와 같이 a라는 변수가 int(정수형) 형태가 아닌 str(문자열) 형태이기 때문에 오류가 발생합니다.

이럴때는 아래 코드와 같이 형변환을 통해서 사용하면 됩니다.



추가로, 입력을 받을 때 질문을 함께 던지고 싶을 땐 어떻게 할까요?

단순히 입력을 받는 것이 아니라, 예를 들어 '이름을 입력하세요.', '학년을 입력하세요.' 등의 질문을 던지는 것입니다.

이러한 경우는 아래 코드와 같이 input() 에서 괄호 안에 질문을 작성하면 됩니다.




2. 출력


이번에는 출력에 대해서 알아보겠습니다.

우리는 그동안 print문을 통해 출력을 하였습니다.

이렇게 이용해왔던 print에 대해서 조금 더 자세히 살펴볼 것입니다.


먼저, print에서 큰따옴표로 둘러싸인 문자열은 + 연산과 동일합니다.

아래 두개의 print문을 확인해보면 완전히 동일한 결과 값을 출력하는 것을 알 수 있습니다.




그리고 문자열 간에 콤마(,)를 이용하여 출력하면 콤마의 위치에 띄어쓰기가 되는 것을 확인할 수 있습니다.




그런데 자세히 살펴보면, print문을 이용하여 출력하면 자동으로 줄바꿈이 되는 것을 볼 수 있습니다.

예를 들어 반복문을 통해 print문을 이용하여 1~5까지 숫자를 출력해보면 어떻게 될까요?




위의 코드와 같이 1부터 5의 숫자가 한 줄에 하나씩 출력됩니다.

그런데 이것을 모두 한줄에 표현하고 싶을 때는 어떻게 할까요?

print문에서는 맨 마지막 문자열의 초기값이 줄바꿈으로 되어 있습니다.

따라서 맨 마지막 문자열을 설정해주면 되는데,

print(출력할 내용, end = '') 와 같이 맨 마지막 문자열을 'end =' 을 이용해서 설정하면 됩니다.

아래 코드에서는 맨 마지막 문자열을 띄어쓰기로 설정하였습니다.



그리고 아래의 코드에서는 맨 마지막 문자열을 별표(*)로 설정하였습니다.




3. 파일 IO(Input / Output)


이번에는 컴퓨터에 있는 파일에 대한 방법입니다. 직접 파일을 만들거나, 파일을 읽고 쓰는 방법입니다.


기본적으로 파일을 여는 함수는 아래의 형태를 갖게 됩니다.


파일 객체 = open(파일 경로 및 이름, 파일 열기 모드)


그리고 파일 열기 모드는 총 3개가 존재합니다.


r : 읽기모드, 파일을 읽기만 할 때 사용

w : 쓰기모드, 파일에 내용을 쓸 때 사용

a : 추가모드, 파일의 마지막에 새로운 내용을 추가할 때 사용


여기서 자신이 파일 열기모드를 w(쓰기모드)로 열었는데, 파일 경로 및 이름에, 자신이 열고자 하는 파일의 경로와 이름을 함께 작성하는데 해당 경로에 일치하는 이름이 없다면 새로운 파일이 생성됩니다.

또한 파일 경로를 설정하지 않고 파일의 이름만 설정하면 현재 프로그램이 실행된 디텍토리에 파일이 생성됩니다.



4. 파일 쓰기


먼저 w(쓰기모드)를 통해 파일의 경로와 이름을 설정하고 파일을 생성해 봅니다.




그리고 파일의 경로를 지정하지 않고 파일을 생성해 보았습니다.





그럼 이번에는 파일을 쓰기모드로 열어서 직접 파일에 내용을 작성해 보도록 하겠습니다.

open() 을 통해 파일을 열어 해당 객체에 write를 통해 작성하면 됩니다.

아래 예시를 통해 확인하겠습니다.

해당 부분 부터는 에디터를 이용해서 코딩을 진행합니다.(제가 사용하는 에디터는 서브라임텍스트3 입니다.)




그리고 에디터로 작성한 파이썬 파일을 실행시켜보면

아래 사진과 같이 '새파일.txt' 파일에 내용이 입력되었음을 확인할 수 있습니다.



또한 a(추가모드)를 이용하면 원래 파일에 있던 내용을 그대로 보존하고 그 뒤에서 부터 내용을 작성할 수 있습니다.



5. 파일 읽기


이번에는 파일 읽기를 살펴보겠습니다.

파일 읽기는 r 모드를 이용해서 진행됩니다.

위에서 작성한 파일을 읽어보도록 합니다.




위와 같이 에디터에서 코드를 작성하여 실행하면 아래와 같은 결과가 출력됩니다.




readline() 함수는 파일에서 한 줄을 읽어내는 함수 입니다.

그럼 해당 함수를 이용하여 파일의 모든 내용을 읽으려면 아래와 같이 코드를 작성하면 될 것 입니다.




파일의 모든 내용을 읽는 함수는 따로 존재하기도 합니다.

바로 readlines() 라는 함수입니다.

해당 함수는 파일의 모든 내용을 읽어서 각 줄을 리스트의 요소로 하여 리스트 객체를 반환합니다.




또한 read() 라는 함수도 존재합니다.

read() 함수는 파일의 내용 전체를 읽어서 이를 문자열로 반환합니다.




이렇게 하여 이번에는 사용자의 입출력과 파일 IO에 대해서 알아보았습니다.

파일 IO에서 처음으로 에디터를 사용하며 실습을 진행했는데,

해당 부분에서 오류가 발생하거나 부딪히는 점이 있으시다면 언제든 댓글을 남겨주세요 :)

블로그 이미지

Tigercow.Door

Data-Analysis / AI / back-end / Algorithm / DeepLearning / etc


안녕하세요.

이번 포스팅에서는 파이썬에서의 제어문에 대해 알아보려고 합니다.

다른 언어를 공부하셨던 분들은 익숙하실 겁니다.

개인적으로 느끼기엔 처음 공부하시는 분들도 다른 언어에 비해 이해하기 쉽고 간편하다고 생각됩니다.

궁금하신점은 언제든지 댓글이나 이메일을 이용해주세요 :)


1. if문


우리는 일상생활에서 다음과 같은 말을 자주 이용합니다.

" A 면, B 해라 "

즉, A라는 조건이 참(True)일때 B라는 행동을 하라는 것이죠.

영어에서는 이러한 문장을 if문을 이용해서 나타냅니다.

그리고 이러한 것을 표현할때 파이썬에서도 if를 사용합니다.

먼저 간단한 예시를 보겠습니다.

아래 예시는 money라는 변수에 5000이라는 정수값을 저장하고, money가 3000이상이면 택시를 타고, 그렇지 않으면 버스를 타라는 문장을 출력해보는 예시입니다.



설명해준 것과 예시의 코드를 비교해서 보시면 쉽게 이해가실 겁니다.

먼저 첫번째 문장에서 money 변수에 5000이라는 정수값을 저장하였습니다.

그리고 두번째 문장에서 if 제어문을 사용하였습니다.

그리고 그 아래에서는 if 제어문의 조건이 참일때 실행되는 문장이고

그것이 아닐때, else일때 실행되는 문장이 이어서 작성되었습니다.


파이썬에서 if문은 아래와 같은 형식으로 사용됩니다.


if <조건1>:

<조건1이 True일때 실행되는 문장>

elif <조건2>:

<조건1이 False이고 조건2가 True일때 실행되는 문장>

elif <조건3>:

<조건1과 조건2가 False이고 조건3이 True일때 실행되는 문장>

else:

<조건1, 조건2, 조건3이 모두 False일때 실행되는 문장>


위의 형식에서 elif문은 생략이 가능할뿐 아니라 개수에 상관없이 추가가 가능합니다.



2. if문에서의 조건문 형식


그럼 if문에서 <조건>은 어떤식으로 작성될까요?

처음 예시에서 보여드린 것처럼, 수학의 대소비교등의 기호도 사용되지만 보다 많은 구문도 사용가능합니다. 


먼저, 수학에서의 다양한 기호가 사용가능합니다.

A > B 와 같이 A가 B보다 크다 또는 A<= B와 같이 A가 B보다 작거나 같다의 의미도 나타낼 수 있으며

A == B와 같이 A와 B가 같다라는 조건도 가능합니다.


두번째, and / or / not 입니다.

A and B는 A와 B가 모두 True일때 True를 반환합니다.

A or B는 A또는 B중 하나 이상이 True일때 True를 반환합니다.

not A는 A의 반대를 반환합니다. 즉 A가 False일때 not A는 True를 반환합니다.


세번째, A in list/tuple/문자열 입니다.

A in list는 해당 list 내부에 A라는 요소가 포함되어 있을때 True를 반환합니다.

list 대신 tuple, 문자열도 사용될 수 있습니다.



3. while문


다음으로 알아볼 제어문은 while문 입니다.

while문은 다음과 같이 사용됩니다.

다음의 예시가 나타내는 바는, money에 1000이라는 정수값을 저장하고, money가 3000미만이면 money에 500원을 추가하며 3000이상일때 까지 반복한다. 그리고 money가 3000이상이면 이를 중단하고 택시를 탈수 있다는 문장을 출력합니다.



그리고 while문에서 응용될 수 있는 두가지 구문이 있습니다.

break와 continue인데, 먼저 break는 while문에 대한 조건과 상관없이 while문을 빠져나오는 구문입니다.

그리고 continue는 while문의 첫문장으로 돌아가도록 하는 구문입니다.


특히, while문에서는 무한루프가 발생할 수 있습니다.

아래와 같은 경우에서 무한루프가 발생합니다.

temp = 2

while temp%2 == 0:

temp = temp*3


temp 변수의 초기값은 2였습니다. 그리고 temp를 2로 나누었을때 나머지가 0이면 while문이 수행됩니다.

그리고 while문 내에서 temp 값에 3을 곱해서 그대로 저장합니다.

그렇다면 temp 값은 2*3^n 꼴이기 때문에 2로 아무리 나누어도 계속해서 나머지가 0입니다.

때문에, 해당 코드에서 while문을 빠져나오지 못하고 무한루프에 갇히게 됩니다.


무한루프는 실용적으로 사용할 수도 있지만, 일반적으로 무한루프가 발생하지 않도록 하는 것이 좋다고 합니다.



4. for 문


마지막으로 살펴볼 제어문은 for문 입니다.

for문은 아래와 같은 형식을 가지고 있습니다.


for <변수> in <리스트/튜플/문자열>:

<수행할 문장1>

<수행할 문장2>

...


먼저 in 뒤에 나와있는 리스트 또는 튜플 또는 문자열의 맨 앞의 요소부터 마지막 요소까지 하나씩 꺼내어서 변수에 저장합니다. 즉, 아래 예시와 같이 작동하는 것입니다.




for문에서 자주 함께 사용되는 함수로는 range()함수가 있습니다.


range함수는 숫자 리스트를 만들어 주는 함수로써 다음의 형식을 가집니다.

range(A,B) : A, A+1, A+2, ... , B-2, B-1

즉, range(A,B)는 A이상, B미만의 값을 가진 리스트입니다.

따라서 아래의 예시와 같이 사용될 수 있습니다.





이렇게 파이썬에서 사용되는 제어문들에 대해서 간단히 알아보았습니다.

연습하시다가 막히는 부분이나 추가적으로 궁금한 사항은 언제든 말씀해주세요 :)


블로그 이미지

Tigercow.Door

Data-Analysis / AI / back-end / Algorithm / DeepLearning / etc


안녕하세요. 문범우입니다.

이번에는 파이썬에서 집합 자료형에 대한 이야기를 하겠습니다.

해당 포스팅으로 자료형에 대한 이야기가 마무리 될 예정이며 이후에는 조금 더 빠르게 진도를 나가려 합니다. :)

그 동안 쉬엄쉬엄 조금씩 했더니 너무 느리게 진행되고 있다는걸 최근에서야 깨달은 것 같아서요.

빠르게 기본 개념을 학습하고, 예제를 풀며 심화학습하는 방식으로 진행하겠습니다.



1. 집합 자료형


집합 자료형과 리스트를 혼동하시는 분들도 있는데, 분명히 다른 자료형입니다.

집합 자료형을 통해서 우리는 집합에 관련된 것들을 쉽게 처리할 수 있습니다.

일단 집합 자료형을 만들어 보도록 하겠습니다.

집합 자료형은 아래 사진처럼 set키워드를 통해 만들 수 있습니다.



위의 사진과 같이 set() 의 괄호안에 리스트 또는 문자열을 입력하여 집합 자료형을 만듭니다.



2. 집합 자료형의 특징


그런데, 위의 사진에서 s2라는 집합에 대해 이상한 점을 보셨나요?

우리는 분명, "Hello, world!" 라는 문장을 입력했는데 빠진 글자가 있기도 하고 순서도 엉망이 되었습니다.

이는, 집합 자료형이 가진 아래와 같은 2개의 특징이 있기 때문입니다.


- 중복을 허용하지 않는다.

- 순서가 없다.(Unordered)


우리가 앞에서 학습했던 리스트나 튜플은 순서가 있기 때문에 인덱싱의 개념도 학습하고 이를 통해 자료형의 값을 얻어낼 수도 있었습니다. 하지만 집합 자료형, set 자료형은 순서가 없기 때문에 인덱싱이 존재하지 않습니다. 물론 바로 앞에서 학습했던 딕셔너리 자료형 또한 순서가 없기 때문에 인덱싱이 존재하지 않습니다.

만약, 집합 자료형으로 만든 값에 대해서 인덱싱을 처리하고 싶다면 list() 함수를 통해 집합 자료형을 리스트 자료형, 또는 tuple() 함수를 통해 튜플 자료형으로 변환해주셔야 합니다.



3. 집합 자료형 활용하기


집합 자료형에서는 교집합이나 합집합, 차집합등을 구할 수 있습니다.

각각에 대한 개념은 기초적인 개념이라 생각하고 설명은 생략하겠습니다.


먼저 교집합을 구하기 위한 기호는 '&' 입니다.



또한 아래의 사진 처럼 intersection() 함수를 사용해도 가능합니다.




두번째, 합집합은 '|' 기호를 통해 구할 수 있습니다.

또한, union() 함수를 사용해도 됩니다.




세번째, 차집합은 '-' 기호를 통해 구합니다. 이는 difference() 함수를 사용해도 됩니다.




4. 집합 자료형 관련 함수


집합 자료형과 관련된 함수들 중에서 몇가지만 소개해드리겠습니다.

먼저 하나의 값을 추가하는 add() 함수입니다.



그리고 한번에 여러개의 값을 추가하는 update() 함수입니다.




마지막으로 특정 값을 제거하는 remove() 함수입니다.



이렇게 해서 집합 자료형에 대해 살펴보았습니다.

다음 포스팅에서는 제어문에 대한 이야기를 해보도록 하겠습니다.

블로그 이미지

Tigercow.Door

Data-Analysis / AI / back-end / Algorithm / DeepLearning / etc


안녕하세요.

이번 포스팅에서는 튜플 자료형에 대해서 알아보도록 하겠습니다.


1. 튜플 자료형


지난 포스팅에서 리스트 자료형에 대해서 알아보았습니다. 리스트 자료형은 특정 숫자 또는 문자들이 대괄호('[',']')로 묶인 형태인데요, 튜플 자료형은 이와 다르게 소괄호('(',')')로 묶인 것입니다.

튜플은 어떻게 만들까요?

일단, 튜플은 리스트와 거의 비슷하지만 위에서 언급했던 점과 같이 약간의 차이점만 존재합니다.


- 리스트는 대괄호, 튜플은 소괄호로 둘러쌓인다.

- 리스트는 내부 요소의 생성, 삭제 및 수정이 가능하지만 튜플은 불가능하다.


이러한 튜플은 다음과 같은 모습을 가집니다.



위의 그림에서 세번째 항목과 같이, 튜플에서는 한가지 요소만 가질때에는 하나의 요소 뒤에 콤마(,)를 반드시 붙여줘야합니다.

또한 네번째 항목과 같이 괄호를 생략한 것은 자동으로 튜플로 생성됩니다.


이러한 튜플과 리스트에 있어서 가장 큰 차이점으로는, 위에서 언급하였듯이 요소의 값을 변화시킬 수 있는가 없는가입니다.



2. 튜플 요소 값 삭제 및 변경 오류


튜플 요소 값을 삭제하려 하면 아래와 같은 오류가 발생합니다.



마찬가지로, 튜플 요소 값을 수정하려 하면 아래와 같은 오류가 발생합니다.




3. 튜플 활용하기


리스트 자료형에서 활용했던 인덱싱, 슬라이싱, 더하기, 곱하기가 튜플에서도 가능합니다.


먼저 인덱싱과 슬라이싱입니다.




그리고 튜플 더하기와 곱하기 입니다.




이렇게 해서 튜플 자료형에 대해서도 알아보았습니다.

튜플 자료형은 기본적인 차이점을 제외하고 리스트와 매우 비슷하니 함께 공부해주세요.

다음 포스팅에서는 딕셔너리 자료형에 대해서 알아보겠습니다.

블로그 이미지

Tigercow.Door

Data-Analysis / AI / back-end / Algorithm / DeepLearning / etc


안녕하세요. 지난 포스팅에서 리스트 자료형에 대해서 알아보았습니다.

이번에는 그에 이어서, 리스트 자료형과 관련된 함수들에 대해서 알아보도록 하겠습니다.


1. 리스트 끝에 요소 추가하기(append)


첫번째로 알아볼 함수는 리스트에 요소를 추가하는 함수 입니다.

append란 사전적의미로, '덧붙이다, 첨부하다.' 라는 의미를 가지고 있습니다.

즉, append(x)는 특정 리스트의 끝에 x라는 요소를 추가하는 함수 입니다.



리스트에는 어떠한 자료형도 추가할 수 있는 것을 기억하세요.



2. 리스트의 원하는 위치에 요소 삽입하기(insert)


insert함수는 append함수와 달리 요소가 삽입되는 위치를 지정할 수 있습니다.

insert(a,b)로 사용되는데, 이는 a위치에 b요소를 삽입한다는 의미입니다.




3. 리스트 정렬하기(sort)


sort함수를 통해 리스트에 있는 요소들을 순서대로 정렬할 수 있습니다.

기본적으로 sort함수는 숫자 또는 알파벳 등을 오름차순으로 정렬해줍니다.



4. 리스트 뒤집기(reverse)


reverse함수는 리스트에 있는 요소를 역순으로 정렬해줍니다.

특정 기준(오름차순 또는 내림차순)으로 정렬하는 것이 아니라, 현재 있는 요소들을 단지 거꾸로 뒤집는 함수입니다.




5. 요소의 위치 반환(index)


index는 요소의 위치, 즉 index를 반환해주는 함수입니다.

index(x)는 리스트에 x라는 요소가 있을 때, 어떤 위치, 어떤 index에 있는지 알려줍니다.

리스트에 x가 없을 때는 오류를 반환합니다.




6. 리스트 요소 제거하기(remove)


remove함수는 리스트에서 나오는 첫번째 특정 요소를 삭제하는 함수입니다.

즉, remove(x)는 리스트에서 첫번째로 등장하는 x라는 요소를 삭제하는 것입니다.

만약 요소가 리스트에 존재하지 않는다면 오류를 반환합니다.




7. 리스트 요소 꺼내기(pop)


스택이라는 자료구조를 공부하신 분은 익숙할 함수입니다.

pop은 리스트에서 맨 마지막 요소를 출력하면서 그 요소를 리스트에서 삭제하는, 즉 리스트에서 꺼내버리는 함수입니다.



하지만 파이썬에서느 추가적으로 특정 위치에 있는 요소에 대해서 pop함수를 사용할 수 있습니다.

pop(x) 와 같이 pop함수 뒤에 하나의 인자를 넣어주면 x위치에 있는 요소를 꺼내게 됩니다.




8. 리스트의 요소 개수 세기(count)


count는 리스트에 있는 특정 요소의 개수를 확인하는 함수입니다.

즉, count(x)로써 사용하는데 이는 리스트에서 x라는 요소의 개수를 반환합니다.




9. 리스트 확장하기(extend)


extend함수는 원래의 리스트에 리스트를 더하는 함수입니다.

extend(x) 로써 사용하는데, 위의 함수들과 달리 extend는 리스트 자료형을 더해주는 것으로써, x라는 인자가 리스트 자료형이어야 합니다.





이렇게 해서 리스트 자료형과 관련된 함수들에 대해서 알아보았습니다.

다음 포스팅부터는 튜플 자료형에 대해서 알아보도록 하겠습니다.









블로그 이미지

Tigercow.Door

Data-Analysis / AI / back-end / Algorithm / DeepLearning / etc


안녕하세요. 오랜만에 파이썬 포스팅입니다.

이번에는 리스트 자료형에 대해서 알아보도록 하겠습니다.

이후 튜플이라는 자료형에 대해서도 알아볼텐데, 리스트와 혼동이 있을 수 있으니 확실히 이해하고 연습하고 넘어가세요.


1. 리스트 자료형


우리는 지난 포스팅들에서 숫자와 문자열에 대해서 알아보았습니다.

하지만 이러한 것들로 프로그래밍을 진행하기엔 아직 부족합니다. 예를 들어 특정 숫자들의 집합이라는 개념을 표현하는 것은 쉽지 않습니다.

파이썬에서는 이러한 것을 적절히 표현하기 위해 리스트라는 자료형이 있습니다.


먼저, 리스트 자료형은 아래와 같은 구조를 가지게 됩니다.


리스트명 = [요소1, 요소2, 요소3, ... ]


이러한 구조를 통해 아래와 같은 리스트들을 만들 수 있습니다.



위의 예시들중, list1과 같이 비어있는 리스트도 존재할 수 있으며, 특히 파이썬에서는 리스트 내부 요소들간의 자료형이 서로 상이할 수 있습니다. 또한 리스트 내부에 리스트 자료형 또한 가질 수 있죠.

즉, 리스트 내부의 요소는 어떠한 자료형이든 가능합니다.



2. 리스트의 인덱싱과 슬라이싱


문자열에 대해서 학습할때 했던 인덱싱과 슬라이싱이 기억나시나요?

리스트 자료형에서 또한 인덱싱과 슬라이싱이 가능합니다.


먼저, 인덱싱에 대해서 알아보겠습니다.

아래와 같은 리스트가 존재합니다.



여기서, list_indexing[0]은 list_indexing이라는 리스트에서 0번째 요소(첫번째 요소)를 말합니다.

그렇다면, list_indexing에서 2번째요소와 3번째 요소의 합은 어떻게 구할까요?

바로 아래와 같습니다.



문자열과 같이 맨 앞에 있는 요소가 1번째가 아닌, 0번째인 것을 유의하시길 바랍니다.

또한, 문자열과 같이 list_indexing[-1]은 해당 리스트의 맨 마지막 요소를 가리킵니다.


그렇다면 한번 더 해보도록 하겠습니다.

list_indexing[4]는 무엇을 출력할까요?



list_indexing에서 4번째요소는 ["Hello","List indexing"]이라는 리스트 자료형인 요소입니다.

즉, list_indexing[4] = ["Hello","List indexing"] 인 것입니다.

그럼, list_indexing을 통해 "Hello"라는 문자열을 어떻게 가져올까요? 바로 아래와 같습니다.



그렇다면, 리스트 슬라이싱은 어떻게 하는 것일까요?

이 또한 문자열 슬라이싱과 매우 유사합니다.

아래와 같은 리스트가 존재합니다.



리스트 슬라이싱 또한 문자열 슬라이싱에서 학습했던 것을 기억하시면 됩니다.



3. 리스트 연산자


문자열 연산에 대해서, + 기호를 이용해 문자열 두개를 더하고, * 기호를 이용해서 반복했던 것 기억하시나요?

리스트 역시 문자열과 같이 그러한 연산이 가능합니다.


먼저 리스트 더하기를 살펴보겠습니다.



위의 그림 처럼, 문자열에서 + 기호가 했던 역할과 같이 리스트에서도 두개의 리스트를 서로 합쳐집니다.



그렇다면, * 기호를 이용한 리스트 반복하기도 살펴보겠습니다.



* 기호 또한, 위의 그림처럼 리스트를 반복하여 새로운 리스트를 만들어냅니다.



4. 리스트 요소 수정하기


그렇다면 리스트 내부에 있는 요소들은 어떻게 수정할까요?

먼저 리스트 내부의 요소 중 하나의 요소에 대해서는 아래와 같이 수정할 수 있습니다.



위의 그림처럼 리스트에서 하나의 요소를 선택하고, 수정하고 하는 값으로 입력하면 됩니다.


그럼 리스트에서 연속된 범위의 값에 대한 수정은 어떻게 할까요?

즉, 하나의 요소를 수정하는 것이 아닌 한번에 여러개의 요소에 대해 수정하는 것입니다.

위에서 했던 것처럼, 수정하고자 하는 요소들을 선택하고 변경될 값을 입력하면 되겠죠?



위의 그림처럼, 변경하고자 하는 요소들의 범위를 입력합니다. (list[3:6])

그리고 이들을 어떤 값으로 수정할지 입력하면 됩니다.


여기서 재밌는 점은, 변경하고자 하는 요소들의 개수와 수정될 값의 개수가 꼭 1:1이 아니어도 된다는 것입니다.

무슨 말인지 아리송하시다면 아래 예시를 확인하시죠.



위의 그림에서 선택된 요소의 범위는, list[1:3]으로써 list[1]과 list[2]의 요소를 선택하였습니다.

그리고 100,200,300,400,500 이라는 5개의 요소로 변경하였습니다.

즉 2개의 요소가 5개의 요소로 변경된 것입니다.


그럼 아래 그림의 차이점에 대해서 한번 고민해볼까요?



동일한 리스트, list1과 list2를 만들고 각각에 비슷해 보이는 명령을 내렸습니다.

하지만 이후 list1과 list2를 보면 서로의 결과가 동일하지 않고, list1의 변경된 요소들에 괄호가 되어있습니다.

결과적으로, 이렇게 바뀐 list1과 list2는 서로 전혀 다른 결과값입니다.


먼저 list1[1] = 10,20,30으로 수정하는 것은 list1에서 list1[1]요소 자체를 (10,20,30)으로 바꾸는 것입니다.

괄호로 묶인 자료형은 튜플이라고 하는 것인데 파이썬에서는 특정 자료형들을 괄호 없이 나열하게 되면 자동적으로 튜플로써 인식하여 소괄호가 생기게됩니다. 자세한 것은 추후 튜플에 관해 알아볼 때 살펴보겠습니다.


그리고 list2[1:2] = 10,20,30으로 수정하는 것은 위와는 좀 다르게, list2에서 list2[1]에서 list[2]사이의 리스트를 10,20,30으로 수정하는 것을 의미합니다.


이러한 수정과정에 있어서 실수가 없도록 주의하시길 바랍니다.



5. 리스트 요소 삭제하기


리스트 요소를 삭제하는 방법으로는 크게 두가지가 존재합니다.

[]를 이용하는 방법, 그리고 함수를 이용하는 방법.

먼저 대괄호([])를 이용하는 방법에 대해서 살펴보겠습니다.



위의 그림처럼 리스트에서 삭제하고자 하는 요소들의 범위를 입력하여 이를 빈 리스트([])로 대체하는 방법입니다.

여기서도 단순히 리스트의 요소를 선택하면 안되고 범위로써 선택해야 합니다.


두번째는 함수를 이용하는 방법입니다.

리스트에서 요소를 삭제하는 del 이라는 함수가 존재합니다.

아래 그림을 통해 어떻게 사용하는지 살펴보겠습니다.



del (삭제하고자 하는 리스트의 요소 = 객체) 이런식으로 사용하면 됩니다.




이렇게 해서 리스트 자료형에 대해서 알아보았습니다.

다음 포스팅에서는 리스트 자료형에서 사용하는 함수들에 대해서 알아보도록 하겠습니다.


블로그 이미지

Tigercow.Door

Data-Analysis / AI / back-end / Algorithm / DeepLearning / etc