단락 평가(Short-circuit Evaluation)


파이썬은 and나 or를 포함하는 식을 평가할 때 왼쪽에서 오른쪽으로 평가한다.

이때 평가를 멈출만한 충분한 정보를 얻으면 아직 평가하지 않는 피연산자가 있어도 바로 멈춘다.

※ or표현식에서 첫 번째 피연산자가 True이면 다음 피연산자를 보지않아도 값이 True인 것을 알 수 있다.

※ and표현식에서 첫 번째 피연산자가 False이면 다음 피연산자를 보지않아도 값이 False인 것을 알 수 있다.

예시


오류를 일으키는 식

print(1/0)

>>Traceback (most recent call last):			#ZeroDivisionError 발생
  File "....................................", line 1, in <module>
    print(1/0);
ZeroDivisionError: division by zero

 

위의 식을 or의 두 번째 피연산자로 사용하면

print((2<3)or(1/0))

>>True		#두 번째 피연산자에서 오류가 발생해야하지만 그렇지않고 True가 출력

첫 번째 피연산자가 True이기때문에 두 번째 피연산자를 확인하지않고 오류도 출력하지않는다.

 

 

※결과값이 잘 출력된다고해도 프로그램 내부에 오류가 존재할 수 있음을 기억하자.

 

 

 

출처:파이썬 프로그래밍 교과서 개정3판

'Python' 카테고리의 다른 글

Python - 에일리어스(alias)  (0) 2020.07.29
Python - 모듈(module)  (0) 2020.07.27
Python - 사용자 입력(input())  (0) 2020.07.26
Python - 부동소수점(Floating Point), 유한 정밀도  (0) 2020.07.24
Python - 문자열 변경  (0) 2020.07.23

입력


파이썬에서는 input()함수로 사용자 입력을 받을 수 있다.

name=input()
print(name)

>>>duck #사용자가 직접 입력
>>>duck #출력

 

input() 함수는 모든 입력을 문자열로 취급한다. 따라서 int, float형을 입력할 때는 형변환이 필요하다.

age=input()	#형변환을 해주지 않았기 때문에 입력을 문자열로 인식
print(age+5)

>>>24 #입력
>>>Traceback (most recent call last):				#출력 ->오류 발생
  File ".....................................", line 2, in <module>
    print(age+5);
TypeError: can only concatenate str (not "int") to str		#TypeError 발생

 

age=int(input())	#형변환
print(age+5)

>>>24		#입력
>>>29		#출력	-> age가 int형이므로 숫자 5와 연산 가능.

input()함수로 프롬프트 출력도 가능하다.

name=input("이름을 입력해주세요: ")	#input함수의 인자로 문자열 입력
print(name)

>>>이름을 입력해주세요: 오리
>>>오리

'Python' 카테고리의 다른 글

Python - 모듈(module)  (0) 2020.07.27
Python - 단락 평가(Short-circuit Evaluation)  (0) 2020.07.26
Python - 부동소수점(Floating Point), 유한 정밀도  (0) 2020.07.24
Python - 문자열 변경  (0) 2020.07.23
python- 문자열 포매팅  (0) 2020.07.23

부동소수점이란


부동소수점을 설명하기 앞서 고정소수점에 대해 간단히 설명하겠다.

고정소수점이란 각각 정수와 소수를 표현하는 비트의 수를 미리 정해 놓고 정해진 비트 만큼만 사용해서 수를 표현하는 방식이다.

 

부동소수점이란 컴퓨터가 실수를 표현할 때 사용하는 방법 중 하나로, 고정소수점 방식과는 다르게 소수점의 위치를 고정하지 않고 소수점의 위치를 나타내는 수를 따로 적어 표현한다.

※유효숫자를 나타내는 가수와 소수점의 위치를 나타내는 지수로 부동 소수점을 표현한다.

 

예를 들어 123.4 를 고정소수점, 부동소수점으로 나타내보면

고정소수점으로 표현 하면 123.4 한 가지 표현만 가능.

부동소수점 방식의 지수와 가수를 이용하면 [1.234 * 10^2], [12.34 *10^1] 등 여러 방식으로 표현이 가능하다.


유한 정밀도


파이썬에서 나타내는 부동소수점 수는 값이 길어질수록 부정확해진다.

 

예를 들어 파이썬에서 각각 2/3 연산과 5/3 연산을 해보면

print(2/3)
print(5/3)

>>0.6666666666666666
>>1.6666666666666667

위와 같이 출력된다.

사람이 하는 연산이라면 두 값 모두 끝자리가 6으로 반복되겠지만 파이썬은 그렇지않다.

이러한 현상이 발생하는 이유는 컴퓨터 메모리 용량이 한정되어 있고 파이썬이 한 숫자에 대해 저장하는 정보 용량을 제한하기 때문이다.

따라서 위의 값들은 제한된 양의 메모리에 실제로 저장할 수 있는 각 연산(2/3), (5/3)의 답에 가장 가까운 값이다.

 

사람이 생각하기에 2/3과 0.6666666666666666의 차이는 작아보일 수 있지만 실제 계산에서 0.6666666666666666를 사용할 떄 일어날 오류는 심각하다.

5/3은 1+(2/3)과 같은 값이지만 파이썬으로 계산을 해보면

print(1+(2/3))
print(5/3)

>>1.6666666666666665
>>1.6666666666666667

위와 같이 서로 다른 값이 나온다.

※계산을 더 할수록 오류는 더 커지고, 특히 매우 큰 수와 매우 작은 수를 연산하면 더 커진다.


부동소수점이 갖는 이러한 문제를 항상 인지하고 있어야 한다.

컴퓨터는 위에서 말한 것처럼 메모리에 한계가 있기 때문에 이 문제를 완벽히 해결할 방법은 없다.

부동소수점간의 연산에서는 최대한 작은 수부터 계산하는 것이 오류를 최소화하는 유일한 방법이다.

 

+ Recent posts