2014-01-26 3 views
0

Я попросил, чтобы отладить следующие функции:Отладка функции в Python

def buggy_find_max(input): 
    max_val = None 
    for value in input: 
     if max_val is None: 
      max_val = value 
     if max_val > value: 
      max_val = value 
    print max_val 

если функция вызывается с: buggy_find_max([1, 5, 3]) он должен вернуть 5. я пытался сделать это, изменив его следующим образом:

def buggy_find_max(input): 
    for value in input: 
     max_val = value 
     if max_val is None: 
      print None 
     if max_val > max_val+1: 
      max_val = max_value+1 
      print max_val 

Но ничего не показывает. Как его отладить.

+1

Debugging не только простой проб и ошибок. Что не так с оригиналом (кроме отступов)? –

+1

вы переписываете 'max_val' все время – greole

+0

Если вы не против, используйте вместо этого встроенную функцию' max' ... 'max ([1,5,2]) # возвращает 5'. –

ответ

2

В первой версии вы должны отлаживать, игнорировать базовый футляр (max_val is None), потому что это становится False на первом value. Посмотрите, а не на второй проверки:

if max_val > value: 
    max_val = value 

Представьте ваше второе значение, value == 5. На данный момент, максимальная до сих пор max_val == 3:

if 3 > 5: # False 
    max_val = value # doesn't happen 

ли это, кажется, как правильное поведение для вас?

Чтобы прокомментировать ваш переписанной версии (обратите внимание, что, в общем, если Вам дают функции для отладки его не необходимо будет полностью переработана тиснением):

def buggy_find_max(input): 
    for value in input: 
     max_val = value # just sets max_val to each value in turn 
     if max_val is None: # this won't be True unless None is in input 
      print None 
     if max_val > max_val+1: # this can *never* be True 
      max_val = max_value+1 
      print max_val 
Смежные вопросы