#python
Вопрос возник при решении задачи о палиндроме. Вот решение 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("Палиндром") else: print("Та ну не") которое работает для слов четной длины, и не работает для слов с нечтным количеством символов. Оказалось, что 7//2==3, а -7//2==-4 то есть задачу то я решил: return word[:len(word)//2] == word[:-(len(word)//2)-1:-1] но почему так реализовано целочисленное деление? Хотелось бы -7//2 ==-3. Какой тут глубинный смысл? А то ведь 7//2 + (- 7//2) == -1 7//2 - 7//2 == 0 P.S.: признателен gil9red за подсказки и краткое решение задачи о палиндроме в примечаниях ниже. P.P.S.: что интересно, операции побитового двоичного сдвига тоже соблюдают данное правило: 7>>1 == 3 -7>>1 == -4
Ответы
Ответ 1
Дело в том, как определяется целочисленное деление. Определение Разделить целое число a на целое число b!=0 с остатком — это значит найти такие два целых q и r, которые удовлетворяют следующим условиям: 1) a = b * q + r; 2) 0 <= r < |b|. Тогда из определения будет: -7 // 2 = -4 Объяснение: При делении отрицательного числа на положительное, получится отрицательное число Можно предположить, что правильный ответ -3, но в этом случае умножив -3 * 2 мы получим -6. Чтобы получить исходное -7 нужно к результату прибавить число -1, но остаток не может быть отрицательным по определению(r>=0). По этому в данном случае остаток равен 1 и частное равно -4.
Комментариев нет:
Отправить комментарий