划分为if语句

时间:2009-05-20 18:20:36

标签: python

在Python中,如果我有一个范围,并且我想迭代它并将每个数字除以另一个数字,我可以在if语句中这样做。

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

6 个答案:

答案 0 :(得分:7)

是的,但是。

请p拜托。永远不要说if some expression == True。这是多余的,让很多人想知道你在想什么。

更重要的是。

i/3是商。

i%3是余下的。如果我是3的倍数,i%3 == 0

答案 1 :(得分:2)

在命令提示符下:

>>> [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]
>>>

答案 2 :(得分:2)

这里的每个人都做得很好,解释了如何正确地做到这一点。我只想解释你做错了什么。

if i / 3 == True

相当于:

if i / 3 == 1

因为True == 1.所以你基本检查我是否除以3等于1.你的代码实际上会打印3 4 5。

我认为你想要做的是检查我是否是3的倍数。像这样:

if i % 3 == 0

您当然可以使用if语句来执行此操作。或者,如果

,您可以使用list comprehension
[x for x in range(20) if x % 3 == 0]

对于那些来自python documentation

的投票结果

布尔值是两个常量对象False和True。它们用于表示真值(尽管其他值也可以被认为是假或真)。 在数字上下文中(例如,当用作算术运算符的参数时),它们的行为分别与整数0和1相似。

答案 3 :(得分:0)

嗯,好像你想要一个奇怪的东西 - 你将我除以3并检查它是否等于1。 如4 == True =>假

答案 4 :(得分:0)

简答:不。你不能在python中的if语句中进行赋值。

但实际上,我不明白你在这里要做什么。您的示例代码只打印出数字3,4和5,因为除以3的每个其他值除以1之外的其他值(因此为false)。

如果要将列表中的所有内容除以3,则需要map(lambda x:x / 3,range(20))。如果你想要十进制答案,map(lambda x:x / 3.0,range(20))。这些将返回一个新列表,其中每个元素是原始列表中的数字除以3。

答案 5 :(得分:0)

在自己开发Project Euler时,我发现“if not x % y”是表示“如果x是y的倍数”的最干净的方法。这相当于“if x % y == 0”,见于其他答案。我不相信这两者之间存在显着差异;你使用的只是个人偏好的问题。