Уведомления

Группа в Telegram: @pythonsu

Уведомления

  • Found 3494 posts.

Python для новичков » Есть ли возможность установки пакета m3-cdecimal 2.3 именно как m3-cdecimal 2.3? » Окт. 12, 2016 15:13:01

Для работы приложения надо установить набор пакетов. Список пакетов описан в файле REQUIREMENTS.
Все ставиться на Windows 10 x64.
Большинство перечисленных в файле REQUIREMENTS пакетов установилось командой:
pip install -r REQUIREMENTS

Для пакетов, которые не установились автоматом, были скачены инсталляторы в виде *.exe или *.msi файлов и установлены штатными средствами Windows.
Один из таких пакетов - m3-cdecimal 2.3 (https://pypi.python.org/pypi/m3-cdecimal).
Файл установки - cdecimal-2.3.win-amd64-py2.7.msi.

Все дело в том, что команда pip freeze выдает список пакетов, в котором вместо пакета
m3-cdecimal==2.3 фигурирует пакет просто cdecimal==2.3, без m3.

В результате этого программа не работает, т.к. ругается на отсутствие пакета
m3-cdecimal==2.3.

Есть ли возможность добиться установки пакета таким образом, чтобы пакет устанавливался и отображался в списке именно как m3-cdecimal==2.3?

Попытка скомпилировать установочный пакет падает на ошибке:
D:\m3-cdecimal-2.3.tar\dist\m3-cdecimal-2.3\m3-cdecimal-2.3>python setup.py bdist_wininst
Traceback (most recent call last):
File “setup.py”, line 426, in <module>
ext_modules =
File “setup.py”, line 285, in cdecimal_ext
cc.initialize()
File “C:\Python27\lib\distutils\msvc9compiler.py”, line 383, in initialize
vc_env = query_vcvarsall(VERSION, plat_spec)
File “C:\Python27\lib\distutils\msvc9compiler.py”, line 299, in query_vcvarsall
raise ValueError(str(list(result.keys())))
ValueError:

Python для новичков » Selenium "человеческое" поведение мыши » Окт. 12, 2016 12:14:08

Здравствуйте.
“Человеческое” поведение мыши:
- криволинейная траектория при перемещении от элемента к элементу
- продолжительность перемещения
- дрожание
Подскажите, кто знает, готовые решения. Должны же быть.
Гуглятся чёт только аналогичные вопросы.

Python для новичков » Проблема с pymorphy2 » Окт. 10, 2016 21:21:49

Уважаемые форумчане
Есть такой код:
 def num(ch_, te_):
    """This function is required in the correct form of
    presentation a couple of numbers and nouns"""
    import pymorphy2
    morph = pymorphy2.MorphAnalyzer()
    word = morph.parse(te_)[0].normal_form
    butyavka = morph.parse(word)[0]
    wo_ = str(ch_) + ' ' + butyavka.make_agree_with_number(ch_).word
    return wo_ 

на входе пользователь вводит число “ch_” и слово “te_”, программа ставит слово в нужное склонение и падеж относительно числа

в принципе со всеми словами она работает , но если ввести слова: “еда” или “свет”, то выскакивает ошибка “AttributeError: ‘NoneType’ object has no attribute ‘word’” в чем может быть проблема?

Центр помощи » Нужна помощь в редактировании скрипта для Blender(скрипт написан на Python) » Окт. 9, 2016 17:26:45

Скрипт извлекает из файла одну часть модели(сама модель состоит из 64-ёх частей)-надо модифицировать скрипт чтобы извлечь все части модели+возможность экспортировать части назад в файл-вот сам скрипт:
__author__ = ‘AJ’
__email__ = ‘'
__url__ = (’blender', ‘elysiun’, 'Project homepage, http://www.ragezone.com/')
__version__ = ‘0.0.1’
__bpydoc__ = ‘'’ \
Import CABAL mcl files
'''


import bpy
import io
import Mathutils
import os
import struct


u = 0.0
v = 0.0


def create_cabal_map_file_mesh_object(cabal_map_file_object_vertices_co, cabal_map_file_object_vertices_uv, cabal_map_file_object_indices):
cabal_map_file_mesh = bpy.data.meshes.new('tile')

cabal_map_file_mesh.add_geometry(int(len(cabal_map_file_object_vertices_co) / 3), 0, int(len(cabal_map_file_object_indices) / 4))

cabal_map_file_mesh.verts.foreach_set('co', cabal_map_file_object_vertices_co)

cabal_map_file_mesh.faces.foreach_set('verts_raw', cabal_map_file_object_indices)

cabal_map_file_mesh.add_uv_texture()

for i, cabal_map_file_mesh_face in enumerate(cabal_map_file_mesh.faces):
cabal_map_file_mesh_texture_data = cabal_map_file_mesh.uv_textures.data

cabal_map_file_mesh_texture_data_uvs = [cabal_map_file_object_vertices_uv for j in cabal_map_file_mesh_face.verts]

cabal_map_file_mesh_texture_data.uv1 = cabal_map_file_mesh_texture_data_uvs
cabal_map_file_mesh_texture_data.uv2 = cabal_map_file_mesh_texture_data_uvs
cabal_map_file_mesh_texture_data.uv3 = cabal_map_file_mesh_texture_data_uvs

cabal_map_file_mesh.update()

cabal_map_file_mesh_object = bpy.data.objects.new('Mesh', cabal_map_file_mesh)

cabal_map_file_mesh_object.data = cabal_map_file_mesh

return cabal_map_file_mesh_object


def parse_cabal_map_file_tile_object(cabal_map_file, cabal_map_file_tile_object_index):
global u, v

print(“parse tile object at {0:x}”.format(cabal_map_file.tell()))

cabal_map_file_tile_object_unknown0, \
cabal_map_file_tile_object_face_count, \
cabal_map_file_tile_object_vertex_count = struct.unpack('<3I', cabal_map_file.read(12))

cabal_map_file_tile_object_vertices_co =
cabal_map_file_tile_object_vertices_uv =

print(“parse tile object vertices at {0:x} count {1:x}”.format(cabal_map_file.tell(), cabal_map_file_tile_object_vertex_count))

for i in range(cabal_map_file_tile_object_vertex_count):
cabal_map_file_tile_object_vertex_co = list(struct.unpack('3f', cabal_map_file.read(12)))

cabal_map_file_tile_object_vertex_co *= 0.001
cabal_map_file_tile_object_vertex_co *= 0.001
cabal_map_file_tile_object_vertex_co *= 0.001

cabal_map_file_tile_object_vertices_co.extend(cabal_map_file_tile_object_vertex_co)

if cabal_map_file_tile_object_index % 2 == 0:
cabal_map_file.seek(4, os.SEEK_CUR)

cabal_map_file_tile_object_vertex_uv = list(struct.unpack('2f', cabal_map_file.read(8)))

cabal_map_file_tile_object_vertex_uv = cabal_map_file_tile_object_vertex_uv / 32.5
cabal_map_file_tile_object_vertex_uv = cabal_map_file_tile_object_vertex_uv / 32.5

if cabal_map_file_tile_object_vertex_uv > u:
u = cabal_map_file_tile_object_vertex_uv

if cabal_map_file_tile_object_vertex_uv > v:
v = cabal_map_file_tile_object_vertex_uv

cabal_map_file_tile_object_vertices_uv.append(cabal_map_file_tile_object_vertex_uv)

cabal_map_file_tile_object_indices =

print(“parse tile object faces at {0:x} count {1:x}”.format(cabal_map_file.tell(), cabal_map_file_tile_object_face_count))

for i in range(cabal_map_file_tile_object_face_count):
cabal_map_file_tile_object_face = list(struct.unpack('<3H', cabal_map_file.read(6)))

cabal_map_file_tile_object_face.append(0)

cabal_map_file_tile_object_indices.extend(cabal_map_file_tile_object_face)

print(“parse tile object unknowns at {0:x}”.format(cabal_map_file.tell()))

# texture index per face
for i in range(cabal_map_file_tile_object_face_count):
struct.unpack('<I', cabal_map_file.read(4))

# texture count
cabal_map_file_tile_object_unknowns_unique_count = struct.unpack('<I', cabal_map_file.read(4))

# texture indices used on this tile
for i in range(cabal_map_file_tile_object_unknowns_unique_count):
struct.unpack('<I', cabal_map_file.read(4))

cabal_map_file_mesh_object = None

if cabal_map_file_tile_object_index % 2 != 0:
cabal_map_file_mesh_object = create_cabal_map_file_mesh_object(cabal_map_file_tile_object_vertices_co, cabal_map_file_tile_object_vertices_uv, cabal_map_file_tile_object_indices)

return cabal_map_file_mesh_object


def parse_cabal_map_file_tile_objects(cabal_map_file):
global u, v

cabal_map_file_tile_objects =

for i in range(2):
if i % 2 == 0:
# tile boundry
cabal_map_file_tile_object_aa = Mathutils.Vector(struct.unpack('3f', cabal_map_file.read(12)))
cabal_map_file_tile_object_bb = Mathutils.Vector(struct.unpack('3f', cabal_map_file.read(12)))

cabal_map_file_tile_object = parse_cabal_map_file_tile_object(cabal_map_file, i)

if cabal_map_file_tile_object is not None:
cabal_map_file_tile_objects.append(cabal_map_file_tile_object)

if i == 1:
print(u)
print(v)

return cabal_map_file_tile_objects


def parse_cabal_map_file_tile_texture(cabal_map_file, cabal_map_file_tile_texture_index):
print(“parse tile texture at {0:x}”.format(cabal_map_file.tell()))

cabal_map_file_tile_textures_file_path = os.path.splitext(cabal_map_file.name)

cabal_map_file_tile_texture = None

cabal_map_file_tile_texture_size = struct.unpack('<I', cabal_map_file.read(4))

if cabal_map_file_tile_texture_size > 0:
cabal_map_file_tile_texture_data = cabal_map_file.read(cabal_map_file_tile_texture_size)

cabal_map_file_tile_texture_file_path = os.path.normpath(os.path.join(cabal_map_file_tile_textures_file_path, “tile{0}.dds”.format(cabal_map_file_tile_texture_index)))

if os.path.isfile(cabal_map_file_tile_texture_file_path) == False:
with open(cabal_map_file_tile_texture_file_path, ‘w+b’) as cabal_map_file_tile_texture_file:
cabal_map_file_tile_texture_file.write(cabal_map_file_tile_texture_data)

return cabal_map_file_tile_texture


def parse_cabal_map_file_tile_textures(cabal_map_file):
cabal_map_file_tile_textures_file_path = os.path.splitext(cabal_map_file.name)

if os.path.isdir(cabal_map_file_tile_textures_file_path) == False:
os.mkdir(cabal_map_file_tile_textures_file_path)

cabal_map_file_tile_textures =

for i in range(64):
cabal_map_file_tile_texture = parse_cabal_map_file_tile_texture(cabal_map_file, i)

cabal_map_file_tile_textures.append(cabal_map_file_tile_texture)

return cabal_map_file_tile_textures


def parse_cabal_map_file_terrain_texture(cabal_map_file, cabal_map_file_terrain_texture_index):
print(“parse terrain texture at {0:x}”.format(cabal_map_file.tell()))

cabal_map_file_terrain_textures_file_path = os.path.splitext(cabal_map_file.name)

cabal_map_file_terrain_texture = None

cabal_map_file_terrain_texture_size = struct.unpack('<I', cabal_map_file.read(4))

if cabal_map_file_terrain_texture_size > 0:
cabal_map_file_terrain_texture_data = cabal_map_file.read(cabal_map_file_terrain_texture_size)

cabal_map_file_terrain_texture_file_path = os.path.normpath(os.path.join(cabal_map_file_terrain_textures_file_path, “terrain{0}.dds”.format(cabal_map_file_terrain_texture_index)))

if os.path.isfile(cabal_map_file_terrain_texture_file_path) == False:
with open(cabal_map_file_terrain_texture_file_path, ‘w+b’) as cabal_map_file_terrain_texture_file:
cabal_map_file_terrain_texture_file.write(cabal_map_file_terrain_texture_data)

return cabal_map_file_terrain_texture


def parse_cabal_map_file_terrain_textures(cabal_map_file):
cabal_map_file_terrain_textures_file_path = os.path.splitext(cabal_map_file.name)

if os.path.isdir(cabal_map_file_terrain_textures_file_path) == False:
os.mkdir(cabal_map_file_terrain_textures_file_path)

cabal_map_file_terrain_texture_count, \
cabal_map_file_terrain_texture_unknown1 = struct.unpack('<2I', cabal_map_file.read(8))

cabal_map_file_terrain_textures =

for i in range(cabal_map_file_terrain_texture_count - 1):
cabal_map_file_terrain_texture = parse_cabal_map_file_terrain_texture(cabal_map_file, i)

cabal_map_file_terrain_textures.append(cabal_map_file_terrain_texture)

return cabal_map_file_terrain_textures


def parse_cabal_map_file_external_objects(cabal_map_file):
cabal_map_file_external_object_count = struct.unpack('<I', cabal_map_file.read(4))

cabal_map_file_external_objects =

for i in range(cabal_map_file_external_object_count):
print(“parse external object at {0:x}”.format(cabal_map_file.tell()))

cabal_map_file_external_object_file_path_length = struct.unpack('<H', cabal_map_file.read(2))

cabal_map_file_external_object_file_path = ‘'

if cabal_map_file_external_object_file_path_length > 0:
cabal_map_file_external_object_file_path = cabal_map_file.read(cabal_map_file_external_object_file_path_length)

cabal_map_file.seek(16, os.SEEK_CUR)

# todo: load external object

return cabal_map_file_external_objects


def parse_cabal_map_file(cabal_map_file):
cabal_map_file_magic = struct.unpack(’<I', cabal_map_file.read(4))

if cabal_map_file_magic != 0x3ED:
return

cabal_map_file.seek(128, os.SEEK_CUR)

cabal_map_file_external_objects = parse_cabal_map_file_external_objects(cabal_map_file)

cabal_map_file_terrain_textures = parse_cabal_map_file_terrain_textures(cabal_map_file)

cabal_map_file.seek(526352, os.SEEK_CUR)

cabal_map_file_tile_tile_textures = parse_cabal_map_file_tile_textures(cabal_map_file)

cabal_map_file_tile_objects = parse_cabal_map_file_tile_objects(cabal_map_file)

return cabal_map_file_tile_objects


def import_cabal_map_file_from_path(cabal_map_file_path, context):
with io.open(cabal_map_file_path, mode='r+b') as cabal_map_file:
cabal_map_file_tile_objects = parse_cabal_map_file(cabal_map_file)

for cabal_map_file_tile_object in cabal_map_file_tile_objects:
context.scene.objects.link(cabal_map_file_tile_object)


class IMPORT_OT_cabal_mcl(bpy.types.Operator):
‘'’Import CABAL mcl'''

bl_idname = “import_scene.cabal_mcl”
bl_label = ‘Import CABAL mcl’


path = bpy.props.StringProperty(name=“File Path”, description=“CABAL mcl file path”, maxlen= 1024, default= “”)


def execute(self, context):
import_cabal_map_file_from_path(self.properties.path, context)

return ('FINISHED',)


def invoke(self, context, event):
window_manager = context.manager

window_manager.add_fileselect(self)

return ('RUNNING_MODAL',)


menu_function = lambda self, context: self.layout.operator(IMPORT_OT_cabal_mcl.bl_idname, text=“CABAL Map (.mcl)…”)


def register():
bpy.types.register(IMPORT_OT_cabal_mcl)
bpy.types.INFO_MT_file_import.append(menu_function)


def unregister():
bpy.types.unregister(IMPORT_OT_cabal_mcl)
bpy.types.INFO_MT_file_import.remove(menu_function)


if __name__ == “__main__”:
register()

Python для экспертов » Long polling + Lock » Окт. 8, 2016 09:07:22

Пишу бота для Телеграм, в котором требуется, среди прочего, читать и писать в словарь (выбрал Shelves).

Бот крутится на LongPolling.
Для разделения доступа к словарю хотя бы на запись воткнул threading.Lock
Проблема не исчезла. Вопросы:

1) Верно ли я понимаю, что при лонг-поллинге каждый запрос выполняется в отдельном потоке и при этом, если Lock определён в том же скрипте, создаёт себе новый Lock?
2) Если да - как этого избежать? То есть можно ли при Long Polling передать в дочерние процессы тот же Lock?


