The question arose when solving the palindrome problem.
Here is the solution
def palindrom (param):
# convert to str
word = str (param)
# in cycle char by char comparing from start and from end to middle of the word
return True if word [: len (word) // 2] == word [: - len (word) // 2-1: -1] else False
if palindrom (input ("give me a word:")):
print ("Palindrome")
else:
print ("Well, not")
which works for words of even length, but does not work for words with an odd number of characters.
It turned out that 7 // 2 == 3
, and -7 // 2 == - 4
that is, I solved the problem:
return word [: len (word) // 2] == word [:-( len (word) / / 2) -1: -1]
but why is integer division so implemented?
I would like to -7 // 2 == - 3
.
What is the deep meaning here? Because
7 // 2 + (- 7 // 2) == -1
7 // 2 - 7 // 2 == 0
P.S .: Thanks to gil9red for hints and a quick solution to the palindrome problem in the notes below.
P.P.S .: interestingly, bitwise binary shift operations also follow this rule:
7 & gt; & gt; 1 == 3
-7 & gt; & gt; 1 == -4
Answer 1, authority 100%
This is how integer division is defined.
Definition
Divide integer a by integer b! = 0 with remainder means
find two integers q and r that satisfy the following conditions:
1) a = b * q + r;
2) 0 & lt; = r & lt; | b |.
Then the definition will be:
- 7 // 2 = -4
Explanation:
- When dividing a negative number by a positive number, you get a negative number
- It can be assumed that the correct answer is
-3
, but in this case, multiplying-3 * 2
will get-6
. To get the original-7
, add the number-1
to the result, but the remainder cannot be negative by definition (r & gt; = 0). Therefore, in this case, the remainder is1
and the quotient is-4
.
Answer 2, authority 11%
Here’s what I got.
As it turned out, the laws of mathematics and the formula in Python for calculating the remainder are different.
The general formula is a% b = r (a = b * q + r), where q is an incomplete quotient, r is the remainder.
For mathematics, in which, according to the rules, the remainder cannot be negative:
- 19% 5 = 1 (-19 = 5 * (- 4) +1)
19% -5 = 4 (-21 = 5 * (- 5) +4)
-19% -5 = 1 (-19 = (- 5) * 4 + 1)
-5% 19 = 14 (-5 = 19 * (- 1) +14)
5% -19 = 5 (5 = (- 19) * 0 + 5)
-5% -19 = 14 (-5 = (- 19) * 1 + 14)
For Python, where the remainder can be negative:
- 19% 5 = 1 (-19 = 5 * (- 4) +1) converges
19% -5 = -1 (19 = (- 5) * (- 4) -1) does not converge
-19% -5 = -4 (-19 = (- 5) * 3-4) does not converge
-5% 19 = 14 (-5 = 19 * (- 1) +14) converges
5% -19 = -14 (5 = (- 19) * (- 1) -14) does not converge
-5% -19 = -5 (-5 = (- 19) * 0-5) does not converge
Total: incomplete quotient “q” is rounded down, as well as with integer division. Those. if you fit one number in another -3, XX times, take -4, if 3, XX times, take 3, if 0, xx times, take 0. My logic drew it this way)