По модулю и порядок работы в Python - PullRequest
5 голосов
/ 19 января 2011

В книге Зеда Шоу «Изучай Питона трудный путь» (стр. 15-16) у него есть пример упражнения

 100 - 25 * 3 % 4

результат 97 (попробуйте!)

Я не вижу порядок операций, которые могли бы сделать это ..

100 - 25 = 75
3% 4 = 0
или (100-25 * 3) = 225% 4 = ??? но, во всяком случае, не 97, я не думаю ...

Аналогичным примером является 3 + 2 + 1 - 5 + 4 % 2 - 1 / 4 + 6, который дает 7

В каком порядке выполняются операции?

Ответы [ 8 ]

25 голосов
/ 19 января 2011

Для первого примера: * и % имеют приоритет над -, поэтому мы сначала оцениваем 25 * 3 % 4.* и % имеют одинаковый приоритет и ассоциативность слева направо, поэтому мы оцениваем слева направо, начиная с 25 * 3.Это дает 75.Теперь мы оцениваем 75 % 4, получая 3.Наконец, 100 - 3 - это 97.

2 голосов
/ 06 марта 2015

Я выяснил ответ на ваш второй вопрос, потому что он меня тоже беспокоил - ответ Зака ​​близок, но потеря результата 1/4 из-за того, что Python 2.X усекает результаты целочисленного деления.Таким образом, он сначала оценивает операцию по модулю, а затем деление (которое, поскольку оно не является плавающим, возвращается как 0.

3 + 2 + 1 - 5 + 4 % 2 - 1 / 4 + 6
3 + 2 + 1 - 5 + (0) - (0) + 6 
6 - 5 + 6
1 + 6
7
2 голосов
/ 19 января 2011

Умножение >> мод >> вычитание

In [3]: 25 * 3
Out[3]: 75

In [4]: 75 % 4
Out[4]: 3

In [5]: 100 - 3
Out[5]: 97

Операторы умножения и по модулю имеют одинаковый приоритет, поэтому для этого примера вы выполняете оценку слева направо.

0 голосов
/ 12 ноября 2017

Python оценивает% после *, но до + или _.

Итак,

(100 - 25 * 3 % 4)
(100 - 75 % 4)
(100 - 3) 
(97)
0 голосов
/ 16 сентября 2014

Математика не моя сильная сторона, так что да, этот вопрос меня тоже на мгновение задел. Но надеюсь, что вы найдете это полезным.

75, деленное на 4 - это 18,75

18, умноженное на 4, равно 72 (оставляя 3 из 75)

Приведенный расчет составляет 100-25 * 3% 4 с ответом 97. Теперь я получил бы его, используя PEMDAS, как он говорит в разделе вопросов:

#!/bin/python

A = 100
B = 25
C = 3
D = 4
E = B*C # 75
F = E%D # 3
G = A-F # 97
print("B * C ="), E
print("E % D ="), F
print("A - F ="), G

Я думаю, что вы должны рассматривать модуль (%) как деление,

0 голосов
/ 17 ноября 2013

Во втором экзамене% имеет тот же порядок, что и *, поэтому мы получаем 3 + 2 + 1-5 + 4% 2-1 / 4 + 6 = 3 + 2 + 1-5 + (4% 2) - (1/4) + 6 = 1 + (4% 2) - (1/4) +6 = 1 + 0- (1/4) + 6 = 1- (1/4) + 6 = 0,75 + 6 = 6,75и это то, что он говорит, когда я пробую это на консоли, поэтому, что бы вы ни делали, вы должны были что-то сделать, чтобы округлить его.

0 голосов
/ 11 июня 2012

Исходная проблема: 100 - 25 * 3 % 4

На самом деле, оценка 25 * 3 и взятие 75% из 4 неверны, и оказалось, что для этой проблемы удобно работать.Python на самом деле является оператором модуля, где x% y дает остаток от x / y.В данном случае получилось, что 75 / 4 равно 18, а остаток равен 3, поэтому 100 - 3 = 97.

Не пытайтесь умножать проценты, это распространенная ошибка.

0 голосов
/ 19 января 2011

Вот как это происходит:

'*' и '%' имеют одинаковый приоритет, поэтому оцените их слева направо.

  1. 25 * 3 = 75
  2. 75% 4 = 3 (4 * 18 = 72; остаток 3)
  3. 100 - 3 = 97

КЭД

...