Python для начинающих мододелов World of Tanks

description-9135796 Разбор языка Python для начинающих мододелов World of Tanks и не только.

В связи с частыми вопросами по поводу внесения изменений в Python-файлов игры World of Tanks, хочу вам просто пояснить, что бесплатных курсов по обучению языку я не открывал. «Как сделать то-то или то-то на Питоне» — постоянно пишут и спрашивают в личных сообщениях в социальных сетях. С одной стороны я понимаю таких игроков, потому что касательно Питона и World of Tanks обычно никто и нигде ничего не объясняет и подпольщики держут это в секрете от начинающих мододелов и особо никому не помогают разобраться. Но и я не в состоянии каждому что-то объяснять…

Итак, вы не знаете что такое Python и хотите его изучить, чтобы разбираться и читать исходный код py-файлов. Если нет, то дальше читать вам не стоит. Я могу лишь дать общие представления об установке и выводу результата простейшей команды. Все остальное вам нужно делать самим. Очень рекомендую к просмотру или к посещению курсы «Специалиста», там работают толковые люди. Как там у них по Питону не знаю, но лично с большим удовольствием посмотрел ради интереса видеокурс по PHP, остался очень доволен.

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

Сам язык назван в честь Монти Пайтона, так что никакого отношения к змее он не имеет. В отличие от Си, Питон не компилируемый язык, то есть код исполняется построчно по мере обработки его интерпритатором. Да, есть возможность компиляции PY файлов в так называемые PYC файлы (скомпилированные), широко используемые в World of Tanks, но это другая история. Интересный факт: марсоход Curiosity, что сейчас бегает по Марсу, по большей части программировался именно на Питоне.

Чтобы установить интерпритатор языка Питон (правильно Пайтон) на Windows, нужно скачать устновщик с оф. сайта python.org — заходим в раздел Downloads, выбираем последнюю версию установщика из семейства вторых (Python 3 устанавливать не нужно). Сейчас это Python 2.7.6. Кстати, на текущий момент патча 0.9.0, WoT использует версию 2.7. Если у вас 64-битная Windows, то скачиваем Windows X86-64 MSI Installer (2.7.6). После скачивания, запускаем установщик и проводим полную установку интерпритатора, причем, путь установки (C:\Python27) рекомендуется не изменять. После установки, все файлы с разрешением «py» поменяют иконку.

Что еще немаловажно, не ставьте в свойствах C:\Python27\python.exe «запуск от имени администратора» — в некоторых системах это будет приводить к несрабатыванию запуска экзешника. Если вы сидите на Linux, то там Python уже встроен и доступен из консоли. Но я буду говорить только о Windows, чтобы было меньше текста.

Python и NotePad++

Существует достаточно сред разработки, но это все потом, начинать лучше с продвинутого блокнота (про встроенный в Windows забудьте), предварительно настроив его. Если у вас его нет, скачайте и установите NotePad++ последней версии.

  1. Обязательно при создании нового файла меняйте кодировку в блокноте на UTF-8 (Кодировки -> преобразовать в UTF-8), это очень важно, затем уже сохраняйте свой PY файл.
  2. Заходим в Опции -> Настройки -> Настройка Табуляции -> ставим галочку «Заменить пробелом», размер должен быть равен 4.
  3. Для удобства: заходим в Плагины -> Plugin Manager -> Show Plugin Manager -> после обновления списка выбираем Python Script -> Install и перепусаем блокнот.
  4. Все остальные настройки по своему удобству.

Создайте в любом месте папку для своих тестов в изучении, например у меня это H:\Python. Создайте там «Новый текстовый документ» и откройте его в редакторе NotePad++. Преобразуйте кодировку в UTF-8 и сохраните как test.py.

Несколько правил Питона

Собственно, как вы уже поняли, несколько важных правил при программировании на Пайтоне:

  • В названиях файлах и папок использовать лишь символы английского языка, цифры или знак подчеркивания.
  • В названиях файлах и папок не рекомендуется использовать пробелы.
  • Сохранять файлы PY нужно только в кодировке UTF-8, то есть в Юникоде (Python 3 работает уже только с Юникодом).
  • Нужно соблюдать правила оформления блоков кода, забыв про классическую табуляцию. В нашем случае табуляция автоматически заменяется 4 пробелами.
  • В конце кода каждого файла желательно оставлять пустую строку, это не обязательно, но желательно.

