HOW-TO: Программа на Python, Часть 3 Сравнение версий

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
fullcircle:29:python_ч_3 [2010/09/19 01:14]
fullcircle:29:python_ч_3 [2015/12/03 19:31] (текущий)
Строка 3: Строка 3:
 //​Автор — Грэг Валтерс (Greg Walters)// //​Автор — Грэг Валтерс (Greg Walters)//
 </​style>​ </​style>​
 +
  
   - [[..:​27:​python_ч_1|Программа на Python — часть 1]]   - [[..:​27:​python_ч_1|Программа на Python — часть 1]]
Строка 15: Строка 16:
   - [[..:​36:​python_ч_10|Программа на Python — часть 10]]   - [[..:​36:​python_ч_10|Программа на Python — часть 10]]
   - [[..:​37:​python_ч_11|Программа на Python — часть 11]]   - [[..:​37:​python_ч_11|Программа на Python — часть 11]]
 +  - [[..:​38:​python_ч_12|Программа на Python — часть 12]]
 +  - [[..:​39:​python_ч_13|Программа на Python — часть 13]]
 +  - [[..:​40:​python_ч_14|Программа на Python — часть 14]]
  
  
Строка 21: Строка 25:
  
 Модули предлагают способ расширить программирование на Python. Вы можете создать свои модули,​ использовать те, которые поставляются с Python или которые написали другие. В самом Python есть сотни модулей,​ которые облегчают написание программ. Список модулей,​ поставляемых с Python, находится по адресу:​ http://​docs.python.org/​modindex.html. Некоторые модули предназначены для определённых операционных систем,​ но большинство из них кроссплатформенные и работают одинаково на Linux, Mac и Microsoft Windows. Для использования внешнего модуля необходимо импортировать его в программу. Один из модулей,​ поставляемых с Python, называется «random». Он даёт возможность генерировать псевдослучайные числа. Мы используем этот модуль в нашем первом примере. Модули предлагают способ расширить программирование на Python. Вы можете создать свои модули,​ использовать те, которые поставляются с Python или которые написали другие. В самом Python есть сотни модулей,​ которые облегчают написание программ. Список модулей,​ поставляемых с Python, находится по адресу:​ http://​docs.python.org/​modindex.html. Некоторые модули предназначены для определённых операционных систем,​ но большинство из них кроссплатформенные и работают одинаково на Linux, Mac и Microsoft Windows. Для использования внешнего модуля необходимо импортировать его в программу. Один из модулей,​ поставляемых с Python, называется «random». Он даёт возможность генерировать псевдослучайные числа. Мы используем этот модуль в нашем первом примере.
 +
 +<​code>#​=======================================
 +# random_example.py
 +# Module example using the random module
 +#​=======================================
 +import random
 +# print 14 random integers
 +for cntr in range(1,​15):​
 +    print random.randint(1,​10)
 +</​code>​
  
 Давайте разберём код по строкам. Первые четыре строки — это комментарии,​ о которых мы говорили в прошлый раз. Пятая строка говорит Python, что нужно использовать модуль «random». Мы должны явно указать Python на это. Давайте разберём код по строкам. Первые четыре строки — это комментарии,​ о которых мы говорили в прошлый раз. Пятая строка говорит Python, что нужно использовать модуль «random». Мы должны явно указать Python на это.
  
