2013-10-05 112 views
-1

下面的代碼返回None而不是True,當輸入顯示它應該明確返回True時,這裏有什麼錯誤?函數不返回布爾值,總是返回None

def checkminus(j): 
    linp = [] 
    for a in j: 
     if a == '-': 
      if len(linp) > 0: 
       linp = [] 
       return False 
       quit() 
      else: 
       linp.append(a) 
     else: 
      linp.append(a) 
    checklen(linp) 
def checklen(k): 
    l = len(k) 
    print(l) 
    if l>0: 
     return True 
    else: 
     return False 

print(checkminus(['-','5','5','8','2'])) 
+2

PLZ讓你的話題更多的信息,作爲一個檢驗的問題可能可能回答。 –

+0

嘗試顯示問題的確切位置。避免措辭如「爲什麼這不工作?」 –

+0

@Yosi:觀察到的'沒有'的OP被返回到布爾值。我認爲這足以說明問題。 –

回答

4

你忘了,當你把它返回checklen()返回值:

checklen(linp) 

添加return有:

return checklen(linp) 

注意>已經給你要麼TrueFalse,所以你可以直接返回:

def checklen(k): 
    l = len(k) 
    return l > 0 

另一種方法是使用bool(l);清單時爲False,否則爲True

簡化checkminus()

def checkminus(j): 
    linp = [] 
    for a in j: 
     if a == '-': 
      if linp: 
       return False 
     linp.append(a) 
    return bool(linp) 

這聽起來對我來說,如果你想確保-是隻在列表的開頭,或不存在的。

如果是這樣,這是比較容易:

def checkminus(j): 
    return len(j) > 0 and '-' not in j[1:] 
+0

檢查'j [0] =='-''不會給你同樣的事情,因爲當'j'不包含連字符時原始函數成功。 – jwodder

+0

@jwodder:確實;糾正了我的短版。 –