Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
fullcircle:29:python_ч_3 [2010/09/11 16:05] Большой кусок статьи пропущен |
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> |
Хотя это выглядит довольно сложно на первый взгляд, давайте проанализируем код: | Хотя это выглядит довольно сложно на первый взгляд, давайте проанализируем код: | ||
Строка 144: | Строка 158: | ||
И снова, мы можем назначить возвращённое значение другой строке, но можем и просто вывести его на печать. Напоминаю, что мы указываем ширину слева — 30, а справа — 10. Сумма равна 40. Это число мы и передали в функцию «TopOrBottom» раньше. Теперь запустите ваш редактор и введите код, который расположен ниже. | И снова, мы можем назначить возвращённое значение другой строке, но можем и просто вывести его на печать. Напоминаю, что мы указываем ширину слева — 30, а справа — 10. Сумма равна 40. Это число мы и передали в функцию «TopOrBottom» раньше. Теперь запустите ваш редактор и введите код, который расположен ниже. | ||
- | Сохраните код в файл «pprint1.py» и запустите его. Должно получиться что-то похожее на текст справа вверху. | + | <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» и запустите его. Должно получиться что-то похожее на текст справа ниже. | ||
+ | |||
+ | <code> | ||
+ | +======================================+ | ||
+ | | Item 1 3.00 | | ||
+ | | Item 2 15.00 | | ||
+ | +--------------------------------------+ | ||
+ | | Total 18.00 | | ||
+ | +======================================+</code> | ||
Хоть этот пример и простой, он должен дать вам понять, как и зачем использовать функции. Теперь давайте немного углубимся и узнаем побольше о списках. Помните во второй статье цикла я впервые упомянул списки? Я лишь забыл вам сказать, что списки могут включать всё, даже другие списки. Давайте создадим список в нашей программе и заполним его так: | Хоть этот пример и простой, он должен дать вам понять, как и зачем использовать функции. Теперь давайте немного углубимся и узнаем побольше о списках. Помните во второй статье цикла я впервые упомянул списки? Я лишь забыл вам сказать, что списки могут включать всё, даже другие списки. Давайте создадим список в нашей программе и заполним его так: | ||
Строка 155: | Строка 202: | ||
itms = [['Soda',1.45],['Candy',.75],['Bread',1.95],['Milk',2.59]]</code> | itms = [['Soda',1.45],['Candy',.75],['Bread',1.95],['Milk',2.59]]</code> | ||
- | Удалите все строки, в которых вызывается Fmt(). Затем добавьте следующие (с #NEW LINE в конце) так, чтобы код стал похож на текст, написанный справа. | + | Удалите все строки, в которых вызывается Fmt(). Затем добавьте следующие (с #NEW LINE в конце) так, чтобы код стал похож на этот текст: |
+ | |||
+ | <code>itms = [['Soda',1.45],['Candy',.75],['Bread',1.95],['Milk',2.59]] | ||
+ | |||
+ | print TopOrBottom('=',40) | ||
+ | |||
+ | total = 0 #NEW LINE | ||
+ | for cntr in range(0,4): #NEW LINE | ||
+ | print Fmt(itms[cntr][0],30,itms[cntr][1],10) #NEW LINE | ||
+ | total += itms[cntr][1] #NEW LINE | ||
+ | print TopOrBottom('-',40) | ||
+ | print Fmt('Total',30,total,10) #CHANGED LINE | ||
+ | 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> |