-В седьмой строке находится цикл «for», который ​печатает 14 случайных чисел. В строке восемь вызывается функция randint(), которая отображает случайное целое число в диапазоне от 1 до 10. Обратите внимание,​ что мы должны указать из какого модуля эта функция. В этом случае мы вызываем её random.randint. Зачем вообще создавать модули?​ Если бы все возможные функции включались непосредственно в Python, Python был бы очень большим и медленным,​ к тому же отладка стала бы кошмаром. Используя модули,​ мы можем разбить код на группы,​ специфичные для определённых потребностей. Если, например,​ вам не нужно использовать функциональность баз данных,​ то вам и не нужно знать, что здесь есть модуль для SQLite. Однако,​ когда он вам понадобится,​ вы его легко найдёте. Мы ещё будем использовать модули баз данных в последующих статьях.+В седьмой строке находится цикл «for», который ​является счетчиком и последовательно проходит ​числа от 1 до 14. В строке восемь вызывается функция randint(), которая отображает случайное целое число в диапазоне от 1 до 10. Обратите внимание,​ что мы должны указать из какого модуля эта функция. В этом случае мы вызываем её random.randint. Зачем вообще создавать модули?​ Если бы все возможные функции включались непосредственно в Python, Python был бы очень большим и медленным,​ к тому же отладка стала бы кошмаром. Используя модули,​ мы можем разбить код на группы,​ специфичные для определённых потребностей. Если, например,​ вам не нужно использовать функциональность баз данных,​ то вам и не нужно знать, что здесь есть модуль для SQLite. Однако,​ когда он вам понадобится,​ вы его легко найдёте. Мы ещё будем использовать модули баз данных в последующих статьях.
  
 Начав работать с Python, возможно,​ вы создадите свои собственные модули,​ чтобы использовать уже написанный код снова и снова, без необходимости повторного набора. Если вам нужно поменять что-то в этом коде, вы сможете сделать это с минимальным риском для кода в основной программе. Правда,​ на это есть ограничения,​ и мы разберёмся с этим позже. Когда мы использовали команду «import random», мы получили доступ ко всем функциям в модуле random. Если же нам нужна только функция randint(), можно привести оператор импорта к такому виду: Начав работать с Python, возможно,​ вы создадите свои собственные модули,​ чтобы использовать уже написанный код снова и снова, без необходимости повторного набора. Если вам нужно поменять что-то в этом коде, вы сможете сделать это с минимальным риском для кода в основной программе. Правда,​ на это есть ограничения,​ и мы разберёмся с этим позже. Когда мы использовали команду «import random», мы получили доступ ко всем функциям в модуле random. Если же нам нужна только функция randint(), можно привести оператор импорта к такому виду:
Строка 81: Строка 95:
 '| Item 2    X.XX |' '| Item 2    X.XX |'
 '​|------------------------------|'​ '​|------------------------------|'​
-'| Total    X.XX |'+'| Total    X.XX |'
 '​+===============================+'​ '​+===============================+'​
 </​code>​ </​code>​
Строка 87: Строка 101:
 Стоимость каждой покупки и сумма должны быть в долларах и центах. Ширина вывода должна быть изменяемой,​ значения слева и справа — тоже. Чтобы всё сделать,​ нам понадобятся три функции. Первая будет выводить верхнюю и нижнюю линии, вторая будет выводить строки покупок,​ включая строку суммы, а третья — разделительную линию. К счастью,​ в Python можно это сделать очень просто. Если вы помните,​ мы вывели строку,​ умноженную на 4, и она вернула четыре копии одной и той же строки. Мы можем использовать это в своё преимущество. Чтобы распечатать наши верхнюю или нижнюю линии, мы можем взять нужную ширину в виде числа, отнять от этого числа 2 (для двоих плюсов по бокам),​ и использовать символы '​='​ между плюсами. То есть в результате если мы возьмем длину линии, например,​ 10, Python отнимет 2 от этого числа для плюсов по бокам, а остальные 8 использует для плюсов,​ и получиться вот так: Стоимость каждой покупки и сумма должны быть в долларах и центах. Ширина вывода должна быть изменяемой,​ значения слева и справа — тоже. Чтобы всё сделать,​ нам понадобятся три функции. Первая будет выводить верхнюю и нижнюю линии, вторая будет выводить строки покупок,​ включая строку суммы, а третья — разделительную линию. К счастью,​ в Python можно это сделать очень просто. Если вы помните,​ мы вывели строку,​ умноженную на 4, и она вернула четыре копии одной и той же строки. Мы можем использовать это в своё преимущество. Чтобы распечатать наши верхнюю или нижнюю линии, мы можем взять нужную ширину в виде числа, отнять от этого числа 2 (для двоих плюсов по бокам),​ и использовать символы '​='​ между плюсами. То есть в результате если мы возьмем длину линии, например,​ 10, Python отнимет 2 от этого числа для плюсов по бокам, а остальные 8 использует для плюсов,​ и получиться вот так:
  
