Python에서 바닥 나누기를 수행하는 방법
게시 됨: 2022-11-02이 자습서에서는 Python에서 바닥 나누기를 수행하는 방법을 배웁니다. Python의 // 연산자, Python 수학 모듈의 floor 함수 등을 코드 예제와 함께 사용합니다.
우리는 Python의 산술 연산자에 대한 개요로 시작하여 바닥 나누기 연산자가 어떻게 작동하는지 // 배울 것입니다. 그런 다음 수학 및 연산자 모듈의 함수를 포함하여 동등한 다른 방법을 사용하여 바닥 나누기를 수행하는 방법을 배웁니다.
시작하자…
Python의 산술 연산자
Python에서는 산술 연산자를 사용하여 int
및 float
데이터 유형의 숫자에 대해 간단한 산술 연산을 수행할 수 있습니다. 이 연산자는 피연산자(숫자)에 작용하고 연산 결과를 반환합니다.

다음 표에는 Python의 산술 연산자와 그 작동 방식이 요약되어 있습니다.
운영자 | 통사론 | 결과 |
더하기(+) | num1+num2 | num1 과 num2 의 합을 반환합니다. |
빼기(-) | num1-num2 | num1 과 num2 의 차이를 반환합니다. |
곱하기(*) | num1*num2 | num1 과 num2 의 곱을 반환합니다. |
지수(**) | num1**num2 | num1 을 num2 의 거듭제곱으로 제곱한 결과를 반환합니다. num1 num2 |
분할 (/) | num1/num2 | 소수 부분을 포함하여 num2 num1 나눈 결과를 반환합니다. |
층 구분(/) | num1//num2 | num1 을 num2 로 나눈 몫을 반환합니다. |
모듈로(%) | num1 % num2 | num1 을 num2 로 나눈 나머지를 반환합니다. |
이러한 산술 연산자를 사용하는 몇 가지 예를 살펴보겠습니다. 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
는 제수입니다. num1
과 num2
의 바닥 나누기를 수행하려면 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()를 사용한 층 나누기

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를 반환합니다.

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


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
파이썬에서 바닥 나누기의 예

실용적인 예인 이진 검색으로 논의를 마치겠습니다.
이진 검색은 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를 사용하는 방법을 배웁니다.