본문 바로가기

WINK-(Web & App)/개인 스터디 & 프로젝트

[파이썬 스터디] 1주차 20203059 도승준

반응형

1주차 학습에서는 파이썬 설치, 숫자 계산, 변수와 입력 사용하기, 출력 방법, 불과 비교, 논리 연산자에 대해서 공부하였다.

 

 

1주차 공부 하며 느낀 타 언어와 파이썬의 차이점

타 언어와 다르게 파이썬은 세미콜론이 필수가 아니다. 보통 사용하지 않는 편이고 사용 하는 경우에는 한줄에 여러 문장을 사용하고 싶을 때 사용한다.

 

어떠한 코드에 대해 설명이 필요할 때, 보통 주석을 사용하는데 한 줄만 주석 처리 하고 싶을 경우 #를 사용하고, 여러 줄을 한꺼번에 주석 처리하고 싶을때는 ''' '''(작은 따옴표 세 개), """ """(큰 따옴표 세 개)를 사용한다.

 

또한 파이썬은 들여쓰기가 필수적이다. 공백 2칸, 4칸 혹은 Tab 한칸으로 들여쓰기 하는 방법이 있는데, PEP에서는 공백 4칸으로 가이드를 제시하고 있다.

 

숫자 계산

타 언어에서는 /를 사용하면 몫만 출력되지만, 파이썬은 실수가 출력된다. 파이썬에서 소숫점 이후를 버리고 몫만 출력하고 싶을 때는 버림 나눗셈 연산자 //를 사용한다. 하지만 이때도 계산식에 실수가 섞여있으면 출력값이 실수로 표현된다.

나눗셈에서 나머지를 사용하고 싶을때는 %기호를 사용한다.

C++과 같은 언어에서는 거듭제곱수를 사용하려면 for loop등을 사용하여야 했지만, python에서는 **연산자를 사용해주면 된다. A**B와 같이 사용하면 여기서 A는 밑이 되고, B는 지수가 된다.

몫과 나머지를 함께 구하고 싶을 때는 divmod를 사용하면 된다. (몫, 나머지)의 형태로 값이 출력되는데 이렇게 값을 괄호로 묶는 형태를 투플이라고 한다.

 

2진수 표현 : 숫자앞에 0b 붙이기.

8진수 표현: 숫자앞에 0o 붙이기.

16진수 표현: 숫자앞에 0x 붙이기, 0~F까지 사용하는데 이때 알파벳의 대/소는 구분하지 않는다.

 

변수와 입력 사용하기

int( ) 안에 계산식이나 정수로 된 문자열을 넣으면 정수로 형 변환이 가능하다. (실수도 float()으로 가능) 

객체의 자료형을 구하고 싶을 때는 type()에 객체를 넣어준다.

 

실수와 정수를 함께 계산하면, 표현 범위가 더 넓은 실수로 계산값이 표현된다. (C++ downcasting과 맥락이 비슷한 것 같음)

 

그런데 실수 계산을 파이썬에서 할경우 오차가 생긴다. 왜냐하면 파이썬은 실수를 근삿값으로 표현하기 때문인데, 따라서 실수를 비교할 때는 연산한 값과 비교할 값의 차이를 구한다음에 sys.float_info.epsilon보다 작거나 같은지 판단해야 한다.

import math, sys
x = 0.1 + 0.2
math.fabs(x - 0.3) <= sys.float_info.epsilon

위와 같이 코드를 작성하면 True가 출력된다. 

 

파이썬 3.5 이상에서는 두실수가 같은지 판단할 때 math.isclose()를 사용하면 된다.

import math
math.isclose(0.1+0.2, 0.3)

아래의 결과도 마찬가지로 True가 출력된다.

 

복소수를 사용할 때는 1.2 + 1.3j와 같이 표현하는데, j가 붙은 부분이 허수부이다. 두 실수를 복소수로 만들고자 할 때는 complex(1.2, 1.3)과 같이 사용할 수 있다.

 

파이썬은 다른 언어와 다르게 변수의 형을 지정해 줄 필요 없이 x = 10 과 같이 변수의 선언과 초기화를 동시에 해 줄 수 있다. 다만, 변수명을 지을때 첫째 글자에 숫자가 올 수 없고, '_' ( 밑줄 문자 ) 를 제외한 특수 문자는 사용 불가능 하며, 파이썬에서 이미 지정된 키워드는 사용이 불가능하다.

 

또한 파이썬에서는 변수 여러개를 한번에 만들 수 있다.

x,y,z = 10,20,30 과 같이 적으면, x에는 10, y에는 20, z에는 30이 할당 된다. 이때 변수와 값의 개수가 다르면 에러가 발생한다.

