2016-01-08 71 views
-1

我在下面的簡單表達式中遇到問題。Python如果是布爾語句

number=int(input("enter the number")) 
for n in range(40-101): 
    if n % number is 0: 
     print(n) 

當我輸入10作爲輸入時,它不會輸出任何內容。隨着我的小學數學,我可以很容易地假設這應該打印所有可以除以10的數字。

所以問題應該在if聲明。它不輸入到print(n)

我使用PyCharm社區版和Python 3.4

+2

_「因爲他們使用」是「在任何地方......」_誰是「他們」?我建議你不要再聽他們,因爲你幾乎不應該使用'is'。 – Kevin

+0

''我唯一經常遇到的問題就是當我檢查'如果是None'時,我能想到的就是我的頭頂部,而這只是因爲它在語義上更加正確。 「東西==沒有」仍然有效 - 它只是不太好。 – LexyStardust

回答

5
  1. 您應該使用==,而不是is在這種情況下,因爲:

    is檢查,如果兩個物體的id是相同的,並且==檢查兩個對象的值是否相同。

  2. 好,range(40-101)給人range(-61)而這被視爲range(0, -61)。讓我們看看:

    >>> range(40-101) 
    range(0, -61) 
    >>> list(range(40-101)) 
    [] 
    

    我想你的意思是range(40, 101)對不對?

所以,你的代碼應該是這樣的:

number = int(input("Enter the number: ")) 
for n in range(40, 101): 
    if n % number == 0: 
     print(n) 

演示:

Enter the number: 10 
40 
50 
60 
70 
80 
90 
100 

只是有一個想法,以提高你的代碼,你並不需要在這%因爲range()有一個step的說法。從文檔:

class range(stop) class range(start, stop[, step])

到的範圍內的構造的參數必須是整數(是內置的int或實現該__index__特殊方法的對象)。

如果省略參數step,則缺省爲1.如果省略start參數,則缺省值爲0.如果步長爲零,則引發ValueError

對於積極的步驟,範圍r的內容由公式r[i] = start + step*i決定,其中i >= 0r[i] < stop

因此,作爲文件說,你還可以設置step而不是使用%檢查都可以通過number可分爲手動使用if的數字。例如:

number = int(input("Enter the number: ")) 
for n in range(40, 101, number): 
    print(n) 
+0

這是真的,但在Arc676的建議之後,我試圖在範圍(40,101,1)中執行相同的代碼,數字爲10.它的工作原理。因此,我thik是工作整數,但失敗的字符串等就像java.So我的意思是兩個具有相同內容的不同字符串根據is是錯誤的。但是具有相同整數值的兩個不同變量相同是 – Juwan

+0

['range()'](https://docs.python)的第三個參數。 org/3/library/stdtypes.html#range)是'step'。所以,'range(40,101,1)'和'range(40,101)'之間沒有區別。但是,我有一個好主意來改進你的代碼。 –

+0

@Juwan:然而,我沒有看到你的代碼中有任何字符串,你已經將輸入字符串轉換爲使用int()函數的整數函數了嗎? –