-+========++<​code>​+========+</​code>​
  
 Чтобы сделать еще проще, мы будем использовать переменные замены,​ чтобы поставить все эти элементы в одной строку. Таким образом,​ наша строка в виде кода Python будет выглядеть как '​return '​%s%s%s'​ % ('​+',​('​='​ * width-2 )),'​+'​). Теперь мы могли бы вывести это на экран, но мы будем использовать возвращённое ключевое слово, чтобы отправить генерируемый строку обратно в нашу вызванную линию. Назовём нашу функцию '​TopOrBottom'​ и код этой функции будет выглядеть вот так: Чтобы сделать еще проще, мы будем использовать переменные замены,​ чтобы поставить все эти элементы в одной строку. Таким образом,​ наша строка в виде кода Python будет выглядеть как '​return '​%s%s%s'​ % ('​+',​('​='​ * width-2 )),'​+'​). Теперь мы могли бы вывести это на экран, но мы будем использовать возвращённое ключевое слово, чтобы отправить генерируемый строку обратно в нашу вызванную линию. Назовём нашу функцию '​TopOrBottom'​ и код этой функции будет выглядеть вот так:
Строка 104: Строка 118:
 Теперь вы можете видеть,​ где комментарии пригодятся. Помните,​ мы возвращаем сгенерированные строки,​ поэтому мы должны иметь что-то для получения обратно,​ когда мы делаем к ней вызов. Вместо назначения его на другую строку,​ мы просто выводим его на экран. Вот строка вызова. Теперь вы можете видеть,​ где комментарии пригодятся. Помните,​ мы возвращаем сгенерированные строки,​ поэтому мы должны иметь что-то для получения обратно,​ когда мы делаем к ней вызов. Вместо назначения его на другую строку,​ мы просто выводим его на экран. Вот строка вызова.
  
-print TopOrBottom('​=',​40)+<​code>​print TopOrBottom('​=',​40)</​code>​
  
 Так что теперь,​ мы не только позаботились о тех трёх линиях,​ мы сократили количество процедур,​ что нам нужно от 3 до 2. Таким образом,​ нам нужно распечатать только центральную часть. Так что теперь,​ мы не только позаботились о тех трёх линиях,​ мы сократили количество процедур,​ что нам нужно от 3 до 2. Таким образом,​ нам нужно распечатать только центральную часть.
  
-Давайте вызовим новую функцию '​Fmt'​. Передадим ей 4 значения параметра: ​+Давайте вызовем новую функцию '​Fmt'​. Передадим ей 4 значения параметра: ​
 val1– имя покупки для вывода налево val1– имя покупки для вывода налево
 leftbit – длина левого "​столбца"​ leftbit – длина левого "​столбца"​
Строка 115: Строка 129:
 rightbit – длина правого "​столбца"​. rightbit – длина правого "​столбца"​.
  
-Первая задача заключается в форматировании информация для правой стороны. Поскольку мы хотим, чтобы отображалось долларах и центах,​ мы можем использовать специальную функцию замены переменной,​ которая гласит:​ печать значения как число с плавающей точкой с n числом ​располагается справа от десятичной точки. Команда будет '​%2.f'​. Мы назначим это к переменной,​ названной '​part2'​. Таким образом наша строка кода будет 'part2 = '​%.2f'​ % val2'. Мы также можем использовать набор функций,​ встроенных в строки Python, называющиеся ljust и rjust. Ljust будет отправлять строки влево, делая отступы справа с любого символа,​ которого Вы хотите. Rjust делает то же самое, кроме того, что отступает на левую сторону. Теперь давайте немного уберём мусор. Используя замены мы бросаем вместе большые строки и возвращаем его в код вызова. Вот наша следующая строка.+Первая задача заключается в форматировании информация для правой стороны. Поскольку мы хотим, чтобы отображалось долларах и центах,​ мы можем использовать специальную функцию замены переменной,​ которая гласит:​ печать значения как число с плавающей точкой с n-ным ​числом ​знаков ​после десятичной точки. Команда будет '​%2.f'​. Мы назначим это к переменной,​ названной '​part2'​. Таким образом наша строка кода будет 'part2 = '​%.2f'​ % val2'. Мы также можем использовать набор функций,​ встроенных в строки Python, называющиеся ljust и rjust. Ljust будет отправлять строки влево, делая отступы справа с любого символа,​ которого Вы хотите. Rjust делает то же самое, кроме того, что отступает на левую сторону. Теперь давайте немного уберём мусор. Используя замены мы бросаем вместе большые строки и возвращаем его в код вызова. Вот наша следующая строка.
  