Структура в упрощённом виде:
 # -*- coding: utf-8 -*-
import telebot
import shelve
from threading import Lock
bot = telebot.TeleBot(config.token)
lock = Lock()
@bot.message_handler(commands=['stats'])
def stats(message):
    chat_id=str(message.chat.id)
    lock.acquire()
    res=shelve.open(res_name,writeback=True)
    #какие-то команды
    res.close()
    lock.release()
    
    
if __name__ == '__main__':
    
    bot.polling(none_stop=True)

Флейм » требуется несколько JS разработчиков » Окт. 7, 2016 17:02:49

Нам требуется несколько JS разработчиков на полную ставку(работа удаленная, город проживания значения не имеет)
Skype для связи: sjodiyt24809n

От нового сотрудника требуется:
ответственность и профессионализм, готовность выполнять удаленную работу 8 часов в день.
отличное знание HTML5, CSS3.
высокий уровень JavaScript: тонкости, прототипы, наследование, контексты, замыкания.
знание DOM-модели.
опыт работы в больших и сложных проектах.
готовность к обучению и желание делиться своими знаниями с другими членами команды.
опыт работы с Git.
умение комментировать и документировать код.

Плюсом будет:
опыт работы с любым JS-фреймворком;
опыт работы full-time в крупных/высоконагруженных проектах;
опыт работы с EXTJS или другими MVW, MVVM, MVC-фреймворками;
знание php, mysql, jquery, lodash;
системы сборки Gulp, Grunt, Webpack;
опыт использования любого CSS пост/препроцессора;