다만 변수의 값이 모두 같아도 된다면 x=y=z=10과 같이 사용할 수 있다.

 

이를 활용하면 C++에서 포인터를 사용해서 했던 값 바꾸기가 x,y = y,x와 같이 사용해 두 변수의 값을 바꿔줄 수 있다.

 

del 변수이름 으로 변수를 삭제 할 수 있다.

아무것도 할당 되지 않은 변수를 만들고 싶을 때, x= None과 같이 사용한다.

 

입력 값을 변수에 할당하고 싶을 때는 , X = input()과 같이 사용한다. X = input( '값을 입력해주세요.') 와 같이도 사용 가능한데, 이때는 X의 값을 입력 받을 때 값을 입력해주세요. 문구가 출력된다.

입력값을 정수로 바꿀 때는 앞에서 설명한 형변환을 활용해서 int(input())과 같이 사용한다.

 

다수의 입력값을 다수의 변수에 저장하고 싶을 때는

  • 변수1, 변수2 =  input().split() 
  • 변수1, 변수2 = input().split('기준 문자열')

과 같이 사용할 수 있는데, 1번은 공백 문자를 기준으로 문자를 분리해 변수에 저장하고, 2번은 기준 문자열을 기준으로 문자를 분리해 변수에 저장한다.

하지만 당연하게도 이렇게 사용하면 변수 1,2 는 String 변수인데, 이를 정수로 저장하고 싶을 떄 map 함수를 사용한다.

  • 변수1, 변수2 = map(int, input().split())
  • 변수1, 변수2 = map(int, input().split('기준문자열'))

 

print를 사용할 떄, ','로 값이나 변수를 구분하여 넣으면 각 값이 공백으로 띄워져서 한 줄로 출력된다.

이때 공백이 아닌 다른 문자열을 넣고 싶을 때 sep(separator에서 따옴)을 사용하여  다음과 같이 할 수 있다.

print(1920, 1080, sep='X')

이와 같이 하면 출력값은 1920X1080이 된다.

 

불과 비교, 논리 연산자 사용하기

파이썬에서는 비교연산자와 논리연산자의 판단 결과로 True나 False를 리턴한다.

 

==/!= 와 is / is not 은 비슷한 것 같지만 엄연한 차이가 있는데, ==/!=는 값을 비교하지만, is/is not은 객체를 비교한다.

따라서 1==1.0은 True이지만, 1 is 1.0은 False이다.

 

여기서 값을 비교할 때 is를 사용하면 안 되겠구나라는 사실을 살짝 엿 볼 수 있는데, 

더 자세하게 들어가면 파이썬은 변수가 할당되어 있는 상태에서 다른 값을 할당하면 메모리가 바뀔 수 있다. 즉 다른 객체가 되므로 값이 같더라도 False가 나오기 때문이다.

 

논리 연산자에는 and, or , not이 있는데,

and는 a and b의 경우 a,b 모두 참이면 True이고, 아니면 False이다.

or는 a,b 둘 중 하나만 참이어도 True이고, 둘 다 거짓이면 False를 리턴한다.

not은 논리값을 뒤집는다.

논리 연산자 평가 순서는 not, and, or 순서대로 판단한다.

 

정수 , 실수, 문자열을 불로 만들 때는 bool을 사용하면 된다.

0이 아닌 실수, 정수 => True로 출력되고,

0은 False로 출력되며,

문자열의 경우 값이 있으면 True, 값이 없으면 False가 출력 된다.

 

논리 연산자의 경우 첫번째 값만으로 결과가 확실할 때 두번째 값은 확인(평가)하지 않는 방법인 단락 평가를 사용한다.

예를 들어 A and B일때 A가 False라면 어차피 식의 값이 False이므로 B는 평가되지 않는다.

반대로 A or B일때 A가 참이라면 식의 값은 참이므로 B는 평가되지 않는다

따라서 앞 문단의 내용까지 응용해보면,

False and 'python'은 False가 출력될 것이고,

'python' or True는 True가 출력될 것이다.

 

 

마치며

잠깐 공부를 놓고 무릉도원에서 하루하루 삶을 즐기고 있었는데, 아직 늦지 않게 돌아온 것 같다.

알고리즘 스터디를 진행할때는 파이썬이 어려워 이것저것 다 찾아보느라 시간을 많이 뺏겨서 파이썬

공부를 시작하게 되었다. 처음에 가장 애먹였던 map과 split에 대해 이해한 것 같아서 제법 뿌듯하다.

 

반응형