-return '​%s%s%s%s'​ % ('| ',​val1.ljust(leftbit-2,'​ '​),​part2.rjust(rightbit-2,'​ '​),'​ |')+<​code>​return '​%s%s%s%s'​ % ('| ',​val1.ljust(leftbit-2,'​ '​),​part2.rjust(rightbit-2,'​ '​),'​ |')</​code>​
  
 Хотя это выглядит довольно сложно на первый взгляд,​ давайте проанализируем код: Хотя это выглядит довольно сложно на первый взгляд,​ давайте проанализируем код:
Строка 143: Строка 157:
  
 И снова, мы можем назначить возвращённое значение другой строке,​ но можем и просто вывести его на печать. Напоминаю,​ что мы указываем ширину слева — 30, а справа — 10. Сумма равна 40. Это число мы и передали в функцию «TopOrBottom» раньше. Теперь запустите ваш редактор и введите код, который расположен ниже. И снова, мы можем назначить возвращённое значение другой строке,​ но можем и просто вывести его на печать. Напоминаю,​ что мы указываем ширину слева — 30, а справа — 10. Сумма равна 40. Это число мы и передали в функцию «TopOrBottom» раньше. Теперь запустите ваш редактор и введите код, который расположен ниже.
 +
 +<​code>​
 +#pprint1.py
 +#Example of semi-useful functions
 +def TopOrBottom(character,​width):​
 +    # width is total width of returned line
 +    return '​%s%s%s'​ % ('​+',​(character * (width-2)),'​+'​)
 +def Fmt(val1,​leftbit,​val2,​rightbit):​
 +    # prints two values padded with spaces
 +    # val1 is thing to print on left, val2 is thing to print on right
 +    # leftbit is width of left portion, rightbit is width of right portion
 +    part2 = '​%.2f'​ % val2
 +    return '​%s%s%s%s'​ % ('| ',​val1.ljust(leftbit-2,'​ '​),​part2.rjust(rightbit-2,'​ '​),'​ |')
 +# Define the prices of each item
 +item1 = 3.00
 +item2 = 15.00
 +# Now print everything out...
 +print TopOrBottom('​=',​40)
 +print Fmt('​Item 1',​30,​item1,​10)
 +print Fmt('​Item 2',​30,​item2,​10)
 +print TopOrBottom('​-',​40)
 +print Fmt('​Total',​30,​item1+item2,​10)
 +print TopOrBottom('​=',​40)
 +</​code>​
  
 Сохраните код в файл «pprint1.py» и запустите его. Должно получиться что-то похожее на текст справа ниже. Сохраните код в файл «pprint1.py» и запустите его. Должно получиться что-то похожее на текст справа ниже.
Строка 178: Строка 216:
 print TopOrBottom('​=',​40)</​code>​ print TopOrBottom('​=',​40)</​code>​
  
-Я создал переменную-счётчик для цикла, которая обходит весь список для каждого элемента. Заметьте,​ что я также добавил перемен-ную «total». Делаем её равной нулю прежде,​ чем мы зайдём в цикл «for». Теперь,​ выводя на печать каждую покупку,​ мы прибавляем её стоимость к «total». В конце мы выводим саму «total» после раздели-тельной линии. Сохраните вашу программу и запустите её. Вы увидите что-то,​ похожее на текст снизу.+Я создал переменную-счётчик для цикла, которая обходит весь список для каждого элемента. Заметьте,​ что я также добавил переменную «total». Делаем её равной нулю прежде,​ чем мы зайдём в цикл «for». Теперь,​ выводя на печать каждую покупку,​ мы прибавляем её стоимость к «total». В конце мы выводим саму «total» после разделительной линии. Сохраните вашу программу и запустите её. Вы увидите что-то,​ похожее на текст снизу. 
 + 
 +<​code>​ 
 ++====================================+ 
 +| Soda 1.45 | 
 +| Candy 0.75 | 
 +| Bread 1.95 | 
 +| Milk 2.59 | 
 ++------------------------------------+ 
 +| Total 6.74 | 
 ++====================================+</​code>​
  
-Если вы хотите ещё усложнить программу,​ можете доба-вить строку с налогом. Выво-дить её нужно примерно так же, как и итоговую сумму, но вместо цены поставить ​ +Если вы хотите ещё усложнить программу,​ можете добaвить строку с налогом. Выводить её нужно примерно так же, как и итоговую сумму, но вместо цены поставить ​'(total * .086)'.
-(total * .086).+
  
 <​code>​print Fmt('​Tax:',​30,​total*.086,​10)</​code>​ <​code>​print Fmt('​Tax:',​30,​total*.086,​10)</​code>​