Различия
Здесь показаны различия между двумя версиями данной страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
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> | ||