Вы в процессе изучения Python? Это фантастический язык для изучения, но, как и для любого языка, он создает проблемы, которые иногда могут показаться непосильными, особенно если вы учите себя.
Учитывая все различные способы работы в Python, мы решили составить полезный список проблем, с которыми часто сталкиваются новички, а также их решения.
1. Чтение из терминала
Если вы запускаете программу на терминале и вам нужен пользовательский ввод, вам может потребоваться получить ее через сам терминал. (Другие альтернативы включают чтение файла для получения входных данных.)
В Python функция raw_input
облегчает это. Единственный аргумент, который принимает функция — это приглашение. Давайте посмотрим на небольшую программу, чтобы увидеть результат:
name = raw_input('Type your name and press enter: ')
print 'Hi ' + name
Если вы сохраните эти строки в файле (с расширением .py
Type your name and press enter: Shaumik
Hi Shaumik
Здесь важно отметить, что переменная является строкой, и вам необходимо отфильтровать и преобразовать ее, чтобы использовать ее в другой форме (например, для ввода числа итераций или длины матрицы):
name = raw_input('Type your name and press enter: ')
print 'Hi ' + name
num = raw_input('How many times do you want to print your name: ')
for i in range(int(num)):
print name
2. Перечисление в Python
Python часто представляет способы отличаться от других популярных языков программирования, таких как C ++ и Java. Когда вы просматриваете массив на других языках, вы увеличиваете целое число от 0
Ниже показан грубый способ сделать то же самое:
for (int i = 0; i < array_length; ++i)
cout << array[i];
Однако в Python вы можете просто обойти каждый элемент массива, не используя индексы вообще:
for item in array:
print item
Что делать, если есть необходимость доступа к индексам тоже? Функция enumerate
поможет вам сделать это. Перечисление массива (или списка
, как это известно в Python) создает пары элементов в массиве и их индексы. То же самое можно продемонстрировать следующим образом:
>>> x = [10, 11, 12, 13, 14]
>>> for item in enumerate(x):
... print item
...
(0, 10)
(1, 11)
(2, 12)
(3, 13)
(4, 14)
Представьте себе ситуацию, когда вам нужно распечатать каждый альтернативный элемент в массиве. Один из способов сделать это заключается в следующем:
>>> for index, item in enumerate(x):
... if index % 2 == 0:
... print item
...
10
12
14
3. Выполнение внешней команды через Python
В какой-то момент вам может понадобиться выполнить команду терминала в скрипте Python. Это может быть достигнуто с помощью функции call
subprocess
. Есть много способов сделать это, один из которых показан ниже:
>>> from subprocess import call
>>> call('cal')
March 2016
Su Mo Tu We Th Fr Sa
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
0
Последний ноль в выводе показывает, что подпроцесс, который мы создали в нашем скрипте, завершился нормально. Другими словами, при запуске команды проблем не было.
Если вам нужно использовать аргументы для команды, вам нужно добавить их в основную команду в виде списка. Например, чтобы выполнить команду ls -l
>>> from subprocess import call
>>> call(['ls', '-l'])
total 16
-rw-------@ 1 donny staff 439 Oct 21 16:06 chess.csv
-rw-r--r-- 1 donny staff 72 Mar 1 17:28 read.py
0
Чтобы проверить, что происходит с 0
>>> from subprocess import call
>>> call(['git', 'status'])
fatal: Not a git repository (or any of the parent directories): .git
128
В выходных данных вторая строка — это выходные данные команды, а 128
4. Работа с исключениями
Python является интерпретируемым языком, что означает, что код выполняется построчно. Если в строке обнаружена ошибка, дальнейшее выполнение кода прекращается. Однако вы можете обрабатывать
известные исключения в Python, используя блок try-exc. Давайте рассмотрим простой пример, генерируя ошибку времени деления на 0
>>> x = 1/0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
Когда интерпретатор достигает этой строки, выполнение вашей программы полностью останавливается! Тем не менее, использование блока try-Кроме может помочь избежать того же.
>>> try:
... x = 1/0
... except:
... print "Some error occurred"
...
Some error occurred
Когда такая ошибка возникает в блоке try
, интерпретатор просто выполняет блок кроме
. Блок исключений
может быть дополнительно расширен путем отлова отдельных ошибок:
>>> try:
... x = 1/0
... except ZeroDivisionError:
... print "You tried to divide by zero"
... except:
... print "Some unknown error occurred"
...
You tried to divide by zero
Вы можете пойти на шаг вперед, поймать исключение и продолжить его обработку (например, где-нибудь записать ошибку), изменив блок исключений
:
>>> try:
... x = 1/0
... except Exception as e:
... print "Exception occurred: " + str(e)
...
Exception occurred: integer division or modulo by zero
5. Работа с модулями
Глядя на код других, вы часто сталкиваетесь с этим блоком кода:
def some_function():
...
if __name__ == '__main__':
...
Это часто используется при создании модулей в Python. В идеале код в последнем блоке обычно демонстрирует некоторое базовое использование функций, указанных выше. Когда вы запускаете файл в терминале, этот код выполняется. Однако, если вы используете этот модуль в другом файле с целью использования функции, этот блок не выполняется. Смешение? Давайте лучше разберемся в этом на примере:
# File print.py
def print_me():
print "me"
# demonstrating use of print_me
print_me()
Теперь, если я импортирую этот файл, чтобы использовать функцию в новом файле, посмотрим, что произойдет:
>>> import print
me
>>>
Функция выполняется, как только вы импортируете файл. Чтобы избежать этого, мы помещаем функцию в блок if __name__ == '__main__':
# File print.py
def print_me():
print "me"
if __name__ == '__main__':
# demonstrating use of print_me
print_me()
Когда мы модифицируем код, print_me()
>>> import print
>>>
Последние мысли
Если Python не является вашим первым языком программирования, потребуется некоторое время, чтобы приспособиться к его образу действий. Я рекомендую вам посмотреть интересное видео на YouTube, где Рэймонд Хеттингер объясняет этот Pythonic путь программирования В этом посте я попытался осветить некоторые из этих проблем Pythonic.
Как прошло ваше путешествие в Pythonic или как оно продолжается? Вы предпочитаете делать эти задачи по-другому? Дайте нам знать в комментариях ниже!