2009-05-20 2 views
0

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

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

Это домашнее задание? –

+0

Пожалуйста, сообщите нам, что такое предполагаемый вывод: если вы хотите, чтобы все кратные 3, вам лучше использовать if ((i% 3) == 0) print i. – schnaader

+0

его проблема в проекте эйлера – Kevin

ответ

2

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

if i/3 == True 

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

if i/3 == 1 

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

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

if i % 3 == 0 

вы можете использования конечно, является, если s чтобы сделать это.Или вы можете использовать list comprehension с, если

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

Для тех, каким образом вниз голосования это, из python documentation:

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

+1

Все ненулевые значения True. i/3 будет False для i <3 и True для всех остальных. В версии Python, которая использует «классический» оператор деления. Если вы используете будущее разделение в Python 3, тогда i/3 будет false только тогда, когда i == 0. –

+0

@ S.Lott, это верно, все ненулевые значения True, но True равно 1. Попробуйте True + 3 вы я получаю 4. Кевин использовал print not print() в своем примере. Вот почему я предполагаю, что это «классический» оператор деления. Я просто пытаюсь просто сложить это. Кевин, очевидно, новичок в программировании. –

+0

@ S.Lott, чтобы доказать свою точку зрения оценить 5/2 == Истина, и вы увидите, что на самом деле результат будет False not True –

7

Да, но.

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

Что еще более важно.

i/3 - частное лицо.

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

+1

Старайтесь избегать «если какое-то выражение == False». – Brian

+2

на самом деле, «если какое-то выражение == Истина» очень ясно говорит о том, что вы действительно хотите, чтобы выражение было истинным, и что вы просто не рассеивали сравнение. так же, как положить «o = null» в ваш конструктор, ясно показывает, что вы действительно хотите, чтобы переменная была пустой, и что вы не просто забыли ее инициализировать. в буквальном смысле нет недостатка, чтобы быть более ясным. – Chris

+1

@ Кристофер: Это неправильно. Если вы можете сделать x == True, тогда вы сможете использовать, если y == False, что невозможно на языках, где False реализован как 0. –

0

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

0

Короткий ответ: нет. Вы не можете назначать задания if в python.

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

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

2

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

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

ИЛИ

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

Просто, чтобы уточнить, что вы там сделали, прочитайте все в список и поделили их всем остальным, а если остаток = 0, добавили их в список, правильно? – Kevin

+0

Точно. Кусок внутри «[...]» называется «пониманием списка» ... если вы хотите получить дополнительную информацию, ознакомьтесь с разделом 5.1.4 http://docs.python.org/tutorial/datastructures.html –

0

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

Смежные вопросы