在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,那麼,你是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相同。
是的,但是。
請,請。永遠不要說if some expression == True
。這是多餘的,導致許多人想知道你在想什麼。
更重要的是。
i/3
是商。
i%3
是餘數。如果我是3的倍數,i%3 == 0
。
儘量避免「if some expression == False」。 – Brian 2009-05-20 18:34:35
嗯似乎你想要一個奇怪的事情 - 你除以3,並檢查它是否等於1. As 4 == True => False。
簡答:沒有。你不能在Python中的if語句中進行賦值。
但是真的,我不明白你在這裏要做什麼。你的示例代碼只會打印出數字3,4和5,因爲除以3以外的每個其他值除以1(因此都是假的)。
如果你想3分列表中的一切,你想映射(拉姆達X:X/3,範圍(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]
OR
>>> a = [i for i in range(20) if i%3 == 0]
>>> print a
[0, 3, 6, 9, 12, 15, 18]
>>>
雖然關於項目歐拉的工作我自己,我發現「if not x % y
」是代表「最乾淨的方式,如果x是一個多Y」。這相當於「if x % y == 0
」,在其他答案中可以看到。我不相信兩者之間有重大差異;你使用的只是個人喜好的問題。
這功課嗎? – 2009-05-20 18:28:39
請告訴我們假設的輸出是什麼 - 如果你想要所有3的倍數,你應該更好地使用if((i%3)== 0)print i。 – schnaader 2009-05-20 18:29:43
其在歐拉工程中的一個問題 – Kevin 2009-05-20 18:32:44