В Python, если у меня был диапазон, и я хотел перебрать его и делить каждое число на другой номер, могу ли я сделать это в выражении if.Разделение на оператор if
a = range(20)
for i in a:
if i/3 == True:
print i
В Python, если у меня был диапазон, и я хотел перебрать его и делить каждое число на другой номер, могу ли я сделать это в выражении if.Разделение на оператор if
a = range(20)
for i in a:
if i/3 == True:
print i
Все здесь проделали хорошую работу, объясняя, как это сделать правильно. Я просто хочу объяснить, что вы делаете неправильно.
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 соответственно.
Все ненулевые значения True. i/3 будет False для i <3 и True для всех остальных. В версии Python, которая использует «классический» оператор деления. Если вы используете будущее разделение в Python 3, тогда i/3 будет false только тогда, когда i == 0. –
@ S.Lott, это верно, все ненулевые значения True, но True равно 1. Попробуйте True + 3 вы я получаю 4. Кевин использовал print not print() в своем примере. Вот почему я предполагаю, что это «классический» оператор деления. Я просто пытаюсь просто сложить это. Кевин, очевидно, новичок в программировании. –
@ S.Lott, чтобы доказать свою точку зрения оценить 5/2 == Истина, и вы увидите, что на самом деле результат будет False not True –
Да, но.
Просьба, пожалуйста, прошу. Никогда не говорите if some expression == True
. Это избыточно и заставляет многих людей задаваться вопросом, что вы думаете.
Что еще более важно.
i/3
- частное лицо.
i%3
- остаток. Если i кратно 3, i%3 == 0
.
Старайтесь избегать «если какое-то выражение == False». – Brian
на самом деле, «если какое-то выражение == Истина» очень ясно говорит о том, что вы действительно хотите, чтобы выражение было истинным, и что вы просто не рассеивали сравнение. так же, как положить «o = null» в ваш конструктор, ясно показывает, что вы действительно хотите, чтобы переменная была пустой, и что вы не просто забыли ее инициализировать. в буквальном смысле нет недостатка, чтобы быть более ясным. – Chris
@ Кристофер: Это неправильно. Если вы можете сделать x == True, тогда вы сможете использовать, если y == False, что невозможно на языках, где False реализован как 0. –
Хмм кажется, что вы хотите странную вещь - вы делите i на 3 и проверьте, равно ли она 1. As 4 == True => False.
Короткий ответ: нет. Вы не можете назначать задания if в python.
Но на самом деле, я не понимаю, что вы пытаетесь сделать здесь. В вашем примере кода будут отображаться только цифры 3, 4 и 5, потому что каждое другое значение i, деленное на 3, оценивается только чем 1 (и, следовательно, ложно).
Если вы хотите разделить все в списке на 3, вам нужна карта (лямбда x: x/3, range (20)). если вам нужны десятичные ответы, map (lambda x: x/3.0, range (20)). Они вернут новый список, в котором каждый элемент будет номером в исходном списке, разделенным на три.
В командной строке:
>>> [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, добавили их в список, правильно? – Kevin
Точно. Кусок внутри «[...]» называется «пониманием списка» ... если вы хотите получить дополнительную информацию, ознакомьтесь с разделом 5.1.4 http://docs.python.org/tutorial/datastructures.html –
Во время работы над проектом Эйлера себя, я нашел «if not x % y
», чтобы быть самым чистым способом представления «, если х кратно у». Это эквивалентно «if x % y == 0
», что видно из других ответов. Я не думаю, что между ними существует значительная разница; который вы используете, - это просто вопрос личных предпочтений.
Это домашнее задание? –
Пожалуйста, сообщите нам, что такое предполагаемый вывод: если вы хотите, чтобы все кратные 3, вам лучше использовать if ((i% 3) == 0) print i. – schnaader
его проблема в проекте эйлера – Kevin