F5G8e


                          html/image/iwanttobelieve.jpg

Как сделана эта* сборка Visual Python Portable?
-----------------------------------------------

1. Файловое дерево "неофициальной" сборки с

     https://noschese180.wordpress.com
           /2011/09/27/day-16-vpython-on-a-usb-stick/

   наложено на (сopy, replace files with the same name) "официальную сборку" с

     http://portablepython.com/wiki/PortablePython2.7.2.1/

2. Установлен pip. Для этого, скачать в папку .\App файл get-pip.py

     https://bootstrap.pypa.io/get-pip.py

   Находясь в папке .\App в командной строке запустить

     python get-pip.py

3. В командной строке перейти в папку Scripts и переустановить Pillow, PyWin32

     cd .\scripts
     pip install pillow
     pip install pypiwin32

4. Создать самораспакоВывающийся архив 7-zip с полученного дерева, создать хэш md5sum, загрузить в секцию Downloads.

     Portable Python 2.7.2.1.exe

5. Автор, создавший сборку в п.1, использует VIDLE:

     cd .\App
     pythonw idle.pyw

   но здесь, например, не работают скрипты, начинающиеся с

     from win32gui import ..

   Поэтому рекомендую добавленный в сборку PyScripter-Portable.exe, работающие примеры на Visual Python можно найти в папке

     .\App\Lib\site-packages\visual\examples

-----

*) "http://nelus.tpt.edu.ee/big/Portable Python 2.7.2.1.exe"


Тесты
-----

win32gui

  from win32gui import GetDC, ReleaseDC, Rectangle
  hdc=GetDC(0)
  Rectangle(hdc, 10, 10, 100, 100)
  ReleaseDC(hdc,0)

Pillow

  # http://pillow.readthedocs.org/en/latest/reference/Image.html
  from PIL import Image
  im = Image.open("bride.jpg")
  im.rotate(45).show()

и

  # http://stackoverflow.com/questions/3800458
  #      /quickly-getting-the-color-of-some-pixels-
  #      on-the-screen-in-python-on-windows-7
  from PIL import ImageGrab
  px=ImageGrab.grab().load()
  for y in range(0,100,10):
      for x in range(0,100,10):
          color=px[x,y]
          print color


Замечания по Питону
-------------------

Line continuation [2]

The preferred way of wrapping long lines is by using Python's implied line continuation inside parentheses, brackets and braces.

Backslashes may still be appropriate at times.

Example:

  a = ('1' + '2' + '3' +
      '4' + '5')

Or:

  a = '1' + '2' + '3' + \
      '4' + '5'


Compound statements [3] (multiple statements on the same line)

  if foo == 'blah': do_blah_thing()
  do_one(); do_two(); do_three()


