Арифметика в Python, не могу понять простые базовые операции - PullRequest
1 голос
/ 07 февраля 2012

Я делаю некоторые очень простые упражнения в Python.Я использую сложный способ выучить книгу по питону, в которой в упражнении 3 есть выражение, которое я должен понять.

3 + 2 + 1 - 5 + 4% 2 - 1/4 + 6, выходиткак 7.

Для меня ответ 6. 6. 1005 *

6 - 5 + 0 - 1/4 + 6

1 - 1/4 + 6

6.

Это явно неверно, но может ли кто-нибудь помочь мне с приортом в математике и так далее?Кажется, я все забыл, если это не в скобках!

РЕДАКТИРОВАТЬ: Большое спасибо за ответ.Я ясно кое-что узнал об основных вещах, которые я считаю важными, прежде чем двигаться дальшеМой порядок операций определенно был далеко!

Ответы [ 10 ]

6 голосов
/ 07 февраля 2012

4% 2 = 0, потому что остаток от 4/2 равен 0

1/4, также равен 0, потому что он выполняет целочисленное деление, а .25 переводится в 0.

3 голосов
/ 07 февраля 2012

Если мы посмотрим на правила для приоритета оператора в Python , мы увидим, что:

3 + 2 + 1 - 5 + 4 % 2 - 1 / 4 + 6

рассматривается как:

3 + 2 + 1 - 5 + (4 % 2) - (1 / 4) + 6

(Дляарифметические операторы это тот же порядок, что и стандартный порядок операций в математике.)

Теперь 4 % 2 равно 0, поскольку остаток при делении 4 на 2 равен 0. 1 / 4 также 0, так как Python будет возвращать значение того же типа, что и операнды, и 0,25, когда "floored" равен 0.

Так что я думаю, что ваша ошибка заключается в применении / ко всему выражениюналево.Фактически, поскольку / имеет более высокий приоритет, чем -, вычисленное деление составляет 1 / 4.

2 голосов
/ 07 февраля 2012

См. Таблицу приоритетов операторов в Python.

http://docs.python.org/reference/expressions.html#summary

2 голосов
/ 07 февраля 2012

1/4 округляет (или полы) до 0, поскольку 1 и 4 - целые числа.Поэтому 1-0+6 = 7

1 голос
/ 07 февраля 2012

В Python3.x это будет 6,75 б / с 1/4 = 0,25 (истинное деление).Однако в Python 2.x 1/4 = 0 (преобразовать в наиболее общий тип используемых аргументов, то есть в данном случае int).Следовательно, если это будет 1/4 или 1/4, тогда в Python2.x вы получите 0,25, а результат будет 6,75

1 голос
/ 07 февраля 2012

Приоритет для деления и умножения, если вы не используете скобки!

Таким образом: 1-1 / 4 + 6 = 7, потому что 1/4, работая с целым числом, = 0

1 голос
/ 07 февраля 2012

Вы, кажется, думаете, что python должен вычислить все слева от оператора / перед делением на первый токен справа. Это было бы странным порядком оценки по любой мере.

Как всегда в программировании: если у вас есть сложное выражение с инфиксными операторами, используйте скобки, чтобы задать правильный порядок.

0 голосов
/ 07 февраля 2012
3 + 2 + 1 - 5 + 4 % 2 - 1 / 4 + 6

Порядок старшинства для этого - умножение и деление, вычисляемые слева направо, а затем сложение и вычитание.Итак ..

3 + 2 + 1 - 5 + (4 % 2) - (1 / 4) + 6

Те, что в скобках, оцениваются первыми из-за порядка операций.Поскольку у вас есть только целые числа (а не число с плавающей точкой, которое допускает значение 0,25), 1/4 будет иметь значение 0 из-за Python.

3 + 2 + 1 - 5 + 0 - 0 + 6

Впоследствии, когда вы оцениваете слева направо для добавления/ вычитание, вы остаетесь с:

6 - 5 + 6  => 1 + 6 => 7

Помните, что деление и умножение оцениваются до сложения и вычитания.Для получения дополнительной информации, Порядок операций - Википедия

0 голосов
/ 07 февраля 2012

Вместо математики вы должны взглянуть на операторов:

a%b является модульным b, который в случае a = 4 и b = 2 дает 0 (хорошо, спасибо математика;))

1/4: здесь важно учитывать, что 1 и 4 являются целыми числами. Таким образом, результатом также будет целое число, то есть 0,25 становится 0.

Вот почему вы в конечном итоге с

  3 + 2 + 1 - 5 + 4 % 2 - 1 / 4 + 6
= 3 + 2 + 1 - 5 +   0   -   0   + 6
=                                 7

Для операторов в python взгляните на документы по питону .

0 голосов
/ 07 февраля 2012

операнды являются целыми числами, поэтому 1/4 целочисленного деления = 0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...