PDA

Просмотр полной версии : Уроки по "Питону"



swan
04.06.2005, 19:39
Поскольку сценарии в цив4 будут скриптоваться на питоне - то данная тема будет полезна для любителей создания сценариев или обычной правки игры "под себя"

Оглавление</a>

Урок 1 - Что такое Питон и как его установить (#l1)

Урок 2 - Однострочные - очень простые программы (#l2)

Урок 3 - Более сложные программы и переменные (#l3)

Урок 4 - Циклы, Циклы, Циклы, Циклы, Циклы (#l4)

Урок 5 - Многофункциональный! (#l5)

Урок 6 - Кортежи (матем.), списки и словари (#l6)[/dohtml]

swan
04.06.2005, 19:41
<a name="l1">Питон полностью поддерживает кириллицу</span> - соответственно сделать русификацию игры или сценариев/модов будет несложно - на кириллице могут быть не только значения переменных, но и их имена

[dohtml]К оглавлению (#start)

Переводчик урока - swan

swan
04.06.2005, 19:45
<a name="l2">Урок 2 - Однострочные - очень простые программы</span></a>

Итак, мы установили Python, и теперь можем заняться програмированием.
Но пока только простейшим програмированием. Python позволяет очень легко запускать однострочные программы. Давайте попробуем это!

В меню пуск найдите группу Python`а и запустите питон пунктом "IDLE" (командная оболочка Питона)
Если ничего не произошло, то нажмите Пуск->Выполнить (Start->Run) и в открывшемся окне введите:


python


Это запустит "командную оболочку".

Теперь вы находитесь в "командной оболочке". Введите следующий код и нажмите enter: (не нужно вводить ">>>", так как это будет уже введено)



>>> print "Hello, World!"


Вы только что написали первую программу, которая выводит на экран выражение "Hello, World" :D. "Командная оболочка" немедленно компилирует и запускает всё, что вы написали.
Это весьма полезно, при испытании таких вещей как определение переменных, а затем тестирование уравнений. Но об этом пойдёт речь в следующих уроках.

Теперь попробуйте ввести то, что написано жирным шрифтом. Вы должны увидеть результат, отмеченный синим цветом. Я дал пояснения в скобках.



>>> 1 + 1
2
>>> 20+80
100
>>> 18294+449566
467860
* * * *(Сложение/Additions)
>>> 6-5
1
* * * *(Вычитание/Subtraction)
>>> 2*5
10
* * * *(Умножение/Multiply)
>>> 5**2
25
* * * *(Возведение в степень/Exponential)
>>> print "1 + 2 это сумма"
1 + 2 это сумма
* * * *(Вывод написанного на экран)
>>> print "Один килобайт это 2^10 байт или", 2**10, "байт"
Один килобайт это 2^10 байт или 2**10 байт
* * * *(В предложении вы можете использовать переменные. Запятая служит для отделения каждой секции.)
>>> 21/3
7
>>> 23/3
7
>>> 23.0/3.0
7.6666...
(Деление/division. Если указаны целые числа, то и ответ будет целым, а если указанs дробные числа, то и ответ будет дробным (если указfано хоть одно дробное число, то тогда ответ будет дробным))
>>> 23%3
2
>>> 49%10
9
* * * *(Остаток от деления/remainder from a division)


Как вы видите сначала идёт код, а затем результат. Потом идут мои пояснения. Это основные команды Питона и пояснения, что эти команды делают.
Вот таблица, в которой представлены простейшие команды питона.



Команда * Название * Англ. название *Пример * Результат
*+ * * * Сложение * Addition * * * *4+5 * * *9
*- * * * Вычитание *Subtraction * * 8-5 * * *3
** * * * Умножение *Multiplication *4*5 * * *20
*/ * * * Деление * *Division * * * *8/2 * * *4
*% * * * Остаток * *Remainder * * * 15/4 * * 3
*** * * *Степень * *Exponential * * 2**3 * * 8


Запомните, что операторы в питоне называются также, как в математике:



Название *Англ. название *Оператор

Скобки * *parentheses * * ()
Степень * exponents * * * **
Умножение multiplication **
Деление * division * * * *\
Остаток * remainder * * * %
Сложение *addition * * * *+
Вычитание subtraction * * -


Вот примеры, которые бы вы возможно захотели рассмотреть:



>>> 1 + 2 * 3
7
>>> (1 + 2) * 3
9


В первом примере сначала будет произведено действие "2*3" и затем прибавление 1. Это так, потому что умножение приоритетнее сложения.
Во втором примере сначала будет выполнено сложение "1+2", а потом умножение результата на три. Действия в скобках приоритетнее действий вне скобок, поэтому сначала выполнится сложение в скобках, и только потом умножение.

Также запомните, что все действия выполняются слева направо, если нет скобок!
Посмотрите эти примеры:



>>> 4 - 40 - 3
-39
>>> 4 - (40 - 3)
<span style=\'color:blue\'>-33



В первом примере сначала из 4 было вычтено 40, а потом 3
Во втором примере сначала из 40 было вычтено 3, а потом из 4 была вычтена полученная разность.

Последнее, что вам нужно знать для перехода к многострочным программам - коментарий. Наберите следующее:



>>>#Я коментарий, вы мне верите? %)


Коментарий, это часть кода, которая не выполняется и просто напросто игнорируется интепретатором. В питоне вы делаете что-либо комментарием ставя символ решётки (#) перед этим.
Решётка комментирует всё после себя на этой строчке. Вы можете набрать следующий код:


>>> print "Еда очень вкусная" #съешь её
Еда очень вкусная
* * * *(нормальный результат, без отображения коментария)
>>> print "Еда очень вкусная" съешь её
* * * *(Вы получите сообщение об ошибке, о том, что компьютер не знает что означает "съешь её")

Коментарии очень важны для другого програмиста, который будет читать ваш код, но не для компьютера. Например объяснение какого-либо действия или строчки будет очень полезны другому програмисту.
Также иногда бывает нужно отключить какую-то часть программы, для этого тоже можно закоментировать ужные строчки.

Всё, На этом урок 2 закончен. На следующем уроке мы познакомимся с многострочными программами а также научимся сохранять нашу программу в файл, чтобы мы смогли отправить её вашим друзьям :punk:

К оглавлению (#start)

Переводчик урока - DelSt

swan
04.06.2005, 19:46
<a name="l3"Урок 3 - Более сложные программы и переменные</span></a>

Хорошо – мы можем создать однострочные программы. НУ И ЧТО? Вы хотите послать свои программы другим людям, чтобы они могли использовать их (программы), не зная как их писать

Написание программ для Питона очень просто. Для этого можно использовать блокнот или вордпад. Давайте откроем блокнот и напишем следующее:


#Пример программы.
print "Mary had a little lamb,"
print "it&#39;s fleece was white as snow;"
print "and everywhere that Mary went",
print "her lamb was sure to go."
Пишите это точно также как указано, с соблюдением всех запятых. Сохраните файл как “mary.pyw” и удостоверьтесь, что блокнот не добавляет в конце расширение .txt, для этого нужно указать ему сохранять как “any file”. Если вы не уверены, что он не дописал расширение .txt к файлу – выключите опцию «Скрывать известные расширения файлов» в проводнике Windows.

Теперь запустите «программную оболочку» Питона (должна быть в меню «Пуск»), выберите “File > Open”, найдите файл mary.pyw и откройте его. Если вы не можете найти этот файл, то выберите опцию “All files” в меню. Откроется новое окно, в котором будет написан текст вашей программы. Для запуска программы выберите в меню “Run > Run Module” или нажмите F5. Ваша программа запустится в основном экране Питона именуемом шеллом (Python shell) и покажет следующее:

Mary had a little lamb,
it&#39;s fleece was white as snow;
and everywhere that Mary went her lamb was sure to go.

Вы можете также запустить программу из командной строки, например MS-DOS
Откройте командную строку и наберите cd xx\yy (где xx\yy – путь к папке с файлом .pyw) затем наберите ‘python mary.py ‘ и ваша программа запустится из командной строки

Более комплексная программа:

Теперь рассмотрим переменные. Откройте «командную оболочку» и выберите в меню “File > New Window” – откроется новое окно и введите в него следующий код: (можно методом copy-paste, но проверьте на точность синтаксиса)


#Демонстрация переменных
print "This program is a demo of variables"
v = 1
print "The value of v is now", v
v = v + 1
print "v now equals itself plus one, making it worth", v
v = 51
print "v can store any numerical value, to be used in other places later."
print "for example, in a sentence. v is now worth", v, "which is a prime number."
print "v times 5 equals", v*5
print "but v still only remains", v
print "to make v five times bigger, you would have to type v = v * 5"
v = v * 5
print "there you go, now v equals", v, "and not", v / 5

Кaк Bы мoжeтe yвидeть, пepeмeнныe xpaнят вeличины, для
иcпoльзoвaния их впocлeдcтвии. Bы мoжeтe не только числа, но и тексты. Пoпpoбyйтe этy пpoгpaммy:

#назначает переменным текст и складывает его
word1 = "Good"
word2 = "Morning"
word3 = "to you too!"
print word1, word2
sentence = word1 + " " + word2 + " " +word3
print sentence
У вас получится:

<span style=\'color:blue\'>Good Morning
Good Morning to you too!

Да, переменные могут содержать больше, чем одну букву, они могут содержать даже больше, чем числа. Здесь они содержат текст.
Как вы можете увидеть, слова могут быть сложены, чтобы сделать более длинное слово или даже предложение. Тем не менее, он не добавляет пробелов между складываемыми словами – следовательно, необходимо вкладывать пробелы отдельно, т.е. ” “ (здесь стоит один пробел между кавычками)

Очень хорошо. Теперь мы умеем делать более крупные программы и понимаем, что такое переменные. В следующем уроке мы рассмотрим, что такое операторы и как их использовать.

К оглавлению (#start)

Переводчик урока - swan

swan
04.06.2005, 19:46
<a name="l5">Урок 4 - Циклы</a>

Представте, что вам нужна программа, повторяющая чтолибо 20 раз. Что вы сделаете? Вы могли бы скопировать 2- раз нужное вам действие, но тогда вы получите очень медленную громоздкую, и нечитаемую программу.
Или же вы можете "сказать" компьютеру, чтобы он повторял это в от точки A до точки B, до того времени пока не наступит момент, когда вам нужно будет остановить действие.
Вот пример цикла на питоне:

[code]
a = 0
while a < 10:

swan
04.06.2005, 19:47
<a name="l5">Урок 5 - Многофункциональный!</a>

На прошлом уроке я сказал, что мы будем копаться в целевом программировании. Оно включает ввод данных пользователем, а ввод данных пользователем требует вещи, называемые функциями.

Что такое функции? Это небольшие подпрограммы, которые выполняют специальные действия, и которые можно включить в собственную, большую программу. Это экономит ваше время и усилия, когда нужно указать компьютеру, что делать в стандартных ситуациях, к примеру, когда пользователь что-то вводит с клавиатуры.

Устройство функции очень просто. Вы вводите в неё какие-то данные (input), а затем она сама выдаёт некоторое выходное значение (output). Понятно? Вот общая форма записи функции:

<div style="margin:20px; margin-top:5px">
<div class="smallfont" style="margin-bottom:2px">Code:</div>
<pre class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:50px; overflow:auto"><div dir="ltr" style="text-align:left;">
function_name(parameters)</div></pre>
</div>


Вот видите, как просто?
Имя функции (Function_name) указывает, какую функцию вы хотите использовать. Например, функция raw_input, которая будет первой функцией, которую мы будем использовать.
Параметры (Parameters) указывают функции, что выполнять. Например, в функции, умножающей данное число на 5, содержимое параметров (parameters) указывает функции, какое именно число нужно умножить на 5. Поместите в параметры число 70, и функция выполнит действие 70 x 5.

Так, всё это, конечно, хорошо, что программа может умножать число на 5, но как она нам это сможет показать? Ваша программа должна видеть результаты происходящего, чему равняется 70 x 5, или увидеть, что где-то есть проблема (например, вы написали буквы вместо числа). Как функция показывает, что она делает?

Ну, на самом деле, когда компьютер запускает функцию, он на самом деле не видит её имя, а только её результат. Давайте назовём функцию, умножающую число на 5, multiply(). Вы пишете число, которое хотите умножить, в скобках. Итак, если вы напишете:

<div style="margin:20px; margin-top:5px">
<div class="smallfont" style="margin-bottom:2px">Code:</div>
<pre class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:50px; overflow:auto"><div dir="ltr" style="text-align:left;">
a = multiply(70)</div></pre>
</div>



Компьютер на самом деле увидит вот что:

<div style="margin:20px; margin-top:5px">
<div class="smallfont" style="margin-bottom:2px">Code:</div>
<pre class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:50px; overflow:auto"><div dir="ltr" style="text-align:left;">
a = 350</div>
</div>

(P.S. не нужно набирать этот код).

Функция превращается в число, результат действий с её параметрами.

Теперь давайте попробуем это сделать с настоящей функцией и посмотрим, что будет. Функция под назваием raw_input, запрашивает пользователя что-то напечатать. Затем она превращает это в строку текста. Попробуйте вот такой код:

<div style="margin:20px; margin-top:5px">
<div class="smallfont" style="margin-bottom:2px">Code:</div>
<pre class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:114px; overflow:auto"><div dir="ltr" style="text-align:left;">
# Эта строчка сделает переменую &#39;a&#39; равной тому, что вы введёте
a = raw_input(&quot;Напечатайте что-то и оно появится на экране:&quot;)

# Эта строчка выводит значение &#39;a&#39; на экран
print a</div></pre>
</div>


Скажем, в этой программе вы написали &#39;привет&#39;, когда вас попросили что-то написать. Для копьютера эта программа будет выглядеть так:

<div style="margin:20px; margin-top:5px">
<div class="smallfont" style="margin-bottom:2px">Code:</div>
<pre class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:66px; overflow:auto"><div dir="ltr" style="text-align:left;">
a = &quot;привет&quot;
print &quot;привет&quot;</div></pre>
</div>

Помните, переменная - просто место в памяти. Для компьютера переменная &#39;a&#39; не выглядит как &#39;a&#39; - она выглядит как значение, которое вы в неё ввели. Также и функции - для компьтера они выглядят как значение, которое они возвращают.

Давайте напишем другую программу, которая будет работать как калькулятор. Теперь она будет делать кое что намного более интересное, чем предыдущая. У неё будет меню, которое будет запрашивать, что вы хотите сделать: умножить, сложить, разделить или вычесть два числа. Единственная проблема - функция raw_input превращает введённые вами символы в текст, но нам нужно, к примеру, число 1, а не символ 1 (да-да, в Питоне это разные вещи). (И не только в Питоне - прим. перев.)

К счастью, есть функция input, которая передаёт введённые данные в программу, но на этот раз в виде числа. Если вы введёте через input целое число, и поместите его в переменную, то она также будет иметь тип целого чила - её можно будет складывать, вычитать и т.д.

Итак, давайте разработаем калькулатор надлежащим образом. Нам нужно меню, которое возвращается каждый раз, когда вы выполнили действия. Другими словами,нам нужно чтобы оно зацикливалось (подсказка!!!), пока (while, большая подсказка!!!) вы говорите программе что делать, она должна выполняться.

Мы хотим сделать, чтобы команды меню работали по нажатию цифры. Мы используем функции ввода числа (input) и условный цикл.

Давайте сначала напишем простым текстом, что мы хотим сделать:

<div style="margin:20px; margin-top:5px">
<div class="smallfont" style="margin-bottom:2px">Code:</div>
<pre class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:498px; overflow:auto"><div dir="ltr" style="text-align:left;">
НАЧАТЬ ПРОГРАММУ
напечатать стартовое сообщение

Пока работает программа, делать это:
#Печатаем, какие у нас есть опции меню
print Опция 1 - сложить
print Опция 2 - вычесть
print Опция 3 - умножить
print Опция 4 - разделить
print Опция 5 - выйти из программы

спросить, какую опцию выберет пользователь
если это опция 1:
спросить первое число
спросить второе число
сложить их
вывести результат на экран
если это опция 2:
спросить первое число
спросить второе число
вычесть из первого второе
вывести результат на экран
если это опция 3:
спросить первое число
спросить второе число
умножить их
вывести результат на экран
если это опция 4:
спросить первое число
спросить второе число
разделить первое на второе
вывести результат на экран
если это опция 5:
остановить цикл

Напечатать на экране сообщение о завершении работы программы
ЗАКОНЧИТЬ ПРОГРАММУ</div></pre>
</div>



Давайте теперь запишем это в форме, понятной Питону:

<div style="margin:20px; margin-top:5px">
<div class="smallfont" style="margin-bottom:2px">Code:</div>
<pre class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:498px; overflow:auto"><div dir="ltr" style="text-align:left;">
#программа-калькулятор

#Эта переменная указывает, следует ли продолжать цикл
# 1 означает цикл, любое другое значение - остановка цикла

loop = 1

#Эта переменная хранит выбор пользователя в меню:

choice = 0

while loop == 1:
#печатаем, какие у нас есть опции
print &quot;Добро пожаловать в calculator.py&quot;
print &quot;Вы можете:&quot;
print &quot; &quot;
print &quot;1) Сложить&quot;
print &quot;2) Вычесть&quot;
print &quot;3) Умножить&quot;
print &quot;4) Разделить&quot;
print &quot;5) Выйти из программыpy&quot;
print &quot; &quot;
choice = input(&quot;Сделайте выбор: &quot;)
if choice == 1:
add1 = input(&quot;Прибавить это: &quot;)
add2 = input(&quot;к этому: &quot;)
print add1, &quot;+&quot;, add2, &quot;=&quot;, add1 + add2
elif choice == 2:
sub2 = input(&quot;Вычесть это: &quot;)
sub1 = input(&quot;из этого: &quot;)
print sub1, &quot;-&quot;, sub2, &quot;=&quot;, sub1 - sub2
elif choice == 3:
mul1 = input(&quot;Умножить это: &quot;)
mul2 = input(&quot;на это: &quot;)
print mul1, &quot;*&quot;, mul2, &quot;=&quot;, mul1 * mul2
elif choice == 4:
div1 = input(&quot;Разделить это: &quot;)
div2 = input(&quot;на это: &quot;)
print div1, &quot;/&quot;, div2, &quot;=&quot;, div1 / div2
elif choice == 5:
loop = 0

print &quot;Спасибо, что использовали calculator.py!&quot;</div></pre>
</div>


Ура! Вот это программа! Вставьте её текст в среду Питон, сохраните как &#39;calculator.py&#39; и запустите. Прогоните её несколько раз, попробуйте все опции, вводя целые цисла (без запятой), дробные (с цифрами после запятой, в программировании они называются числами с плавающей запятой). Попробуйте написать текст и увидите, как в прорамме вызывается ошибка и она перестаёт работать. Позднее я объясню, что там происходит.

Итак, всё это, конечно, хорошо, что мы можем использовать готовые функции, но как нам самим написать свою функцию, чтобы сэкономить время, и чтобы затем её использовать в других программах? Вот где приходит на помощь оператор def. (Оператор - это просто что-то, что указывает Питону, что нужно сделать, к примеру, опреатор &#39;+&#39; указывает Питону сложить числа, оператор &#39;if&#39; указывает сделать что-то, если выпольняются определённые условия и т.д.)

Вот как работае оператор &#39;def&#39;:

<div style="margin:20px; margin-top:5px">
<div class="smallfont" style="margin-bottom:2px">Code:</div>
<pre class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:178px; overflow:auto"><div dir="ltr" style="text-align:left;">
def function_name(parameter_1_variable,parameter_2_variable):
{Вот код функции}
{ещё код функции}
{ещё код функции}
return {текст или число, возращающемое в основную программу}

{Этот код уже не отностися к функции}
{потому что он без отступа}
#Не забывате ставить двоеточие &quot;:&quot; в конце строчки, начинающейся на &#39;def&#39;</div></pre>
</div>



Фунции выполняются абсолютно независимо от основной программы. Помните, что я говорил, что когда компьютер заходит в функцию, он видит не саму функцию, а значение, которое она возвращает? Вот цитата:

<div style="margin:20px; margin-top:5px; ">
<div class="smallfont" style="margin-bottom:2px">Quote:</div>
<table cellpadding="6" cellspacing="0" border="0" width="100%">
<tr>
<td class="alt2" style="border:1px inset">

переменная - просто место в памяти. Для компьютера переменная &#39;a&#39; не выглядит как &#39;a&#39; - она выглядит как значение, которое вы в неё ввели. Также и функции - для компьтера они выглядят как значение, которое они возвращают.

</td>
</tr>
</table>
</div>



Итак, на самом деле - функция это не просто способ удобно копировать и вставлять куски кода. Она более похожа на миниатюрную программу, которой даются некоторые пераметры - затем она запускается и возвращает значение. Ваша основная программа видит только возвращаемое значение. Если функция в ходе своего выполнения выполняла множество действий, а в последней строчке было


<div style="margin:20px; margin-top:5px">
<div class="smallfont" style="margin-bottom:2px">Code:</div>
<pre class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:50px; overflow:auto"><div dir="ltr" style="text-align:left;">
return 1</div></pre>
</div>


то всё, что увидит ваша программа будет число 1, на месте, где было имя функции. Она не будет знать, что ещё делала программа.

Т.к. это по сути отдельная программа, функция не будет видеть переменных главной программы, а та не будет видеть переменных функции.


Например, вот функция, печатающая слово &quot;привет&quot; на экране, а затем возвращающая число 1234 в главную программу:

<div style="margin:20px; margin-top:5px">
<div class="smallfont" style="margin-bottom:2px">Code:</div>
<pre class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:146px; overflow:auto"><div dir="ltr" style="text-align:left;">
#Ниже описание функции
def hello():
print &#39;привет&#39;
return 1234

#А здесь функция вызывается
print hello()</div></pre>
</div>


Подумайте о последней строчке кода. Что она делает? Наберите программу (комментарии можете пропустить) и помотрите, что она делает. Результат её работы выглядит так:

<div style="margin:20px; margin-top:5px">
<div class="smallfont" style="margin-bottom:2px">Code:</div>
<pre class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:66px; overflow:auto"><div dir="ltr" style="text-align:left;">
<font color="blue">привет
1234</font></div></pre>
</div>

Так что же произошло?
1) Когда выполнялась строчка &#39;print hello&#39;, выполнилась функция &#39;hello&#39;.
2) Функция &#39;hello&#39; напечатала &quot;привет&quot; на экране, затем вернула значение 1234 в главную программу
3) Главная программа теперь видит эту строчку как &#39;print 1234&#39;, и в результате печатает &#39;1234&#39;

Вот и всё, что произошло. Помните, что главная программа даже не догадывается, что было напечатано слово &quot;привет&quot; которое мы напечатали на экране. Всё, что она видела, было число 1234, и она и вывела его на экране.

Есть ещё одна вещь, которую мы раскроем в этом (ужасно большом) уроке - передача параметров в функцию. Вспомните программу-калькулятор. Она не выглядела слегка громоздкой? Я думаю, да, так что давайте перепишем её, используя функции.

Для разработки - сначала определим все функции, используя оператор &#39;def&#39; (помните, есть такой оператор ;) ).
Затем во всей нашей программе заменим тот громоздкий код на аккуратные функции. Это позволит значительно легче разбираться в программе в дальнейшем.


<div style="margin:20px; margin-top:5px">
<div class="smallfont" style="margin-bottom:2px">Code:</div>
<pre class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:498px; overflow:auto"><div dir="ltr" style="text-align:left;">
#Программа калькулятор

#ЗДЕСЬ НЕТ ВЫПОЛНЯЕМОГО КОДА, ЛИШЬ ОПИСАНИЕ ТОГО, ЧТО МЫ БУДЕМ ДЕЛАТЬ ДАЛЬШЕ
#Здесь мы определим функции
#Эта выводит на экрам меню и запрашивает выбор пользователя
def menu():
#печатаем, какие имеются опции
print &quot;Добро пожаловать в calculator.py&quot;
print &quot;Вы можете выполнить:&quot;
print &quot; &quot;
print &quot;1) Сложение&quot;
print &quot;2) Вычитание&quot;
print &quot;3) Умножение&quot;
print &quot;4) Деление&quot;
print &quot;5) Закрыть calculator.py&quot;
print &quot; &quot;
return input (&quot;Выберите номер опции: &quot;)

#Эта складывает 2 данных числа
def add(a,b ):
print a, &quot;+&quot;, b, &quot;=&quot;, a + b

#Эта вычитает из одного числа другое
def sub(a,b ):
print b, &quot;-&quot;, a, &quot;=&quot;, b - a

#Эта умножает 2 данных числа
def mul(a,b ):
print a, &quot;*&quot;, b, &quot;=&quot;, a * b

#Эта делит одно число на другое
def div(a,b ):
print a, &quot;/&quot;, b, &quot;=&quot;, a / b

#ТЕПЕРЬ ЗАПУСКАЕТСЯ САМА ПРОГРАММА
loop = 1
choice = 0
while loop == 1:
choice = menu()
if choice == 1:
add(input(&quot;Сложить число: &quot;),input(&quot;и число: &quot;))
elif choice == 2:
sub(input(&quot;Вычесть число: &quot;),input(&quot;из числа: &quot;))
elif choice == 3:
mul(input(&quot;Умножить число: &quot;),input(&quot;на число: &quot;))
elif choice == 4:
div(input(&quot;Разделить число: &quot;),input(&quot;на число: &quot;))
elif choice == 5:
loop = 0

print &quot;Спасибо, что воспользовались программой calculator.py!&quot;
#ТЕПЕРЬ ПРОГРАММА ЗАКОНЧИЛА ВЫПОЛНЕНИЕ</div></pre>
</div>



Первоначальная программа имела 34 строки кода. В новой их 35! Она чуть-чуть длиннее, но если разобраться, гораздо проще.

Вы объявили все функции сверху. Это не чаcть программы - это просто несколько маленьких программок, которые вы вызовите позднее. Вы можете даже заново использовать их в других программах, если не хотите заново рассказывать компьютеру как складывать и вычитать.

Если вы взглянете на главную часть программы (между строками &#39;loop = 1&#39; и &#39;print &quot;Thankyou for...&quot;&#39;), она окажется размером всего 15 срок. Выходит, если писать эту программу таким образом, нужно написать всего около 15 строк вместо 34, если не использовать функции.

Наконец, небольшое отступление, я объясню, что означате строчка &#39;add(input(&quot;Сложить число: &quot;),input(&quot;и число: &quot;))&#39;.
Я хотел поместить всё в одну строку с как можно меньшим числом переменных. Помните, как выглядят функции для главной программы? Как значение, которое они возвращают. Если вы ввели числа 2 и 3, главная программа увидит:

<div style="margin:20px; margin-top:5px">
<div class="smallfont" style="margin-bottom:2px">Code:</div>
<pre class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:50px; overflow:auto"><div dir="ltr" style="text-align:left;">
add(2,30)</div></pre>
</div>




Запустится функция сложения. У неё нет опрератора &#39;return&#39; - она не возвращает ничего в главную программу. Она просто складывает два числа и выводит сумму на экран, а главная программа ничего этого не видит.

Вместо такой записи &#39;(input(&quot;Сложить число: &quot;),input(&quot;и число: &quot;))&#39; в качестве параметров функции сложения можно использовать переменные
Например:

<div style="margin:20px; margin-top:5px">
<div class="smallfont" style="margin-bottom:2px">Code:</div>
<pre class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:82px; overflow:auto"><div dir="ltr" style="text-align:left;">
num1 = 45
num2 = 7
add(num1,num2)</div></pre>
</div>



Вы можете даже вставлять числа прямо в функцию:

<div style="margin:20px; margin-top:5px">
<div class="smallfont" style="margin-bottom:2px">Code:</div>
<pre class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:50px; overflow:auto"><div dir="ltr" style="text-align:left;">
add(45,7)</div></pre>
</div>



Это потому, что единственное, что видит функция - это величины принимаемых параметров. Эти величины вводятся в переменные, которые упомянуты при объявлении функции &#39;add&#39; (строчка &#39;def add(a,b)&#39; ). Функция затем использует эти параметры при выполнении своей работы.

Вкратце:
*) Единственное, что функция видит в главной программе - это параметры
*) Единственная вещь, которую главная программа видит в функции - это возвращаемые значения

Уфф! Какой сногсшибательный урок!!! Но мы всё-таки прошли его! Отлично!


<table width="100%" border="0">
<tr>
<td width="50%"><div align="left">К оглавлению (#start)</div></td>
<td width="50%"><div align="right">Английская версия урока ("") </div></td>
</tr>
</table>


Переводчик урока - General

swan
04.06.2005, 19:48
<a name="l6">Урок 6 - Кортежи (матем.), списки и словари</a>

Ваш мозг ещё не переварил содержимое предыдущего урока? Не унывайте – этот урок будет довольно простым. Мы перейдем к более глубокому виду переменных – массивам.

Представьте, что переменные содержат один бит информации. Они могут вырвать (не только на обсуждении) эту информацию из любой точки. Их бит информации может измениться в переменных в любое время – большие, чем те, в которых они созданы – они могут хранить информацию, которую можно изменить в нужное время.

Но что, если вам нужно создать длинный список информации, который не изменяется со временем? Скажем, например имена месяцев года.

Или может быть длинный список информации, который изменяется со временем? Скажем, например имена всех ваших кошек. У вас могли появиться новые кошки или умереть старые.

Как насчет телефонной книги? Вы имеете набор имен, к которым прилагаются номера. Как вы это организуете?

Для этих трех проблем Питон предлагает три различных варианта решения – кортежи, списки и словари.

Списки – списки значений. Каждое значение имеет свой номер – первое – 0, второе – 1, третье – 2 и т.д. Вы можете удалять значения из списка и добавлять новые значения к концу. Например, имена ваших кошек

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

Словари подобны тому, что их название предлагает - словарь. В словаре, Вы имеете &#39;индексные&#39; слова и для каждого из них определение. В питоне, слово называют &#39;ключом&#39;, а определение &#39;значением&#39;. Значения в словаре не перечисляются - они не находятся в каком либо определенном порядке, ни один - ключ не означает ту же самую вещь. Вы можете добавить, удалить, и изменить значения в словарях. Например. Телефонная книга.

Теперь мы знаем, что они делают. Давайте рассмотрим их использование:

КОРТЕЖИ

Кортежи очень удобно создавать. Вы даете своему кортежу имя, после чего идет список его значений. Например, месяцы года:


months = (&#39;January&#39;,&#39;February&#39;,&#39;March&#39;,&#39;April&#39;,&#39;May&#39;,&#39;June&#39; *,\
&#39;July&#39;,&#39;August&#39;,&#39;September&#39;,&#39;October&#39;,&#39;November&#39;,&#39; *December&#39;)
Обратите внимание, что ‘\’ обозначает перенос значений на следующую строку – это облегчает рассмотрение структурности кортежа.

Технически вы не обязаны помещать круглые скобки вокруг списка, но в некоторых случаях вызывает ошибки

Вы можете оставлять пробелы между запятых, если вам такой вариант больше нравится

Питон расставляет значения в порядке, указанном вами, начинающемся с нуля. Тогда при предыдущем примере у вас получится следующее:


Index *Value
0 * * January
1 * * February
2 * * March
3 * * April
4 * * May
5 * * June
6 * * July
7 * * August
8 * * September
9 * * October
10 * *November
11 * *December
Мы знаем, что, можно довольно легко вспомнить значения из кортежа. Они - точно такие же, как перечисляемые переменные. Вот - пример:

#Сообщение компьютеру имен месяцев:
months = (&#39;January&#39;,&#39;February&#39;,&#39;March&#39;,&#39;April&#39;,&#39;May&#39;,&#39;June&#39; *,\
&#39;July&#39;,&#39;August&#39;,&#39;September&#39;,&#39;October&#39;,&#39;November&#39;,&#39; *December&#39;)

#Вывод января на экран:
print months[0]

#Вывод октября на экран:
print months[9]

#Создание переменной и присвоение ей значения августа
x = months[7]
print x

#помещение зимних месяцев (южного полушария) в отдельную переменную:
winter = months[5:8]
print winter

СПИСКИ

Списки очень похожи на кортежи. Они модифицируемы (изменяемы – как обычно говорят программисты), так, что их значения могут быть изменены. Наиболее чаще используются списки, нежели кортежи.

Списки определяются аналогично кортежам. Например у вас есть пять кошек: Tom, Snappy, Kitty, Jessie and Chester. Чтобы поместить их в список вам нужно написать такую строку:

cats = [&#39;Tom&#39;, &#39;Snappy&#39;, &#39;Kitty&#39;, &#39;Jessie&#39;, &#39;Chester&#39;]
Как Вы видите, код аналогичен кортежам, за исключением того, что все значения помещаются между квадратными, а не круглыми скобками. Кроме того, в кортежах не было пространства после запятой.

Возврат значений из списков аналогичен кортежам – например вам нужно вывести имя вашей третей кошки:

print cats[2]
Вы можете также вставить диапазон значений. Например вывод имен первых трех кошек будет выглядеть как print cats [0:2]

Добавить новое значение, например у вас появилась новая кошка по имени Catherine можно следующим образом:

cats.append(&#39;Catherine&#39;)
[продолжение следует]

Переводчик урока - swan

swan
04.06.2005, 19:48
[занято]

swan
04.06.2005, 19:49
[занято]

swan
04.06.2005, 19:50
[занято - 10]

swan
04.06.2005, 19:50
[занято]

swan
04.06.2005, 19:51
[занято]

swan
04.06.2005, 19:51
[занято]

Civilizator
15.09.2005, 02:46
Originally posted by swan*4.06.2005 - 19:51
[занято]
[занято]
[занято]
[занято]
[занято]
:shock: И чтой-то было?

Гость
15.09.2005, 09:05
это зарезервированные места для [продолжение следует], т.е. для Уроков, иначе посты будут слишком большие

DelSt
15.09.2005, 14:19
Смотреть первый пост - найден очень даже приличный учебник по питону...дальнейший перевод осуществляться не будет, НО - если найдётся энтузиаст, который захочет доперевести - пожалуйста :yes:

GooRoo
01.11.2005, 16:34
Вчера полчаса потратил на краткий обзор *.py файлов в циве. Огромные(!) возможности, уже подумываю о том, чтобы поставить среду, купить книжку, скачать туториал и что-нибудь поменять под себя в интерфейсе ;)

Внимание! :umnik: У меня солжилось впечатление за этот вчерашний обзор, что читерить можно практически безгранично (в плане подсматривать, а не вносить изменения). Вопрос, есть ли какие-то встроенные в игру ограничения, кроме морально-этических качеств игроков?

DelSt
01.11.2005, 16:50
GooRoo
Да, много чего заскриптовано на питоне.
Да, читерить world bilder`ом можно практически безгранично. Я тут ради теста добавил себе десяток самолётов. Разведал ими почти всю карту и в тот же ход добавил пару модернов, и вынес соседей :whistle:

GooRoo
01.11.2005, 16:59
Originally posted by DelSt*1.11.2005 - 17:50
GooRoo
Да, много чего заскриптовано на питоне.
Да, читерить world bilder`ом можно практически безгранично. Я тут ради теста добавил себе десяток самолётов. Разведал ими почти всю карту и в тот же ход добавил пару модернов, и вынес соседей :whistle:
В мултьиплеере WorldBuilder отключён, значит можно и в сценарии отключить, наверное. (Я всё клоню в сторону соревнований). Хотя где можно отключить, там можно будет и включить.
И ещё. Я имел в виду то, что могу так свои локальные *.py пропадчить, что буду видеть больше, чем положено, не привлекая ничего стороннего. Например, хоп и вылез попап "Внимание! Вашингтон построит Пирамиды быстрее вас на 2 хода" ;)

DelSt
01.11.2005, 17:04
GooRoo
на корову мы не играем, а значит никто не будет этим зниамться.

GooRoo
01.11.2005, 18:12
Originally posted by DelSt*1.11.2005 - 18:04
GooRoo
на корову мы не играем, а значит никто не будет этим зниамться.
Согласен. Но я сейчас не рассматриваю моральные качества игроков. Мне просто интересно, какие механизмы fair-play заложили создатели.

Гость
01.11.2005, 18:20
вы в игре credits почитайте :bye: в тестерах половина civfanatics.com и половина apolyton.net
потому думаю, что механизмы есть

DelSt
01.11.2005, 18:22
Originally posted by GooRoo*1.11.2005 - 18:12
я сейчас не рассматриваю моральные качества игроков. Мне просто интересно, какие механизмы fair-play заложили создатели.
Даже если никаких изменений не последует, не стоит забывать, что эти недостатки призван убрать форум Fair Play (http://fp.civfanatics.ru/) :yes:
[quote][b]вы в игре credits почитайте

Гость
01.11.2005, 18:28
>> Да вот ни с civfanatics.ru, ни с civru.com там никого нету
и не будет :secret: издатель под юрисдикцией США, тестеров тоже взяли по принципу подчинённости юрисдикции - чтобы контракт юридически верный заключить
гоню тебя в штаты учиться, а ты всё я "в новосибирск, я в новосибирск" :biglol: вот и будешь затем об утерянных возможностях рассуждать :umnik: перед внуками

GooRoo
01.11.2005, 20:01
Здесь (http://www.python.ru/files/book-ods.pdf) что-то есть по Питону. Пока не читал, но внушает доверие. Как найду время и прочитаю, скажу, что это за книга.

DelSt
01.11.2005, 20:04
Originally posted by GooRoo*1.11.2005 - 20:01
Здесь (http://www.python.ru/files/book-ods.pdf) что-то есть по Питону. Пока не читал, но внушает доверие. Как найду время и прочитаю, скажу, что это за книга.
Читани первый пост ;)
Из-за этого учебника мы перестали переводить уроки :shock:

-=Mr.Yzsd=-
01.11.2005, 21:22
Originally posted by DelSt*1.11.2005 - 17:04
GooRoo
на корову мы не играем, а значит никто не будет этим зниамться.
просто лол если вы считаете что читирят что б получить корову :biglol: :biglol: :biglol:
читерство оно само по себе многим доставляет радость ) правд если это будет слишком просто то "нормальные" читеры для которых читерство своего рода искусство вряд ли будут этим заниматься ) зато найдется толпа тех, кому просто захочется отомстить вам за прошлую игру, поиздеваться над нормальными стараниями других или просто кому ***** делать.
все имхо конечно :whistle:

Гость
01.11.2005, 21:28
-=Mr.Yzsd=-
ты, видимо, не в курсе - здесь уже давно проводятся турниры и здесь уже давно действуют правила чести
рассуждения о природе читерства, о вероятности читерства не приветствуются

Пет
02.11.2005, 05:49
Во-первых, сообщение Свана с сайта :bye:
Честным турнирам по Civ 4 БЫТЬ!
Насколько стало известно из беседы с Solver&#39;ом сейвы будут не скриптованными, а кодированными, что обеспечит защиту от "незаметного" читерства - это означает, что без вмешательства специальных программ, которые оставляют за собой какие-либо определяемые следы, пририсовать себе пару лишних золотых или лишнего юнита будет невозможно, что обеспечит честность турниров ГП, НР и др.
Во-вторых, я повторюсь: читеры - это те, кто пришёл на турнир только один раз. Это ненастоящий цивилизатор, а настоящему цивилизатору в первую очередь важен сам процесс игры. ;) Читеры если и пошалят один раз, то вскоре исчезнут, как правило, на совсем. Да к тому же практика показывает, что обманщиков и подлецов видно сразу по мелочам.

DelSt
02.11.2005, 10:18
Пет
Сван писал это, когда ещё не знал, что будет world builder!
Он боялся, что формат сейвов будет открытым, и когда узнал, что он всё таки будет кодирован, то поспешил сделать такое заявление. Имхо никто не ожидал такой подлянки со стороны фираксиса (в виде world builder`а) :shock:

Разделить чтоли тему - на "Уроки по питону" и на "Уроки по читерству" :biglol:

Пет
02.11.2005, 10:55
про worldBuilder было известно ещё до появления на нашем форуме Сольвера. :yes: В пререлизе мы писали, что будет такая возможность. Ты, видать, внимание не на самом тексте заострял, а на моих ошибках и опечатках. :biglol:
Уже потом появился Сольвер и побеседовал со Сваном :bye:

civsims
09.11.2005, 13:29
для GooRoo и DelSt. Если так хорошо разбираетесь в языке Питон то помогли бы остальным, кто захочет, разобраться в структуре ЦИВ4.

"Я имел в виду то, что могу так свои локальные *.py пропадчить, что буду видеть больше, чем положено, не привлекая ничего стороннего. Например, хоп и вылез попап "Внимание! Вашингтон построит Пирамиды быстрее вас на 2 хода" GooRoo.
А что сдесь плохого? Разве информативность и аналитика в такой глобальной игрушке ненужна. Кстати аналитики и наглядности как раз в ЦИВ4 и не хватает. Советники в игрушке должны советовать, выдавать аналитику как лучше играть, что делать как лучше прийти к финишу первым, а там в окошках просто текущая статистика игры, бред!

Я только за "читерство" такого плана!

civsims
09.11.2005, 13:35
На их циве появилась такая заметка от Gingerbread Man:

Хотите знать, как получить документацию каждого отдельного класса в Цивилизации IV библиотек питона?

To create this file, go to <install directory>\Assets\Python and open up CvEventManager.py. Search for "def onInit" (without the quote marks) replace this:

Code:
def onInit(self, argsList):
&#39;Called when Civ starts up&#39;
CvUtil.pyPrint( &#39;OnInit&#39; )

with this:

Code:
def onInit(self, argsList):
&#39;Called when Civ starts up&#39;
# for PythonExtensions Help File
PythonHelp = 1 # doesn&#39;t work on systems which haven&#39;t installed Python
# dump Civ python module directory
if PythonHelp:
import CvPythonExtensions
helpFile=file("CvPythonExtensions.hlp.txt", "w")
sys.stdout=helpFile
import pydoc
pydoc.help(CvPythonExtensions)
helpFile.close()
sys.stderr=CvUtil.RedirectError()
sys.excepthook = CvUtil.myExceptHook
sys.stdout=CvUtil.RedirectDebug()
# END
CvUtil.pyPrint( &#39;OnInit&#39; )

(там дана ссылка на файл)
может прокоментируете?

DelSt
09.11.2005, 15:09
civsims
Читерство не обсуждаемо на нашфанатиках.
На счёт замечания- не знаю

mute
10.11.2005, 23:59
во, на самом деле заметка оч. нужная, по крайней мере лично для меня :)
просто описание части функций создатели цивы не выложили в SDK и многие вещи нельзя было изменить :)
ща гляну, что там да как :)))

а так дока тут:
http://civilization4.net/files/modding/PythonAPI/

mute
11.11.2005, 00:21
а-а-а-а. наконец-то теперь хоть есть дока как использовать вшитие в длл функции :)

Civilizator
11.11.2005, 11:17
Originally posted by Пет*2.11.2005 - 06:49
..... читеры - это те, кто пришёл на турнир только один раз. Это ненастоящий цивилизатор, а настоящему цивилизатору в первую очередь важен сам процесс игры. ;) ......
Золотые слова Пет :yes: :biglol: полностью подписываюсь :yes:

akasoft
15.11.2005, 20:47
mute , от CyTranslator() дока лекарства не даёт.

Открытие имён методов и их параметров не даёт описаний их назначения и правил применения.