Comments [3]

  # Block comments generally apply to some (or all) code
    that follows them, and are indented to the same level
    as that code. Each line of a block comment starts with a
  # and a single space (unless it is indented text
    inside the comment). Paragraphs inside a block comment
    are separated by a line containing a single
  #

  x = x + 1    # Increment x

  ''' Documentation Strings


Ссылки
------

  1. http://en.wikipedia.org/wiki/Python_syntax_and_semantics
  2. http://stackoverflow.com/questions/53162
          /how-can-i-do-a-line-break-line-continuation-in-python
  3. https://www.python.org/dev/peps/pep-0008/
  4. http://www.i-programmer.info/programming/other-languages
          /3748-getting-started-with-python.html
  5. http://www.i-programmer.info/programming/python
          /3942-arrays-in-python.html
     http://www.i-programmer.info/programming/python
          /5785-advanced-python-arrays-introducing-numpy.html


Приложение 1
------------

Простое 3D программирование с использованием VPython
====================================================

  http://vpython.org/contents/docs/VisualIntro.html

I. VPython: Python / Visual / среда VIDLE
   **************************************

Интерактивная среда разработки, используемая в этой статье называется VIDLE.


Окно дисплея
------------

При использовании VPython окно дисплея показывает объекты в 3D.

(0,0,0) находится в центре дисплея. +x ось уходит вправо, ось +y уходит вверх, и ось +z указывает на направление из дисплея, на Вас.

Единицы измерения по х, у, и z можно Выбирать любые; дисплей автоматически масштабируется надлежащим образом. (Вы могли бы, например, создать сферу с радиусом 1e-15m, представляющее ядро атома, или сферу с радиусом 1e+6m, представляющее планету, хотя не имеет смысла отображать оба этих объекта на общей картинке).


Окно Вывода
-----------

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


Окно кода
---------

Если Вы наберете или скопируйте следующий простой пример программы в окно кода VIDLE и запустите его (нажмите F5, или используйте меню Run), Вы увидите зеленый шар над коробкой.

  from visual import *
  redbox=box(pos=vector(4,2,3),
             size=(8,4,6),color=color.red)
  ball=sphere(pos=vector(4,7,3),radius=2,color=color.green)

Visual -- это имя модуля 3D-графики, используемый с языком программирования Python. VPython это название комбинации языка программирования Python, модуля Visual, и среды разработки VIDLE.


Просмотр сцены
--------------

В окне дисплея, нажмите и перетащите правой кнопкой мыши (либо на Macintosh, удерживая нажатой клавишу Command). Тащите влево или вправо, и Вы вращаетесь вокруг сцены. Чтобы повернуть сцену вокруг горизонтальной оси, тащите вверх или вниз. Нажмите и перетащите вверх или вниз с одновременно нажатыми левой и правой кнопками мыши, чтобы приблизиться к сцене или удалиться от нее (на Macintosh, удерживая нажатой клавишу Option).


II. VPython Объекты
    ***************

Предметы, имена и атрибуты
--------------------------

Графические объекты, которые Вы создаете, такие как сферы, коробки, и криВые (следы движения), продолжают существовать в течение всего срока Выполнения вашей программы, и модуль графики VPython 3D будет продолжать показывать их, где бы они не находились. Вы должны дать каждому объекту имя (например, Redbox или ball в примере Выше), если Вы хотите обратиться к нему позже в вашей программе. Все объекты имеют атрибуты: свойства, как ball.pos (позиция сферы), ball.color и радиус или другой параметр размера. Если Вы измените атрибут объекта, например, его позицию или цвет, VPython будет автоматически отображать объект в его новом месте, или с ноВым цветом.

Вы можете установить значения атрибутов в конструкторе (код, используемый для создания объекта), но Вы можете также изменить атрибуты позже:

  ball.radius = 2.2

В дополнение к встроенному набору атрибутов, можно создать ноВые атрибуты. Например, Вы можете создать сферу с именем Moon; в дополнение к ее радиусу и местоположению, Вы, возможно, дадите ему такие атрибуты, как масса (moon.mass) и импульс (moon.momentum).


Векторы
-------

Не все объекты в VPython видимы. Например, VPython позволяет создать 3D-векторные величины, и Выполнять векторные операции над ними. Если Вы создаете векторную величину, называемую a, Вы можете обратиться к его компонентам, таким, как к a.x, a.y и a.z. Однако, чтобы сложить два вектора a и b, вам не нужно складывать компоненты по одному; VPython будет делать векторное сложение для вас:

  a = vector(1,2,3)
  b = vector(4,5,6)
  c = a + b

Если Вы напечатаете с, то Вы увидите, что это вектор с компонентами (5, 7, 9).


Скалярное умножение
-------------------

  d = 3 * a # d является вектором с компонентами (3, 6, 9)


Длина вектора
-------------

  s = mag(c)      # s является скаляром
  z = mag(c) ** 2 # Вы можете длину вектора возвести в квадрат


Vector products
---------------

  f = cross(a,b)  # векторное произведение
  g = dot(a,b)    # скалярное произведение
  h = norm(a)     # нормализация: a/mag(a)

Атрибуты объектов VPython могут быть векторами, такими как скорость или импульс.


III. Простое программирование на Python
     **********************************

Импорт модуля 3D-графики (Visual)
---------------------------------

Первая строка Вашей программы должны быть:

  from visual import *


Комментарии
-----------

Комментарий в программе Python начинается с "#"

  # Эта строка -- комментарий


Переменные
----------

Переменные могут быть созданы в любом месте программы Python, просто путем присвоения значения имени переменной. Тип переменной определяется оператором присваивания.

  a = 3 # число
  b = -2. # Число с плавающей точкой
  c = vector(0,4, 3e3, -1e1) # вектор
  Earth = sphere(pos=(0,0,0), radius=6.4e6) # объект
  bodies = [ship, Earth, Moon] # список объектов

Основные объекты VPython, такие как sphere() и box(), имеют набор "атрибутов", таких как цвет, но Вы можете определить и дополнительные атрибуты, такие как масса или скорость. Другие объекты, такие как vector(), имеют встроенные атрибуты, но Вы не можете создать дополнительные атрибуты.


Предупреждение о делении
------------------------

Если Вы используете версию Python ниже Python 3.0, при деление целых чисел не Выйдет так, как Вы можете ожидать, так как результат округляется до ближайшего целого числа. Таким образом:

  a = 3/4
  print(a) # a есть 0

Чтобы избежать этого, Вы можете разместить десятичную точку после каждого номера так:

  b = 3./4.
  print(b) # b есть 0.75, как и ожидалось

Мы рекомендуем включить следующее заявление в качестве первой строки вашей программы, и в этом случае 3/4 будет 0.75; Есть два подчеркивания перед словом future и два после слова future; Также, оно будет отображать Вывод print-оператором должным образом на всех версиях Python:

  from __future__ import division, print_function

Но эта строка не является необходимой для версий Python, начиная с 3.0, которые игнорируют это заявление.


Возведение в степень
--------------------

  x ** 2 # а не x ^ 2, что является битовой операцией в Python


Логические проверки
-------------------

if, elif ("else if"), else:

  if a == b:  # см. таблицу логических Выражений ниже
      c = 3.5 # код с отступом Выполняется, если тест -- правда
  elif a < b:
      c = 0   # c будет установлен в ноль, только если a < b
  else:
      c = -23.2


Логические Выражения

  +--------+-----------------------------------+
  | ==     | равно                             |
  | !=     | не равно                          |
  | <      | меньше                            |
  | >      | больше                            |
  | <=     | меньше или равно                  |
  | > =    | больше или равно                  |
  | or     | логическое или                    |
  | and    | логическое и                      |
  | in     | принадлежность последовательности |
  | not in | не член последовательности        |
  +--------+-----------------------------------+


Списки (Lists)
--------------

Список -- это упорядоченная последовательность объектов любого вида. Список заключается в квадратные скобки.

  moons = [Io, Europa, Ganymede, Callisto]

Функция "arange" (сокращенно "ArrayRange") создает массив чисел:

  angles = arange (0., 2*pi, pi/100)
  # От 0 до 2*pi-(pi/100) с шагом (рi/100)

  numbers = arange(10)
  print(numbers)

Будет напечатано

  [0,1,2,3,4,5,6,7,8,9]


Циклы (Loops)
-------------

Простейшим циклом в Python является цикл while. Цикл продолжается до тех пор, пока указанное логическое Выражение истинно:

  while x < 23:
      х = х + vх * dt

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

  while True:
      rate(30) # limit animation rate, render scene
      ball.pos = ball.pos + (ball.momentum/ball.mass)*dt

Бесконечные циклы допустимы, потому что Вы всегда можете прервать программу, Выбрав "Stop Program" из меню Run в VIDLE.

Кроме того, можно пройти циклом по членам последовательности:

  moons = [Io, Europa, Ganymede, Callisto]
  for a in moons:
      r = a.pos - Jupiter.pos

  for x in arange(10):
  # см. раздел "списки" Выше
  ...

  for theta in arange(0., 2.*pi, pi/100.):
  # см. раздел "списки" Выше

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

  if a == b: continue # вернуться к началу цикла
  if a > b: break     # Выйти из цикла


Печать результатов
------------------

Чтобы напечатать номер, вектор, список, или что-нибудь еще, используйте опцию "print":

  print(Europa.momentum)

Чтобы распечатать текстовое сообщение, заключите его в каВычки:

  print("Мы разбились об Луну на скорости", v, "м/с.")

Python также предлагает возможность форматированной печати. В следующем примере цена будет печататься с 3 цифрами до десятичной точки и 2 цифрами после, а переменная num будет напечатана в виде целого числа:

  print("это $%3.2f долларов за %d копий" % (price,num))


Дополнительная информация о Python
----------------------------------

Мы обобщили небольшое, но важное подмножество языка программирования Python. Обширная документация Python предоставляется в меню Help в VIDLE, также есть дополнительная информация на сайте Python, но многое из этой информации предполагает, что у вас уже есть достаточно опыта программирования на других языках. Мы рекомендуем следующую книгу для тех, кто хочет узнать больше о Python, и о программировании в целом: Python Programming: An Introduction to Computer Science by John M. Zelle (Franklin Beedle & Associates, 2003).