Простейший пример Python скрипта

Сохраните эту заготовку и начинайте код любого файла такими строками:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

Первая строка говорит системе, что для запуска программы нужно использовать интерпретатор Python. Вторая, понятно для чего.

Короче говоря, разберем примитивный пример, листинг 1:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

X = 2
Y = X*5
print u"Y = ", Y

Разберем кто есть Ху:

  1. X = 2 — создаем переменную и присваем ей число 2.
  2. Y = X*5 — создаем переменную и присваем ей произведение, полученное после умножения X на 5. Другими словами, Y равен результату X умножить на 5.
  3. print u»Y = «, Y — конструкция print позволяет нам вывести на экран, например, результат вычисления или любой текст, в нашем случае первая честь до запятой это символьная строка. Здесь мы выводим просто текст «Y = «, далее идет вывод значения переменной Y. Другими словами, print Y выведет просто число 10.

Есть несколько вариантов запуска этой программы, разберу два простейших.

Первый :

В NotePad++ открываем Плагины -> Python Script -> Show Console. Если вы установили Питон и плагин Python Script, то вы увидете такую хрень:


. | Увеличение кликом

Начинаем вбивать в эту консоль наш пример и смотрим результат:


. | Увеличение кликом

На самом деле так никто не делает, более серьезный способ приведен ниже.

Второй:

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

Открываем командную строку Пуск -> Служебные Windows -> Командная строка, либо, если не можете найти, открываем «Мой Компьютер» и в адресную строку вбиваем C:\Windows\System32\cmd.exe и жмем Enter.

Открылось ? Вбиваем туда следующее:

cd c:\python27
python.exe h:\python\test.py

Результат:


Результат запуска test.py.

Разберем что мы сделали:

  1. cd c:\python27 — переходим в директорию, куда установлен у вас Питон.
  2. python.exe h:\python\test.py — говорим системе, что нам нужно запустить файл h:\python\test.py при помощи python.exe. Путь к файлу test.py нужно указывать абсолютный, как в примере.

Усложним код, листинг 2:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

print u"Hello, tankman"

yourname = raw_input(u"What is your name ?")

age = u"And what is your age ?"

yourage = raw_input(age)

print u"My name is ", yourname, u"! I am ", yourage, u" years old"

Прежде чем показать результат работы скрипта, команда raw_input выводит текст, что вы ей задали и ждет вашего ответа с нажатием клавиши Enter. В нашем примере raw_input вначале выводит вопрос о вашем имени.

Результат отработки:


Простейший пример на Питоне.

Разбор кода:

  1. print u»Hello, tankman» — выводит текст. Надо сказать, что можно написать и так: print «Hello, tankman», но лучше делать как в примере.
  2. yourname = raw_input(u»What is your name ?») — создает переменную yourname, которой присвоена команда на вывод текста с ожиданием ввода со стороны пользователя.
  3. age = u»And what is your age ?» — создаем переменную age и присваем ей текст.
  4. yourage = raw_input(age) — создаем переменную yourage и присваем ей буквально тоже самое, что и во втором шаге. В этом случае я использовал несколько иной подход, здесь можно понять в raw_input можно класть не только текст, как таковой, но и значение другой переменной.
  5. print u»My name is «, yourname, u»! I am «, yourage, u» years old» — соединяем куски текста и информацию в переменных между собой.

Для общего развития, так сказать, эту же строку можно записать таким образом:

print u»My name is » + yourname + u»! I am » + yourage + u» years old»

Результат будет один и тот же.

Наша первая программа на Python

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

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

X = raw_input(u"X= ")

X = float(X)

Y = raw_input(u"Y= ")

Y = float(Y)

Z = X*Y

print u"X * Y = ", Z

print type(Z)

Результат отработки скрипта:


Первая простейшая программа на Python.

Разберем:

  1. что касается raw_input — тут должно быть уже все ясно. Приглашаем пользователя ввести 2 числа, X и Y.
  2. X = float(X) — дело в том, что введенное пользователям число будет все равно строкой (юникодом), а не числом. Точнее, числом в строковом типе. В Питоне (в отличии от того же PHP) нельзя напрямую перемножать строки между собой, нельзя перемножать строку с числом и т.п. Поэтому нам нужно привести все введенное пользователем в числовой тип. Есть несколько числовых типов, например:
    1. float — число с плавающей точкой.
    2. int — целое число (без плавающей точки).
    3. long — длинные (большие) числа.
  3. Z = X*Y — создаем переменную Z, куда помещаем результат перемножения X на Y.
  4. type(Z) — команда type() выводит тип помещенной в нее переменной.

