2014-01-22 2 views
2

Я беру класс в алгоритмах и структурах данных (Python). В книге приведен пример «стека» с методами, возвращающими определенные значения. В книге эти значения печатаются при вызове методов. Однако, когда я запускаю программу, ничего не печатается. Мне нужно напечатать возвращаемое значение самостоятельно. Разве это разница между Python 2 и 3, или я делаю что-то неправильно? Вот код.Почему Python не возвращает возвращаемые значения?

class Stack: 
    def __init__(self): 
     self.items = [] 

    def isEmpty(self): 
     return self.items == [] 

    def push(self, item): 
     self.items.append(item) 

    def pop(self): 
     return self.items.pop() 

    def peek(self): 
     return self.items[len(self.items)-1] 

    def size(self): 
     return len(self.items) 

s=Stack(); s.push(5) 
s.size() 
s.isEmpty() 
s.peek() 

Таким образом, это должно печатать «1», «False» и «5». Но это не так.

+0

Если вы считаете, ваш вопрос ответили вам может принять ответ, как описано [здесь] (http://stackoverflow.com/about) – embert

ответ

7

В интерактивном интерпретаторе Python будет печатать repr значений выражения (кроме None) в качестве удобства. В сценарии вы должны печатать вручную, поскольку автоматическая печать будет очень неудобно работать в скрипте.

3

Зачем это печатать, если вы не включили инструкцию печати? Try:

print s.size() 
print s.isEmpty() 
print s.peek() 
+0

Или 'print (s.size())', если вы находитесь на Python 3 – embert

+0

@embert: действительно. Пропустил это в исходном посте. Спасибо за добавление. – elParaguayo

+0

Я думал, что это напечатает, так как это произошло в моей книге. Однако я не понимал, что в книге они были в «интерактивном режиме». Я привык к Matlab, где (как вы, наверное, знаете) все напечатано, если вы не добавите «;». Теперь я понимаю разницу. Благодаря! – Myone

0

Вы можете либо

s=Stack() 
s.push(5) 
print s.size() 
print s.isEmpty() 
print s.peek() 

или заменить return заявления с print.

2

Я предполагаю, что у вас есть код во входном файле, скажем a.py. Значения s.size() и т. Д. В этом случае игнорируются. С другой стороны, если вы введете что-нибудь подобное в интерактивном сеансе python, значения будут автоматически распечатаны для вас. Лучший способ попробовать все эти вызовы: удалить все операции с s из вашего входного файла, оставив там только определение стека. Затем используйте

python -i a.py 

Это загрузит файл с определением стеки, а затем интерактивным режимом (так называемым РЕПЛИ) будет доступны, где вы можете попробовать s=Stack(); s.push(5) и т.д.

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