2013-10-05 4 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 наблюдал, что 'None' возвращался туда, где ожидалось булево число. Я думаю, что этого достаточно описания проблемы. –

ответ

4

Вы забыли вернуть checklen() возвращаемое значение при вызове его:

checklen(linp) 

Добавить return там:

return checklen(linp) 

Обратите внимание, что > уже дает либо True или False, поэтому вы можете просто вернуть это прямо:

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: действительно; исправил мою более короткую версию. –

Смежные вопросы