От компании предоставляется:
заработная плата от 60.000 до 130.000 в зависимости от уровня кандидата;
удаленная, долговременная, постоянная, стабильная работа;
интересные, сложные задачи;
приобретение опыта в передовых технологиях и подходах;
гибкий график;
хорошая возможность профессионального роста;

Skype: sjodiyt24809n

Python для новичков » PyTelegramBotAPI » Окт. 5, 2016 17:04:19

Ищу энтузиастов, которые хорошо знакомы с этой библиотекой, потому что я не могу найти адекватной документации(.

Python для новичков » Неверное определение текущей даты или проблемы со временем? » Окт. 4, 2016 14:49:35

Изучаю питон и потихоньку реализовываю бота погоды. Код с ним размещаю на сервере heroku (местоположение - Европа). И с ним или самим кодом у меня проблемы.
Данные погоды беру после парсинга страницы http://informer.gismeteo.ru/xml/27612_1.xml
 def test(url, town):
file = urllib.request.urlopen(url)
data = file.read()
file.close()
current_day = datetime.datetime.now()
forecasts = []
# парсю xml
dom = parseString(data)
forecast = dom.getElementsByTagName('FORECAST')
for node in forecast:
    day = node.getAttribute('day')
    tod = node.getAttribute('tod')
…..и т.д. …. после этого:
 # формируем массив, в котором лежат данные о погоде
    forecasts.append({
        'day': int(day),
        'tod': int(tod),
        'precipitation': int(precipitation),
        'temp': temp,
        'cloudiness': int(cloudiness),
    })
for forecast in forecasts[::-1]:
    day = u'Сегодня' if forecast['day'] == current_day.day else u'Завтра'
if forecast['tod'] == 0:
    tod = u'ночью'
elif forecast['tod'] == 1:
    tod = u'утром'
elif forecast['tod'] == 2:
    tod = u'днем'
elif forecast['tod'] == 3:
    tod = u'вечером'
else:
    tod = '-'
… и т.д….

После заливки кода на сервер, твиты публикуются странным образом.
Во-первых, с отставанием в несколько часов.
Во-вторых, прогноз погоды дается по часам: на ночь (3 часа ночи), утро (9 часов утра), день (15ч), вечер (21ч). Твит, каждый раз публикуется с префиксом “Завтра”. То есть: Завтра ночью, Завтра утром, Завтра днем, Завтра вечером.
Подумал, что проблема с временем на сервере. Вроде как там стоит UTC 00:00. По команде heroku config:add TZ=“Europe/Moscow” установил время Московское. Ситуации это не изменило.
Подскажите, проблема в неправильном определении текущего дня (Сегодня/Завтра) или с временем на сервере? Как исправить?

Python для новичков » Многопоточность » Окт. 3, 2016 22:09:40

Подскажите пожалуйста, как в этом коде реализовать многопоточность. Мне нужно вызвать в потоке всё, что находится в функции def main()
http://pastebin.com/BCy47phf

Python для экспертов » Unit test для Boost.Python » Сен. 28, 2016 13:54:04

При написании юнит-тестов возник вопрос, как можно проверить что метод экспортирует конкретную функцию, т.е. есть код:
 class_<some_object_type>()
.def("python_method_name", &some_object_type::c_method_name);
Как можно проверить что питоновская функция с именем python_method_name привязана к С++ функции с именем c_method_name (ну или к этому указателю на функцию). Я так понимаю, но может я не прав, в питоне где-то есть массив структур с типом PyMethodDef и в нем хранится отображение имен функций на адреса, может как-то можно получить к ней доступ? Если вопрос не по адресу можете удалить мой вопрос, я не обижусь.

GUI » QML ApplicationWindow » Сен. 27, 2016 15:02:24

Всем трям.

Решил попробовать связку QML+Python, PyQt 5.
Элементарный пример, чаще всех встречающийся в Сети, в котором в качестве корневого элемента используется Rectangle, идёт на ура. Text, как корневой элемент - тоже.

Но вот когда я ставлю в корень ApplicationWindow или кого-то из его предков - окно остаётся белым, ничего не показывает. Status у QQuickView становится Ready, как при успешной загрузке. В чём секрет, что не так с ApplicationWindow?
Проверил через просмотрщик qmlscene - отображает нормально. А Питон не хочет.

На всякий случай - код.
 import QtQuick 2.3
import QtQuick.Window 2.2
import QtQuick.Controls 1.4
 
ApplicationWindow {
    id: window
    visible: true
}

 # -*- coding: utf-8 -*-
import sys
# noinspection PyUnresolvedReferences
from PyQt5.QtCore import QUrl
# noinspection PyUnresolvedReferences
from PyQt5.QtWidgets import QApplication, QMainWindow, QHBoxLayout, QPushButton
# noinspection PyUnresolvedReferences
from PyQt5.QtQuick import QQuickView
 
 
class MyApp(QApplication):
    def __init__(self):
        super(MyApp, self).__init__(sys.argv)
        self.appLabel = QQuickView()
        self.appLabel.statusChanged.connect(self.on_status_changed)
 
    def on_status_changed(self,status):
        if status == QQuickView.Error:
            for err in self.appLabel.errors():
                print (err.toString())
        elif status == QQuickView.Ready:
            print('Status ready')
        else:
            print (status)
 
    def setSource(self, filename):
        self.appLabel.setSource(QUrl(filename))
 
    def show(self):
        self.appLabel.show()
 
 
# Main Function
if __name__ == '__main__':
    # Create main app
    myApp = MyApp()  # QApplication(sys.argv)
    # Create a label and set its properties
    myApp.setSource('mywindow.qml')
 
    # Show the Label
    myApp.show()
 
    # Execute the Application and Exit
    myApp.exec_()
    sys.exit()

Центр помощи » извлечение данных из многомерных массивов » Сен. 21, 2016 17:26:21

Добрый день, не так давно начал изучать язык, множество затруднений возникает, словом,взываю о помощи.
Начал решать задачу по написанию алгоритма Хаффмена, и вроде все понятно, но столкнулся с трудностью, которую не могу преодолеть.
На входе есть 2 массива, один с весом, другой со знакоами, порядковые номера весов и знаков совпадают. Дальше создаю массив, который отражает структуру бинарного дерева. Вот пример :
 a=[1,2,3,4,5,6,7,8,9]
b=['a','b','c','d','e','f','g','h','x']
while len(a)!=1:
    zna= [b[0],b[1]]
    z=a[0]+a[1]
    a.append(z)
    a.sort()
    b.insert(a.index(z),zna)
    del a[1]
    del a[0]
    del b[1]
    del b[0]
print(b)
[[[['d', 'e'], 'x'], [[[['a', 'b'], 'c'], 'f'], ['g', 'h']]]]
То есть, получаю многомерный массив, где каждый одиночный элемент- лист, а элемент массив- ветвление.
Собственно, вроде как замечательно, но дальше надо присвоить всем элементам значения, то есть на данном примере первым идет символ “х”, ему надо присвоить значение 00, элементам d и e присваиваются значения 011 и 010.
С этой задачей(в общем виде) я вообще ну ниак не могу справиться. Понимаю, что наверняка отнють не самое изящное решение данной задачи хочу сотворить, но может есть какой способ довести это до ума. Искренне ваш!

Python для новичков » Игра пинг-понг в Tkinter. Ошибка с отскакиванием объекта » Сен. 21, 2016 15:20:48

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

 from tkinter import *
WIDTH  = 900 #ширина
HEIGHT = 300 #высота
# по горизонтали
BALL_X_CHANGE = 20
# по вертикали
BALL_Y_CHANGE = 0
PAD_SPEED = 15 #скорость движения ракетки
LEFT_PAD_SPEED = 0 #скорость левой ракетки
RIGHT_PAD_SPEED = 0 #скорость правой ракетки
INITIAL_SPEED = 20
BALL_MAX_SPEED = 40 # Начальная скорость по горизонтали
BALL_X_SPEED = INITIAL_SPEED # Начальная скорость по вертикали
BALL_Y_SPEED = 0 # Добавим глобальную переменную отвечающую за расстояние
right_line_distance = WIDTH-30 # до правого края игрового поля
root = Tk()
c = Canvas(root,width=WIDTH,height=HEIGHT,background="#003300") #игровая область
c.pack()
c.create_line(WIDTH/2,0,WIDTH/2,HEIGHT,fill="white") #центральная линия
c.create_line(30,0,30,HEIGHT,fill="white") #левая линия
c.create_line(WIDTH-30,0,WIDTH-30,HEIGHT,fill="white") #правая линия
BALL = c.create_oval(WIDTH/2-15,HEIGHT/2-15,WIDTH/2+15,HEIGHT/2+15,fill="white")  #создаем мяч
LEFT_PAD = c.create_line(15,0,15,100,width=30,fill="blue") #создаем левую ракетку
RIGHT_PAD = c.create_line(WIDTH-15,0,WIDTH-15,100,width=30,fill="blue") #создаем правую ракетку
def move_ball(): #функция движения мяча
    ball_left, ball_top, ball_right, ball_bot = c.coords(BALL) #получил координаты мяча
    ball_center = (ball_top + ball_bot) / 2 #нашел координату центра мяча
    
    if ball_right < right_line_distance and ball_left > 30: #проверяем не достиг ли шмяч границ поля, если нет то просто двигаем
        c.move(BALL, BALL_X_SPEED, BALL_Y_SPEED)
    elif ball_right == right_line_distance or ball_left == 30: #если шар достигает границ левого или правого полей то
        if ball_right > WIDTH/2: #проверяем находится ли он на правой стороне
             if c.coords(LEFT_PAD)[1] < ball_center < c.coords(LEFT_PAD)[3]: #проверяем находится ли мяч в пределах правой ракетки
                 c.move(BALL,-BALL_X_SPEED,BALL_Y_SPEED) #то меняем скорость на противоположную
                 
                             
def move_pads(): #функция движения ракеток
    c.move(LEFT_PAD, 0, LEFT_PAD_SPEED)
    if c.coords(LEFT_PAD)[1] < 0:
        c.move(LEFT_PAD, 0, -c.coords(LEFT_PAD)[1])
    elif c.coords(LEFT_PAD)[3] > HEIGHT:
        c.move(LEFT_PAD, 0, HEIGHT-c.coords(LEFT_PAD)[3])
      
    c.move(RIGHT_PAD, 0, RIGHT_PAD_SPEED)
    if c.coords(RIGHT_PAD)[1] < 0:
        c.move(RIGHT_PAD, 0, -c.coords(RIGHT_PAD)[1])
    elif c.coords(RIGHT_PAD)[3] > HEIGHT:
        c.move(RIGHT_PAD, 0, HEIGHT-c.coords(RIGHT_PAD)[3])
                
def main():
    move_ball()
    move_pads()
    root.after(30, main)
c.focus_set()
def movement_handler(event): #функция считывания нажатий клавиш
    global LEFT_PAD_SPEED,RIGHT_PAD_SPEED
    if event.keysym == 'w':
        LEFT_PAD_SPEED = -PAD_SPEED
    elif event.keysym == 's':
        LEFT_PAD_SPEED = PAD_SPEED
    elif event.keysym == 'Up':
        RIGHT_PAD_SPEED = -PAD_SPEED
    elif event.keysym == 'Down':
        RIGHT_PAD_SPEED = PAD_SPEED
c.bind("<KeyPress>", movement_handler)
def stop_pad(event): #функция считывания отпускания клавиш
    global RIGHT_PAD_SPEED,LEFT_PAD_SPEED
    if event.keysym == 'w':
        LEFT_PAD_SPEED = 0
    elif event.keysym == 's':
        LEFT_PAD_SPEED = 0
    elif event.keysym == 'Up':
        RIGHT_PAD_SPEED = 0
    elif event.keysym == 'Down':
        RIGHT_PAD_SPEED = 0
c.bind("<KeyRelease>", stop_pad)
          
main()
root.mainloop()

Django » Не сохраняется файл через форму Django в контейнерах Docker.  » Сен. 21, 2016 06:01:36

Здравствуйте, возникла проблема с обработкой форм при размещении проекта в контейнерах докер. Если размещать все на обычный сервер все приложения на один хост, то все работает, но если разместить nginx, postgres и само приложение по разным контейнерам, то django не находит файл в форме (“это поле должно быть заполнено”, но если указать не соответствующий тип файла или превысить размер - то выводит ошибки об этом). Параметр enctype=“multipart/form-data” установлен. Сами примеры вьюх и конфигов я выложил в вопросе тут: http://stackoverflow.com/questions/39574538/django-nginx-in-docker-containers-can-not-upload-any-file-with-forms Если необходимо могу и сюда положить. Наверняка все дело в непонимании докера, пробовал сегодня переделать через named volumes докера, результат тот же, сайт работает, nginx с gunicorn успешно работают через сокет в именованном томе докера, но файл не грузится на сервер. Вернее грузится, но не сохраняется на диск.

Python для новичков » Skype4Py отправка сообщения в групповой чат » Сен. 21, 2016 05:25:34

Есть скрипт который отправляет сообщение в групповой чат с помощью Skype4Py

 client = Skype4Py.Skype()
client.Attach()
topic = unicode('Имя чата', 'utf-8')
for chat in client.BookmarkedChats:
    if chat.Topic == topic:
        chat.SendMessage('текст!!!')

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

Собственно проблема в том что:
 for chat in client.BookmarkedChats:
    print chat.Topic
Тупо его не видит, также если обирать и по активному окну чата.
В общем как с помощью Skype4Py отправить сообщение в групповой облачный чат

Python для новичков » Нажатие клавиши » Сен. 17, 2016 19:19:39

Нужно сделать так, что бы при нажатии клавиши выполнялось какое-либо действие.
Сделал так;
while True:
if msvcrt.kbhit():
key = ord(msvcrt.getch())
if key == 13: #при нажатии Enter`a
break
Но при выполнении в стандартном IDLE питона, клавиши не работают ( тыкаю энтер, ничего не происходит).
Как пофиксить ?

Python для новичков »  Treeview ttk  » Сен. 17, 2016 18:51:06

Всем привет!
Как можно в treeview добавить кнопку ?
Никак не могу сообразить.
Подскажите пожалуйста.
python Tkinter

Python для экспертов » Python Turtle » Сен. 15, 2016 17:33:55

Здравствуйте знатоки, нужна помощь, помогите пожалуйста нарисовать эту птицу в центр круга в коде, или просто нарисовать отдельно!!! (на картинке)!

 import turtle
 
wn = turtle.Screen()
alex = turtle.Turtle()
 
 
def drawRect():
    alex.speed(0)
    alex.up()
    alex.fillcolor("green")
    alex.begin_fill()
    alex.setpos(-250, -100)
    alex.down()
    for i in range(2):
        alex.forward(500)
        alex.left(90)
        alex.forward(300)
        alex.left(90)
    alex.end_fill()
drawRect()
 
def drawLines():
    alex.speed(0)
    alex.fillcolor("yellow")
    alex.begin_fill()
    alex.penup()
    alex.setpos(-250, 70)
    alex.pendown()
    for i in range(2):
        alex.forward(500)
        alex.left(90)
        alex.forward(30)
        alex.left(90)
    alex.end_fill()
 
    alex.fillcolor("black")
    alex.begin_fill()
    alex.penup()
    alex.setpos(-250, 40)
    alex.pendown()
    for i in range(2):
        alex.forward(500)
        alex.left(90)
        alex.forward(30)
        alex.left(90)
    alex.end_fill()
 
    alex.pencolor("white")
    alex.fillcolor("white")
    alex.begin_fill()
    alex.penup()
    alex.setpos(-250, 10)
    alex.pendown()
    for i in range(2):
        alex.forward(500)
        alex.left(90)
        alex.forward(30)
        alex.left(90)
    alex.end_fill()
 
    alex.speed(0)
    alex.fillcolor("yellow")
    alex.begin_fill()
    alex.penup()
    alex.setpos(-40, -100)
    alex.pendown()
    for i in range(2):
        alex.forward(30)
        alex.left(90)
        alex.forward(300)
        alex.left(90)
    alex.end_fill()
 
    alex.speed(0)
    alex.fillcolor("black")
    alex.begin_fill()
    alex.penup()
    alex.setpos(-10, -100)
    alex.pendown()
    for i in range(2):
        alex.forward(30)
        alex.left(90)
        alex.forward(300)
        alex.left(90)
    alex.end_fill()
 
    alex.speed(0)
    alex.pencolor("white")
    alex.fillcolor("white")
    alex.begin_fill()
    alex.penup()
    alex.setpos(20, -100)
    alex.pendown()
    for i in range(2):
        alex.forward(30)
        alex.left(90)
        alex.forward(300)
        alex.left(90)
    alex.end_fill()
 
drawLines()
 
def drawCircle():
    alex.speed(0)
    alex.up()
    alex.setpos(10, -50)
    alex.down()
    alex.fillcolor("red")
    alex.begin_fill()
    alex.circle(100)
    alex.end_fill()
drawCircle()

Центр помощи » Помогите, пожалуйста, с кодом! » Сен. 15, 2016 11:27:57

Я совсем недавно познакомился с Питоном, опыта у меня совсем ещё мало. А задача стоит (для меня) непростая - работа со спектрами аудио-сигнала.
Как известно, при расчёте АЧХ аудиотрека (для моих целей аудио будет иметь параметры 16 bit 44100 Hz mono), а именно к амплитудам массива fft, применяется нормализация (окно Hann, Blackman-Harris итд). Благодаря её типичный линейный вывод АЧХ выглядит примерно так:





Так отображается АЧХ в программе Adobe Audition


Также известно, что после в результаты работы fft (scipy, numpy) в массиве содержатся не нормализованные значения амплитуд. Используя в питоновском скрипте fft и rfft, нормализацию нужно организовать самому - тут у меня и начинаются траблы.


Для сравнения: слева данные из Audition-a (амплитуды в норме), а справа - переведённый в дБ массив fft (также с FFT size = 1024) - шкала амплитуд неверная.




Помогите, пожалуйста, написать корректно блок нахождения АЧХ для аудиофайла. Наиболее оптимальным мне видится работа библиотеки wave (для считывания данных аудио). А вот как дальше нормализовать полученные значения амплитуд спектра - ума не приложу.

Mobile Python » Поиск в браузере monkeyrunner » Сен. 13, 2016 18:24:09

Есть задача, нужна помощь.
Есть код, с помощью которого можно открыть Url В браузере через monkeyrunner
 #! /usr/bin/env monkeyrunner
import os
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
PACKAGE = 'com.android.browser'
ACTIVITY = '.BrowserActivity'
COMPONENT = PACKAGE + "/" + ACTIVITY
URI = 'Нужный url
device = MonkeyRunner.waitForConnection()
device.startActivity(component=COMPONENT, uri=URI)

Нужно после открытия страницы найти link по типу ctrl +f и нажать. Нашел решение. но не могу его прикрутить…
Реализация