2009-05-20 56 views
0

在Python中,如果我有一個範圍,並且我想迭代它並將每個數字除以另一個數字,我可以在if語句中這樣做。在if語句中劃分

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

這功課嗎? – 2009-05-20 18:28:39

+0

請告訴我們假設的輸出是什麼 - 如果你想要所有3的倍數,你應該更好地使用if((i%3)== 0)print i。 – schnaader 2009-05-20 18:29:43

+0

其在歐拉工程中的一個問題 – Kevin 2009-05-20 18:32:44

回答

2

這裏的每個人都做得很好,解釋瞭如何做對。我只想解釋你做錯了什麼。

if i/3 == True 

等同於:

if i/3 == 1 

因爲真正的== 1,那麼,你是basicly檢查,如果我當除以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

布爾值是兩個常量對象的虛實相生。它們被用來表示真值(儘管其他值也可以被認爲是錯誤或真實的)。 在數字上下文中(例如,當用作算術運算符的參數時),它們的行爲分別與整數0和1相同。

7

是的,但是。

請,請。永遠不要說if some expression == True。這是多餘的,導致許多人想知道你在想什麼。

更重要的是。

i/3是商。

i%3是餘數。如果我是3的倍數,i%3 == 0

+1

儘量避免「if some expression == False」。 – Brian 2009-05-20 18:34:35

0

嗯似乎你想要一個奇怪的事情 - 你除以3,並檢查它是否等於1. As 4 == True => False。

0

簡答:沒有。你不能在Python中的if語句中進行賦值。

但是真的,我不明白你在這裏要做什麼。你的示例代碼只會打印出數字3,4和5,因爲除以3以外的每個其他值除以1(因此都是假的)。

如果你想3分列表中的一切,你想映射(拉姆達X:X/3,範圍(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] 

OR

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

雖然關於項目歐拉的工作我自己,我發現「if not x % y」是代表「最乾淨的方式,如果x是一個多Y」。這相當於「if x % y == 0」,在其他答案中可以看到。我不相信兩者之間有重大差異;你使用的只是個人喜好的問題。