Python에서 바닥 나누기를 수행하는 방법

게시 됨: 2022-11-02

이 자습서에서는 Python에서 바닥 나누기를 수행하는 방법을 배웁니다. Python의 // 연산자, Python 수학 모듈의 floor 함수 등을 코드 예제와 함께 사용합니다.

우리는 Python의 산술 연산자에 대한 개요로 시작하여 바닥 나누기 연산자가 어떻게 작동하는지 // 배울 것입니다. 그런 다음 수학 및 연산자 모듈의 함수를 포함하여 동등한 다른 방법을 사용하여 바닥 나누기를 수행하는 방법을 배웁니다.

시작하자…

Python의 산술 연산자

Python에서는 산술 연산자를 사용하여 intfloat 데이터 유형의 숫자에 대해 간단한 산술 연산을 수행할 수 있습니다. 이 연산자는 피연산자(숫자)에 작용하고 연산 결과를 반환합니다.

산술 연산자-in-Python

다음 표에는 Python의 산술 연산자와 그 작동 방식이 요약되어 있습니다.

운영자 통사론 결과
더하기(+) num1+num2 num1num2 의 합을 반환합니다.
빼기(-) num1-num2 num1num2 의 차이를 반환합니다.
곱하기(*) num1*num2 num1num2 의 곱을 반환합니다.
지수(**) num1**num2 num1num2 의 거듭제곱으로 제곱한 결과를 반환합니다. num1 num2
분할 (/) num1/num2 소수 부분을 포함하여 num2 num1 나눈 결과를 반환합니다.
층 구분(/) num1//num2 num1num2 로 나눈 몫을 반환합니다.
모듈로(%) num1 % num2 num1num2 로 나눈 나머지를 반환합니다.

이러한 산술 연산자를 사용하는 몇 가지 예를 살펴보겠습니다. Python REPL 또는 Geekflare의 온라인 Python 편집기에서 이러한 예를 시험해 볼 수 있습니다.

 >>> num1 = 18 >>> num2 = 5 >>> num1 + num2 23 >>> num1 - num2 13 >>> num1 * num2 90 >>> num1 ** num2 1889568

이 예에서 num1 은 18이고 num2 는 5입니다. 나누기 연산 num1/num2 는 소수 부분을 포함하는 결과를 반환합니다.

숫자 5는 18에 세 번 들어가 나머지 3을 남깁니다. 따라서 바닥 나누기 연산인 num1//num2 는 몫 3을 제공하는 반면 모듈로 연산자는 나머지를 제공합니다. 이 경우에도 3입니다.

 >>> num1/num2 3.6 >>> num1//num2 3 >>> num1 % num2 3

이를 통해 나눗셈, 플로어 나눗셈 및 모듈로 연산자가 작동하는 방식에 대한 아이디어를 얻을 수 있습니다. 다음으로 나눗셈 연산자에 대해 자세히 알아보겠습니다.

️ Python 2에서 나누기 연산(/)은 결과를 가장 가까운 정수로 자릅니다. Python 3의 바닥 나누기 연산과 유사합니다. 이 자습서에서는 Python 3.x에서 바닥 나누기 연산이 작동하는 방식에 대해 설명합니다.

// 연산자를 사용한 바닥 나누기

오퍼레이터를 사용하는 층 분할

배당금과 제수가 있는 나눗셈 연산을 고려하십시오. num1/num2 에서 num1 은 피제수이고 num2 는 제수입니다. num1num2 의 바닥 나누기를 수행하려면 num1//num2 를 사용하십시오.

