Вставить немного основы c Инструментарий трассировки:
indent = "" def sortStack (stack1, stack2): глобальный отступ печати (indent + "ENTER sortStack", stack1.stack, stack2.stack) indent + = ""
if stack1.isEmpty() is False:
if stack2.isEmpty() is True:
item = stack1.popOut()
stack2.push(item)
sortStack(stack1,stack2)
print(indent + "LEAVE sortStack case A")
indent = indent[2:]
elif stack1.peek() < stack2.peek():
item = stack1.popOut()
stack2.push(item)
sortStack(stack1,stack2)
print(indent + "LEAVE sortStack case B")
indent = indent[2:]
else:
item = stack1.popOut()
stack1.push(stack2.popOut())
stack2.push(item)
sortStack(stack1,stack2)
print(indent + "LEAVE sortStack case C")
indent = indent[2:]
else:
print(indent + " sortStack at bottom", stack2.stack)
stack1 = stack2
print(indent + "LEAVE sortStack at bottom", stack1.stack)
indent = indent[2:]
return stack1
Вывод:
ENTER sortStack [5, 4, 6] []
ENTER sortStack [5, 4] [6]
ENTER sortStack [5] [6, 4]
ENTER sortStack [4] [6, 5]
ENTER sortStack [] [6, 5, 4]
sortStack at bottom [6, 5, 4]
LEAVE sortStack at bottom [6, 5, 4]
LEAVE sortStack case B
LEAVE sortStack case C
LEAVE sortStack case B
LEAVE sortStack case A
returned None
[6, 5, 4]
Ваша проблема: только ваш самый внутренний вызов возвращает любое значение; остальные отбрасывают то, что этот внутренний вызов проходит обратно вверх по линии. Это возвращает None
.
REPAIR
Поместите предполагаемое возвращаемое значение в новую переменную; вернуть это при любом выходе.
indent = "" def sortStack (stack1, stack2): глобальный отступ печати (indent + "ENTER sortStack", stack1.stack, stack2.stack) indent + = ""
if stack1.isEmpty() is False:
if stack2.isEmpty() is True:
item = stack1.popOut()
stack2.push(item)
result = sortStack(stack1,stack2)
print(indent + "LEAVE sortStack case A")
indent = indent[2:]
elif stack1.peek() < stack2.peek():
item = stack1.popOut()
stack2.push(item)
result = sortStack(stack1,stack2)
print(indent + "LEAVE sortStack case B")
indent = indent[2:]
else:
item = stack1.popOut()
stack1.push(stack2.popOut())
stack2.push(item)
result = sortStack(stack1,stack2)
print(indent + "LEAVE sortStack case C")
indent = indent[2:]
else:
result = stack2
print(indent + "LEAVE sortStack at bottom", result.stack)
indent = indent[2:]
return result
ВЫХОД:
ENTER sortStack [5, 4, 6] []
ENTER sortStack [5, 4] [6]
ENTER sortStack [5] [6, 4]
ENTER sortStack [4] [6, 5]
ENTER sortStack [] [6, 5, 4]
LEAVE sortStack at bottom [6, 5, 4]
LEAVE sortStack case B
LEAVE sortStack case C
LEAVE sortStack case B
LEAVE sortStack case A
returned [6, 5, 4]
[6, 5, 4]