Разделение в выражении if - PullRequest
0 голосов
/ 20 мая 2009

В Python, если у меня был диапазон, и я хотел бы перебрать его и разделить каждое число на другое число, могу ли я сделать это в операторе if.

a = range(20)
for i in a:
   if i / 3 == True:
      print i

Ответы [ 6 ]

7 голосов
/ 20 мая 2009

Да, но.

Пожалуйста, пожалуйста, пожалуйста. Никогда не говори if some expression == True. Это избыточно и заставляет многих задуматься над тем, что ты думаешь.

Более важно.

i/3 является частным.

i%3 - это остаток. Если я кратно 3, i%3 == 0.

2 голосов
/ 20 мая 2009

Все здесь проделали хорошую работу, объясняя, как сделать это правильно. Я просто хочу объяснить, что ты делаешь неправильно.

if i / 3 == True

Эквивалентно:

if i / 3 == 1

Потому что True == 1. Таким образом, вы проверяете, действительно ли i при делении на 3 равно 1. Ваш код на самом деле напечатает 3 4 5.

Я думаю, что вы хотели сделать, чтобы проверить, является ли я кратным 3. Например:

if i % 3 == 0

Конечно, вы можете использовать оператор if для этого. Или вы можете использовать понимание списка с if

[x for x in range(20) if x % 3 == 0]

Тем, кто голосует против, из документации по питону :

Логическими значениями являются два константных объекта False и True. Они используются для представления истинных значений (хотя другие значения также можно считать ложными или истинными). В числовом контексте (например, при использовании в качестве аргумента арифметического оператора) они ведут себя как целые числа 0 и 1 соответственно.

2 голосов
/ 20 мая 2009

В командной строке:

>>> [i for i in range(20) if i%3 == 0]
>>> [0, 3, 6, 9, 12, 15, 18]

OR

>>> a = [i for i in range(20) if i%3 == 0]
>>> print a
[0, 3, 6, 9, 12, 15, 18]
>>>
0 голосов
/ 20 мая 2009

Работая над Project Euler самостоятельно, я обнаружил, что "if not x % y" - самый чистый способ представления "если x кратно y". Это эквивалентно «if x % y == 0», как видно из других ответов. Я не верю, что между ними есть существенная разница; который вы используете, это просто вопрос личных предпочтений.

0 голосов
/ 20 мая 2009

Краткий ответ: нет. Вы не можете делать присваивания в операторах if на python.

Но на самом деле, я не понимаю, что вы пытаетесь сделать здесь. Ваш пример кода будет распечатывать только цифры 3, 4 и 5, потому что любое другое значение i, деленное на 3, будет отличаться от 1 (и, следовательно, false).

Если вы хотите разделить все в списке на 3, вам нужна карта (лямбда х: х / 3, диапазон (20)). если вы хотите десятичные ответы, карта (лямбда х: х / 3,0, диапазон (20)). Они вернут новый список, где каждый элемент представляет собой число в исходном списке, разделенное на три.

0 голосов
/ 20 мая 2009

Хм, кажется, вы хотите странную вещь - вы делите i на 3 и проверяете, равен ли он 1. Как 4 == True => False.

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