바닥 나누기 연산자 (//)는 피연산자의 데이터 유형에 따라 나누기 연산의 몫(정수 또는 부동 소수점 숫자)을 반환합니다.

바닥 나누기 연산자는 답이 항상 정수인지 확인하지 않습니다. 피제수( num1 ) 또는 제수( num2 )가 부동 소수점이면 num1//num2 의 결과는 부동 소수점입니다. 다음은 몇 가지 예입니다.

 >>> 18.0//5 3.0 >>> 10.0//4 2.0 >>> 15//4.0 3.0

결과가 정수여야 하는 경우 int() 함수를 사용하여 명시적으로 정수로 변환해야 합니다.

 >>> int(18.0//5) 3 >>> int(10.0//4) 2 >>> int(15//4.0) 3

후드 아래에서 무슨 일이?

바닥 나누기 연산자 //를 사용하면 특수 메서드(dunder 메서드라고도 함) __floordiv__() 가 호출됩니다. 따라서 아래와 같이 정수 또는 부동 소수점 숫자에 대해 __floordiv__() 메서드를 사용할 수도 있습니다.

 num1 = 18 num2 = 5 num1.__floordiv__(num2) # Output: 3

operator.floordiv()를 사용한 층 나누기

Floor-Division-Using-operator.floordiv

Python에서 바닥 나누기를 수행하려면 operator 모듈에서 floordiv() 함수를 사용할 수도 있습니다.

파이썬의 연산자 모듈에는 모든 산술 연산을 수행할 수 있는 효율적인 함수의 정의가 포함되어 있습니다. 따라서 바닥 나누기를 수행하려면 // 연산자 대신 연산자 모듈에서 floordiv() 함수를 사용할 수도 있습니다.

연산자 모듈에서 floordiv() 함수를 사용하는 것은 바닥 나누기 연산자를 사용하는 것과 같습니다.

 >>> import operator >>> operator.floordiv(18,5) # Output: 3 >>> operator.floordiv(12,5.0) # Output: 2.0

Math.floor()를 사용하여 바닥 나누기

바닥 기능은 어떻게 작동합니까?

수학에서 floor() 함수는 실수 x 를 입력으로 받아 정수(결과)를 반환합니다. 이 결과는 실수 x 보다 작거나 같은 가장 큰 정수 입니다.

이것을 더 잘 이해하기 위해 몇 가지 예를 들어 이 숫자를 숫자 라인에 시각화해 보겠습니다.

예 1 : 숫자 2.3을 고려하십시오. 2.3보다 작거나 같은 가장 큰 정수는 2입니다. 따라서 floor(2.3)은 2를 반환합니다.

python-floordivision-tutorial-ex1

2: 음수로 작업할 때도 동일한 정의를 적용할 수 있습니다. 숫자 -1.7을 고려하십시오. -1.7보다 작거나 같은 가장 큰 정수는 -2입니다. 따라서 floor(-1.7)는 -2를 반환합니다.

python-floordivision-tutorial-ex2

Math 모듈의 floor() 함수를 사용하여 위의 결과를 확인해보자.

 >>> from math import floor >>> floor(2.3) 2 >>> floor(-1.7) -2

바닥 나누기를 수행하려면 num1/num2 를 인수로 사용하여 floor() 함수를 호출할 수 있습니다. 결과를 가장 가까운 정수로 자르거나 내림하므로 바닥 나누기 연산과 동일합니다.

다음과 같이 math 모듈에서 floor() 함수를 명시적으로 가져올 수 있습니다.

 from math import floor num1 = 18 num2 = 5 floor(num1/num2) # Output: 3

또는 math 모듈만 가져온 다음 math.floor() 를 사용하여 floor() 함수에 액세스할 수도 있습니다.

 import math num1 = 18 num2 = 5 math.floor(num1/num2) # Output: 3

연산자 모듈의 floordiv() 함수 및 바닥 나누기 연산자 //와 달리 math.floor(num1/num2) 를 사용하면 결과가 정수임을 보장합니다. 이 방법은 코드를 읽을 수 있게 하고 유형 변환 단계를 제거합니다.

 import math num1 = 18.0 num2 = 5 math.floor(num1/num2) # Output: 3

파이썬에서 바닥 나누기의 예

Python에서 바닥 분할의 예

실용적인 예인 이진 검색으로 논의를 마치겠습니다.

이진 검색은 O(log n) 시간에 정렬된 배열을 통해 대상 요소를 검색할 수 있는 효율적인 검색 알고리즘입니다. 여기서 n 은 배열의 크기입니다.

이 알고리즘은 각 단계에서 검색 간격을 절반으로 나누는 방식으로 작동합니다. 이것은 간격의 중간점이 목표와 일치하는지(일치하는 항목이 발견되면 검색이 종료됨) 또는 목표보다 작거나 큰지에 따라 수행됩니다. 각 단계에서 배열의 크기가 절반으로 줄어들기 때문에 중간점이 항상 정수로 평가되는 것은 아닙니다.

 itemlist = [5,7,18,21,34,45] item = 7

이진 검색 알고리즘의 다음 구현을 고려하십시오. binary_search() 함수는 숫자( item )와 목록( itemlist )을 itemlist 에서 item 의 발생을 검색합니다.

  • item 이 발견되면 함수는 item 이 발생한 인덱스를 반환합니다.
  • 그렇지 않으면 None 을 반환합니다.
 def binary_search(item, itemlist): # get the list size listsize = len(itemlist) - 1 # start at the two ends of the list lowerIdx = 0 upperIdx = listsize while lowerIdx <= upperIdx: # calculate the middle point # use normal division instead of floor division midPt = (lowerIdx + upperIdx)/ 2 # if item is found, return the index if itemlist[midPt] == item: return midPt # otherwise get the next midpoint if item > itemlist[midPt]: lowerIdx = midPt + 1 else: upperIdx = midPt - 1 if lowerIdx > upperIdx: return None

이 구현은 검색이 진행됨에 따라 정수로 평가되지 않는 midPt 를 고려하지 않았다는 점을 제외하고는 기능적으로 정확합니다.

 binary_search(item,itemlist)

함수를 호출하면 목록 인덱스가 부동 소수점이 아닌 정수 또는 슬라이스여야 한다는 TypeError 가 발생합니다.

 --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-3-a5f12ebc3145> in <module> ----> 1 binary_search(item,itemlist) <ipython-input-2-524ef6900b1f> in binary_search(item, itemlist) 12 13 # if item is found, return the index ---> 14 if itemlist[midPt] == item: 15 return midPt 16 # otherwise get the next midpoint TypeError: list indices must be integers or slices, not float

바닥 나누기 연산자를 사용하도록 함수 정의를 수정합니다.

 def binary_search(item, itemlist): # get the list size listsize = len(itemlist) - 1 # start at the two ends of the list lowerIdx = 0 upperIdx = listsize while lowerIdx <= upperIdx: # calculate the middle point # use floor division midPt = (lowerIdx + upperIdx)// 2 # if item is found, return the index if itemlist[midPt] == item: return midPt # otherwise get the next midpoint if item > itemlist[midPt]: lowerIdx = midPt + 1 else: upperIdx = midPt - 1 if lowerIdx > upperIdx: return None

이 함수는 항목 7이 발견된 인덱스(인덱스 1)를 반환합니다.

 binary_search(item,itemlist) # Output: 1

결론

이 튜토리얼이 파이썬에서 바닥 나누기를 수행하는 방법을 이해하는 데 도움이 되었기를 바랍니다. 학습한 다양한 방법을 요약하면 다음과 같습니다.

  • 파이썬에서 연산자 b 는 a와 b를 피연산자로 사용하여 연산자가 정의한 연산을 수행하고 연산 결과를 반환합니다.
  • Python의 바닥 나누기 연산자를 사용할 수 있습니다. //; a//b 는 나눗셈 연산 a/b의 몫을 반환합니다.
  • 또는 다음 구문과 함께 Python의 연산자 모듈에 정의된 동등한 floordiv() 함수를 사용하여 a //b의 결과를 얻을 수 있습니다.
  • 위의 모든 메서드는 몫을 반환하지만 데이터 유형은 및 b 값에 ​​따라 float 또는 int가 될 수 있습니다. 따라서 반환 값을 정수로 캐스팅해야 합니다.
  • Python 수학 모듈의 floor() 함수는 바닥 나누기를 수행하는 데 사용할 수도 있습니다. math.floor(a,b)a//b 와 동일하며 정수를 반환합니다. 결과가 정수가 되도록 하려면 수학 모듈의 floor 함수를 사용하는 것이 좋습니다.

다음으로 Python에서 defaultdict를 사용하는 방법을 배웁니다.