Так почему в примере я использовал X = float(X), а не int(X) и не long(X). В случае, если бы я это сделал, пользователь смог бы вводить лишь целые числа без дробной части.

Если вы уже занимались программированием, то вам может показаться, «а не дохрена ли тут всего написано». Действительно, сократим код и убедимся, что он работает, листинг 4:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

X = float(raw_input(u"X= "))

Y = float(raw_input(u"Y= "))

print u"X * Y = ", X*Y, type(X*Y)

Все работает:


Сокращенная запись кода на Питоне.

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

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

UPD: 05/04.14

Отвечая на коммент по поводу полноценного калькулятора: из того что я изложил выше его сделать невозможно. Нужно же как-то проверять что хочет сделать пользователь ? А чтобы проверять какое действие требуется выполнить, нужно использовать условия (или ветвления). Давайте я сначала напишу программу, а потом постараюсь объяснить, листинг 5:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import math

Action = raw_input(u"*,/,+,-,Q: ")

Action = unicode(Action)

if Action == u"Q":
    
    X = input(u"X= ")
        
    Total = math.sqrt(X)
    
else :
    
    X = input(u"X= ")
        
    Y = input(u"Y= ")

    if Action == u"*" :
            Total = X*Y
    elif Action == u"/" :
            Total = X/Y
    elif Action == u"+" :
            Total = X+Y
    else :
            Total = X-Y
    
print u"Total= ", Total

print type(Total)

Результат вычисления квадратного корня и деления:


Результат вычисления квадратного корня и деления на Python.

Что делает этот скрипт:

  1. import math — импортируем библотеку с математическими функциями, об этом еще рано, просто примите как факт.
  2. Action = raw_input(u»*,/,+,-,Q: «) — предлагает нам выбрать одно из 5 действий, это просто текст и ничего более, мы просим ввести пользователя одно из перечисленных, чтобы как-то идетифицировать в дальнейшем что ему надо, умножение, деление и т.п.
  3. Action = unicode(Action) — переводим введенное юзером в Юникод (на всякий случай).
  4. if Action == u»Q»: — отсюда и далее идут проверки на то, что было сказано в пункте 2. В нашем случае это звучит так: если переменная Action равна Q, значит пользователь хочет извлечь квадратный корень. В таком случае предлагаем ему ввести число, из которого нужно его извлечь: X = input(u»X= «) и, «выдирая» из импортированной библиотеки нужную функцию, вычисляем квадратный корень из X: math.sqrt(X) (где math — имя импортированной библиотеки).
  5. else : — если переменная Action не равна Q, тогда делаем все что ниже, остальное по аналогии и по идее должно быть ясно.

Ветвление (условия) в примере описаны так: если Action=»Q», значит вычисляем корень, если нет, тогда: если Action=»*» вычисляем произведение, иначе, если Action=»/», то частное и так далее.

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

Для удобства пользования, чтобы не нужно было постоянно запускать скрипт, можно воспользоваться функциями и вызывать запрос на ввод числа после отработки. Это выходит за рамки текущего разговора, но если вы чуть поразбираетесь сами, то наверное все будет понятно, листинг 6:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import math

def recurse():

    global Action
    
    Action = raw_input(u"*,/,+,-,Q: ")

    Action = unicode(Action)

    calc(Action)

def calc(func):

    if Action == u"Q":
    
        X = input(u"X= ")
        
        Total = math.sqrt(X)
    
    else :
    
        X = input(u"X= ")
        
        Y = input(u"Y= ")

        if Action == u"*" :
            Total = X*Y
        elif Action == u"/" :
            Total = X/Y
        elif Action == u"+" :
            Total = X+Y
        else :
            Total = X-Y
    
    print Total
    
    print type(Total)
    
    recurse()
 
Rec = recurse()

func = calc(Rec)

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


Пример функции на Python.

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

Раздел сайта: Моды World of Tanks

Оцените статью
protank.su
Adblock
detector