2015-09-20 2 views
0

Это мой код:Пишем функцию возврата

def issorted(numlist): 
    sortbool = True 
    for i in range(1, len(numlist)): 
     if numlist[i] < numlist[i-1]: 
      sortbool = False 
      if True: 
       return(not sortbool) 
    return(sortbool) 

Как я помещал по крайней мере, еще один оператор возврата? Это так, что он может преждевременно прервать работу, когда обнаружено локальное нарушение требования порядка сортировки.

Пример вывода данной являются:

>>> print(issorted([3, 4, 5.0, 7])) 
True 
>>> print(issorted([-1, 8, -3, 8])) 
False 
>>> print(issorted([1])) 
True 
>>> print(issorted([])) 
True 
+0

'if True:' is * always * true. Поскольку вы также устанавливаете 'sortbool'' False' и возвращаете 'not sortbool' (so' True') весь ваш 'if numlist [i]

ответ

3

Используйте переменные экономно. Иногда они полезны, иногда они путают вас.

def issorted(numlist): 
    for i in range(1, len(numlist)): 
     if numlist[i] < numlist[i-1]: 
      #you want to return False and exit the function. 
      #return is the best option here. 
      return False 
    #if the for loop succeeds, you want to return True by default 
    return True 
1

Просто верните константу; здесь нет необходимости в переменной, и вы полностью запутались. Код:

if numlist[i] < numlist[i-1]: 
    sortbool = False 
    if True: 
     return(not sortbool) 

заканчивается возвращением True, всегда, потому что вы установили sortbool в False, но вернуть not sortbool (так не False, который True), то значение True верно, что он всегда является ,

Ваш код должен вернуть False, как только вы найдете позицию в списке, где значение меньше предыдущего значения, в противном случае возвращается True; просто скопируйте эти значения в виде литералов:

def issorted(numlist): 
    previous = numlist[0] 
    for value in numlist: 
     if value < previous: 
      # the current value is smaller than the previous, 
      # so the list is not (forward) sorted. Exit with False 
      return False 
     previous = value 
    # all values were equal or larger than their predecessors, so 
    # the list is sorted, exit with True 
    return True 

Обратите внимание, что я потянул туда небольшой трюк; Я использую дополнительную переменную для отслеживания предыдущего значения вместо генерации индекса.

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