Страницы

Поиск по вопросам

понедельник, 25 марта 2019 г.

Почему не работает if x % 2: --x?

Если число нечётное, то уменьшить его на единицу - что неверно в следующем способе?
if x % 2: --x
Код полностью: https://ideone.com/SLZsrn
import random
def gen_smth(): x = random.randint(0, 100) if x % 2: --x return x
for _ in range(100): print(gen_smth())
В выводе содержатся нечётные числа, хотя должны были получиться только чётные:
64 11 37 35 1


Ответ

В Python нету --x, как и x--, вместо них стоит использовать x -= 1
Ну и как Qwertiy сказал в комментариях, запись if True: --x работает, потому что здесь - используется в качестве унарного минуса

Может показаться странным, что --x является statement в Python, но если обратиться к формальному определению statement, то получаем следующую цепочку:
simple_stmt → expression_stmt → starred_expression → expression → conditional_expression → or_test → and_test → not_test → comparison → or_expr → xor_expr → and_expr → shift_expr → a_expr → m_expr → u_expr, где
u_expr включает в себя унарные выражения.

Комментариев нет:

Отправить комментарий