[python] 파이썬에서 %의 결과는 무엇입니까?

%계산에서 무엇입니까 ? 나는 그것이하는 일을 해결할 수없는 것 같습니다.

예를 들어 계산의 백분율을 계산 4 % 2합니까? 분명히 0과 같습니다. 어떻게?



답변

% (모듈러스) 연산자는 첫 번째 인수를 두 번째 인수로 나눈 나머지를 산출합니다. 숫자 인수는 먼저 공통 유형으로 변환됩니다. 오른쪽 인수가 0이면 ZeroDivisionError 예외가 발생합니다. 인수는 부동 소수점 숫자 일 수 있습니다 (예 : 3.14 % 0.7은 0.34와 같음 (3.14는 4 * 0.7 + 0.34이므로)). 결과의 절대 값은 두 번째 피연산자의 절대 값보다 엄격히 작습니다 [2].

http://docs.python.org/reference/expressions.html 에서 가져온

예 1 :
6을 2 (3)로 나누면 나머지 6%20없기 때문에 평가합니다 .

예 2 : 7을 2로 나눈 나머지 7%21있기 때문에 평가됩니다 1.

요약하면, 나눗셈 연산의 나머지 또는 0나머지가없는 경우를 반환합니다 . 따라서 6%2나머지 6을 2로 나눈다는 것을 의미합니다.


답변

다소 벗어난 주제 %는 문자열 형식화 작업에서 %=값을 문자열로 대체 하는 데에도 사용됩니다 .

>>> x = 'abc_%(key)s_'
>>> x %= {'key':'value'}
>>> x
'abc_value_'

다시, 주제와, 그러나 추적하는 잠시 나를 데려 조금 문서화 기능을 것 같다, 그리고 나는이 SO 페이지가 높은 순위를하는 파이썬 모듈로 계산에 관한 생각했다.


답변

같은 표현 x % y은 나머지 부분을 평가합니다. x ÷ y기술적으로 “알림”대신 “모듈러스”이므로 %나머지 연산자가 다른 언어와 비교할 경우 결과가 다를 수 있습니다 . 약간의 미묘한 차이점이 있습니다 (실제적인 결과에 관심이있는 경우 “Python의 정수 부서 층”을 참조하십시오).

우선 순위는 연산자 /(나눗셈) 및 *(곱셈)과 같습니다.

>>> 9 / 2
4
>>> 9 % 2
1
  • 9를 2로 나눈 값은 4입니다.
  • 4 곱하기 2는 8
  • 9 빼기 8은 1-나머지입니다.

Python gotcha : 사용중인 Python 버전에 따라 %(더 이상 사용되지 않는) 문자열 보간 연산자이기도하므로 다음과 같은 표현식 '12' % 2 + 3이 유효한 자동 유형 캐스팅 (PHP 또는 JS와 같은) 언어의 언어인지 확인 하십시오. 파이썬 그것은 TypeError: not all arguments converted during string formatting아마도 당신을 혼란스럽게 할 것입니다.

[파이썬 3 업데이트]

사용자 n00p 의견 :

파이썬에서 9/2는 4.5입니다. 파이썬은 나누기 (4) 후에 남아있는 전체 객체 수를 알려주려면 9 // 2와 같이 정수 나누기를해야합니다.

정확히 말하면 정수 나누기는 파이썬 2에서 기본값으로 사용되었습니다 (이 답변은 이미 학교에 있고 2.x가 주류였던 내 아들보다 나이가 들었습니다).

$ python2.7
Python 2.7.10 (default, Oct  6 2017, 22:29:07)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 9 / 2
4
>>> 9 // 2
4
>>> 9 % 2
1

현대 파이썬에서 실제로 9 / 2결과 4.5:

$ python3.6
Python 3.6.1 (default, Apr 27 2017, 00:15:59)
[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 9 / 2
4.5
>>> 9 // 2
4
>>> 9 % 2
1

[최신 정보]

dahiya_boy 사용자가 댓글 세션에서 물었습니다.

Q. 이유를 설명해 주 -11 % 5 = 4시겠습니까-dahiya_boy

이거 이상 해요? JavaScript로 시도하면 :

> -11 % 5
-1

이것은 JavaScript %에서 “remainder”연산자이고 Python에서는 “modulus”(시계 수학) 연산자 이기 때문입니다 .

GvR에서 직접 설명을 얻을 수 있습니다 .


편집-dahiya_boy

Java와 iOS -11 % 5 = -1에서는 python과 ruby에서는 그렇습니다 -11 % 5 = 4.

이유의 절반은 Paulo Scardine에 의해 설명되며 나머지 설명은 다음과 같습니다.

자바와 아이폰 OS에서 %수단이 나눈다면 그 나머지를 제공합니다 (5) 11 % 제공 Quotient = 2 and remainder = 15 -11 % 제공을 Quotient = -2 and remainder = -1.

신속한 iOS의 샘플 코드.

여기에 이미지 설명을 입력하십시오

그러나 파이썬에서 이야기 할 때 시계 모듈러스를 제공합니다. 그리고 아래 공식에 대한 작업

mod(a,n) = a - {n * Floor(a/n)}

즉,

mod(11,5) = 11 - {5 * Floor(11/5)} => 11 - {5 * 2}

그래서, mod(11,5) = 1

mod(-11,5) = -11 - 5 * Floor(11/5) => -11 - {5 * (-3)}

그래서, mod(-11,5) = 4

파이썬 3.0의 샘플 코드.

여기에 이미지 설명을 입력하십시오


왜 파이썬의 정수 부서 층

오늘 파이썬에서 정수 나누기가 왜 C와 같이 0으로 잘리는 대신 결과의 바닥을 반환하는지 설명하도록 요청했습니다.

양수의 경우 놀라운 것은 없습니다.

>>> 5//2
2

그러나 피연산자 중 하나가 음수이면 결과는 바닥이됩니다. 즉, 0에서 반올림됩니다 (음의 무한대로).

>>> -5//2
-3
>>> 5//-2
-3

이것은 일부 사람들을 방해하지만 좋은 수학적 이유가 있습니다. 정수 나누기 연산 (//)과 그 형제, 모듈로 연산 (%)은 함께 돌아가서 훌륭한 수학적 관계를 만족시킵니다 (모든 변수는 정수임).

a/b = q with remainder r

그런

b*q + r = a and 0 <= r < b

(a와 b가> = 0이라고 가정).

음수 a에 대해 관계를 확장하려면 (b 양수 유지) 두 가지 선택 사항이 있습니다. q를 0으로 자르면 r이 음수가되어 불변 값이 0 <= abs (r) <로 변경됩니다. 음의 무한대쪽으로 q를 플로어링 할 수 있으며, 불변은 0 <= r <b로 유지됩니다. [업데이트 :이 문제를 해결]

수학적 이론에서 수학자들은 항상 후자의 선택을 선호합니다 (예 : Wikipedia 참조 ). 파이썬의 경우, a의 부호가 흥미롭지 않은 모듈로 연산의 흥미로운 응용 프로그램이 있기 때문에 동일한 선택을했습니다. POSIX 타임 스탬프 (1970 년 초 이후의 초)를 가져 와서 시간으로 바꾸는 것을 고려하십시오. 하루에 24 * 3600 = 86400 초가 있기 때문에이 계산은 단순히 t % 86400입니다. 그러나 음수를 사용하여 1970 년 이전의 시간을 표현할 경우 “0으로 자르기”규칙은 의미없는 결과를 제공합니다! 바닥 규칙을 사용하면 모두 잘 작동합니다.

내가 생각한 다른 응용 프로그램은 컴퓨터 그래픽의 픽셀 위치 계산입니다. 나는 더 많은 것이 확신합니다.

음의 b의 경우, 모든 것이 뒤집어지고 변하지 않는 것은 다음과 같습니다.

0 >= r > b.

C는 왜 이렇게하지 않습니까? 아마도 C가 디자인 될 당시 하드웨어는 이것을하지 않았을 것입니다. 가장 오래된 하드웨어에서 음수는 요즘 사용 된 2의 보수 표현 (적어도 정수)보다 “sign + intensity”로 표시 되었기 때문에 하드웨어는 이런 식으로하지 않았습니다. 첫 번째 컴퓨터는 Control Data 메인 프레임이었으며 정수와 부동 소수점에 대한 보수를 사용했습니다. 60의 패턴은 음의 제로를 의미했습니다!

모든 Python의 부동 소수점 스켈레톤이 어디에 묻혀 있는지 알고있는 Tim Peters는 이러한 규칙을 부동 소수점 모듈로 확장하려는 저의 욕구에 대해 우려를 표명했습니다. 그는 아마 맞을 것이다. x가 매우 작은 음수 인 경우 자르기-음의 무한대 규칙에 따라 x % 1.0의 정밀도 손실이 발생할 수 있습니다. 그러나 그것은 정수 모듈로를 깨뜨리기에 충분하지 않으며 // 밀접하게 연결되어 있습니다.

추신. // 대신 //를 사용하고 있습니다. 이것은 Python 3 구문이며 Python 2에서도 정수 나누기를 호출한다는 것을 강조 할 수 있습니다. Python 2의 / 연산자는 int 및 float 또는 두 개의 float과 다른 두 개의 정수 피연산자에 대해 다른 결과를 반환하므로 모호합니다. 그러나 그것은 완전히 별개의 이야기입니다. PEP 238 참조.

게시자 Guido van Rossum


답변

모듈러스는 수학적 연산이며 때때로 “클럭 산술”로 설명됩니다. 컴퓨터 과학에서 그렇게 많이 사용되는 실제 이유를 가리기 때문에 단순히 나머지로 묘사하는 것은 오도하고 혼란 스럽습니다. 실제로 사이클을 감싸는 데 사용됩니다.

시계를 생각해보십시오. 시간 범위가 0:00-23.59 인 “군사”시간에 시계를 본다고 가정하십시오. 자정에 매일 무언가를 원한다면 현재 시간 모드 24를 0으로 설정하십시오.

(시간 % 24 == 0) 인 경우 :

당신은 역사상 모든 시간을 24 시간 동안 계속해서 순환하고 하루의 현재 시간은 무한히 긴 숫자 모드 24입니다. 그것은 단지 나머지보다 훨씬 더 심오한 개념이며, 그것은 수학적 방법입니다 사이클을 다루는 것은 컴퓨터 과학에서 매우 중요합니다. 또한 배열을 감싸는 데 사용되므로 인덱스를 늘리고 모듈러스를 사용하여 배열의 끝에 도달 한 후 처음으로 되돌릴 수 있습니다.


답변

파이썬-기본 연산자
http://www.tutorialspoint.com/python/python_basic_operators.htm

모듈러스-왼쪽 피연산자를 오른쪽 피연산자로 나누고 나머지를 반환

a = 10 및 b = 20

b % a = 0


답변

대부분의 언어에서 %는 모듈러스에 사용됩니다 . 파이썬도 예외는 아닙니다.


답변

% Modulo 연산자는 Google https://developers.google.com/edu/python/strings에 정의 된대로 문자열을 인쇄하는데도 사용할 수 있습니다 (C와 동일) .

      # % operator
  text = "%d little pigs come out or I'll %s and %s and %s" % (3, 'huff', 'puff', 'blow down')

이것은 주제를 벗어난 것처럼 보이지만 확실히 누군가를 도울 것입니다.