2014-03-04 116 views
0
def main(): 
port = 10000000 
portChecked = portChecker(port) 
if portChecked is portChecked: 
    print '%d is in the portlist' % port 

def portChecker(x): 
portCheck = range(65565) 
portList = list(portCheck) 
portCast = x 

if portCast in portList: 
    return 
else: 
    print '%d is not in the list' % portCast 

if __name__ == '__main__':main() 

開始學習Python,與暴力蟒蛇電子書,以爲我會寫一個簡單的函數來檢查正在由用戶輸入端口(或靜態值)使用Python函數返回和比較

如果端口在該範圍內,程序將打印出列表中的%d,但是就像這裏一樣,如果它在範圍之外,那麼兩個打印語句都會執行。

我是否錯過了函數調用,返回語句的使用或者我是否以錯誤的方式查看了這些內容。

谷歌搜索,似乎沒有給出類似的解決方案,大多數教程使用int或字符串。

所有幫助表示讚賞。

+1

'如果portChecked是portChecked:'永遠是真正的 –

+1

創建的65565個整數整個名單只是爲了檢查一個數字是否在一個區間是錯誤的。使用這個:'如果0

回答

3

有幾個問題與您的代碼:

  • portChecker總是返回None
  • portChecked is portChecked始終計算爲True
  • 通常它不是有(部分)的輸出中的一個好主意檢查功能

試試這樣:

def checkPort(x): 
    portList = range(65565) 
    return x in portList 

port = 10000 
if checkPort(port): 
    print '%d is in the port list' % port 
else: 
    print '%d is NOT in the list' % port 

此外,請注意端口是from 1 to 65565,所以您應該檢查它是否在range(1, 65565 + 1)。但是,除非您打算檢查端口是否已經預留,否則檢查1 <= x <= 65565是否更快更明確。

+0

我使用另一個函數的argparse傳遞端口值。以爲我會使用這種形式,而不是複製整個腳本。感謝您的幫助:) – choczy

0

我不知道爲什麼這還沒有提到。

您不需要創建值列表(整數)來檢查此範圍內是否有某個值。 你可以這樣寫:

def check_port(port): 
    return 0 <= port <= 65565 
+1

實際上,我提到了這一點(但只是順帶一提),但您好好強調這一部分。 ;-) –

+0

順便說一句,我不知道OP是否知道'range(65565)'不包含'65565'。 –

+0

AH,看起來簡單得多,這是我的第一語言,沒有意識到你可以使用這樣的回報。 – choczy