Уведомления

Группа в Telegram: @pythonsu

Уведомления

  • Found 3494 posts.

Python для новичков » openpyxl как настроить цвет и формат записываемых в файл данных? » Янв. 11, 2018 18:29:40

Хочу внести данные в xlsx файл разного цвета формата и с выделением контуров яйчейки.
Например: первая колонна первой строки должна быть = 10 красного цвета и выделена контурами яйчейки но выдает простые стандартные шрифты черного цвета.
 from openpyxl import load_workbook
wbSearch = load_workbook("Отчет.xlsx", data_only=True)
wsSearch = wbSearch.active
wsSearch.cell(row=1, column=1).value = 10
wbSearch.save("Отчет.xlsx")

Python для новичков » ROC-кривые » Янв. 11, 2018 12:25:36

Здравствуйте!

Не могу понять как провести оценку модели, и вывести ROC-кривые. Подскажите пожалуйста, как это сделать.

 # загрузим библиотеки и установим опции
 
from __future__ import division, print_function
# отключим всякие предупреждения Anaconda
import warnings
warnings.filterwarnings('ignore')
%matplotlib inline
from matplotlib import pyplot as plt
import seaborn as sns
 
import pickle
import numpy as np
import pandas as pd
from scipy.sparse import csr_matrix
from scipy.sparse import hstack
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import roc_auc_score
from sklearn.linear_model import LogisticRegression
 
from sklearn.datasets import load_files
from sklearn.svm import LinearSVC
 
 
# загрузим обучающую и тестовую выборки
train_df = pd.read_csv('C:/Users/Kazzi/Desktop/mlcourse_open-master/data/train_sessions.csv',
                       index_col='session_id')
test_df = pd.read_csv('C:/Users/Kazzi/Desktop/mlcourse_open-master/data/test_sessions.csv',
                      index_col='session_id')
 
# приведем колонки time1, ..., time10 к временному формату
times = ['time%s' % i for i in range(1, 11)]
train_df[times] = train_df[times].apply(pd.to_datetime)
test_df[times] = test_df[times].apply(pd.to_datetime)
 
# отсортируем данные по времени
train_df = train_df.sort_values(by='time1')
 
# посмотрим на заголовок обучающей выборки
train_df.head()
 
# приведем колонки site1, ..., site10 к целочисленному формату и заменим пропуски нулями
sites = ['site%s' % i for i in range(1, 11)]
train_df[sites] = train_df[sites].fillna(0).astype('int')
test_df[sites] = test_df[sites].fillna(0).astype('int')
 
# загрузим словарик сайтов
with open(r"C:/Users/Kazzi/Desktop/mlcourse_open-master/data/site_dic.pkl", "rb") as input_file:
    site_dict = pickle.load(input_file)
 
# датафрейм словарика сайтов
sites_dict = pd.DataFrame(list(site_dict.keys()), index=list(site_dict.values()), columns=['site'])
print(u'всего сайтов:', sites_dict.shape[0])
sites_dict.head()
 
# топ-сайты в обучающей выборке
top_sites = pd.Series(train_df[sites].fillna(0).values.flatten()
                     ).value_counts().sort_values(ascending=False).head(5)
print(top_sites)
sites_dict.ix[top_sites.index]
 
 
time_df = pd.DataFrame(index=train_df.index)
time_df['target'] = train_df['target']
 
# найдем время начала и окончания сессии
time_df['min'] = train_df[times].min(axis=1)
time_df['max'] = train_df[times].max(axis=1)
 
# вычислим длительность сессии и переведем в секунды
time_df['seconds'] = (time_df['max'] - time_df['min']) / np.timedelta64(1, 's')
 
time_df.head()
# создадим отдельный датафрейм, где будем работать со временем
time_df = pd.DataFrame(index=train_df.index)
time_df['target'] = train_df['target']
​
# найдем время начала и окончания сессии
time_df['min'] = train_df[times].min(axis=1)
time_df['max'] = train_df[times].max(axis=1)
​
# вычислим длительность сессии и переведем в секунды
time_df['seconds'] = (time_df['max'] - time_df['min']) / np.timedelta64(1, 's')
​
time_df.head()
 
# наша целевая переменная
y_train = train_df['target']
 
# объединенная таблица исходных данных
full_df = pd.concat([train_df.drop('target', axis=1), test_df])
 
# индекс, по которому будем отделять обучающую выборку от тестовой
idx_split = train_df.shape[0]
 
full_df.corr()
 
# табличка с индексами посещенных сайтов в сессии
full_sites = full_df[sites]
full_sites.head()
 
# последовательность с индексами
sites_flatten = full_sites.values.flatten()
 
# искомая матрица
full_sites_sparse = csr_matrix(([1] * sites_flatten.shape[0],
                                sites_flatten,
                                range(0, sites_flatten.shape[0]  + 10, 10)))[:, 1:]
 
%%time
# выделим из объединенной выборки только обучающую (для которой есть ответы)
X_train = full_sites_sparse[:idx_split, :]
 
# считаем метрику на валидационной выборке
print(get_auc_lr_valid(X_train, y_train))
 
# функция для записи прогнозов в файл
def write_to_submission_file(predicted_labels, out_file,
                             target='target', index_label="session_id"):
    predicted_df = pd.DataFrame(predicted_labels,
                                index = np.arange(1, predicted_labels.shape[0] + 1),
                                columns=[target])
    predicted_df.to_csv(out_file, index_label=index_label)
 
# обучим модель на всей выборке
# random_state=17 для воспроизводимости
# параметр C=1 по умолчанию, но здесь мы его укажем явно
lr = LogisticRegression(C=1.0, random_state=17).fit(X_train, y_train)
 
# обучим модель на всей выборке
# random_state=17 для воспроизводимости
# параметр C=1 по умолчанию, но здесь мы его укажем явно
lr = LogisticRegression(C=1.0, random_state=17).fit(X_train, y_train)
 
def plot_grid_scores(grid, param_name):
    plt.plot(grid.param_grid[param_name], grid.cv_results_['mean_train_score'],
        color='green', label='train')
    plt.plot(grid.param_grid[param_name], grid.cv_results_['mean_test_score'],
        color='red', label='test')
    plt.legend();
 
visualize_coefficients(lr, site_dict)
 
 
full_new_feat = pd.DataFrame(index=full_df.index)
 
# добавим признак start_month
full_new_feat['start_month'] = full_df['time1'].apply(lambda ts: 100 * ts.year + ts.month)
# датафрейм для новых признаков
 
# рассчитаем количество сессий Элис по месяцам
tmp = full_new_feat.ix[:idx_split, 'start_month'].to_frame()
tmp['target'] = y_train
stm_vs_target = tmp.groupby('start_month')['target'].sum()
 
# вывод таблички
print(stm_vs_target)
 
 
# построим график
x_axis = stm_vs_target.index
y_axis = stm_vs_target.values
fig=plt.figure(figsize=(12, 8))
ax1=fig.add_subplot(111)
line1 = ax1.plot(y_axis,'ro',label='line1')
plt.xticks(range(len(y_axis)), x_axis)
ax1.set_ylabel('y values',fontsize=12)
lines = line1
labels = [l.get_label() for l in lines]
ax1.set_xlabel('ГГГГММ',fontsize=14)
ax1.set_ylabel('Кол-во сессий',fontsize=14)
plt.setp(ax1.get_xticklabels(), visible=True)
plt.suptitle(u'Количество сессий Элис по месяцам', y=1.0, fontsize=17)
fig.tight_layout()
fig.subplots_adjust(top=0.96,bottom=0.4)
plt.show() 
 
# добавим новый признак в разреженную матрицу
tmp = full_new_feat[['start_month']].as_matrix()
X_train = csr_matrix(hstack([full_sites_sparse[:idx_split,:], tmp[:idx_split,:]]))
 
# считаем метрику на валидационной выборке
print(get_auc_lr_valid(X_train, y_train))
 
# добавим новый стандартизированный признак в разреженную матрицу
tmp = StandardScaler().fit_transform(full_new_feat[['start_month']])
X_train = csr_matrix(hstack([full_sites_sparse[:idx_split,:], tmp[:idx_split,:]]))
 
# считаем метрику на валидационной выборке
print(get_auc_lr_valid(X_train, y_train))
 
full_new_feat['start_hour'] = full_df['time1'].apply(lambda ts: ts.hour)
full_new_feat['morning'] = full_new_feat['start_hour'].apply(lambda hour: int(hour <= 11))
 
 
# scaled start_hour
tmp_scaled = StandardScaler().fit_transform(full_new_feat[['start_month', 'start_hour']])
X_train = csr_matrix(hstack([full_sites_sparse[:idx_split,:], 
                             tmp_scaled[:idx_split,:]]))
print(get_auc_lr_valid(X_train, y_train))
# 0.957924006323 <---
 
# raw start_hour
tmp_raw = full_new_feat[['start_hour']].as_matrix()
tmp_scaled = StandardScaler().fit_transform(full_new_feat[['start_month']])
X_train = csr_matrix(hstack([full_sites_sparse[:idx_split,:], 
                             tmp_scaled[:idx_split,:]]))
print(get_auc_lr_valid(X_train, y_train))
# 0.919698464197
 
 
 
# scaled morning
tmp_scaled = StandardScaler().fit_transform(full_new_feat[['start_month', 'morning']])
X_train = csr_matrix(hstack([full_sites_sparse[:idx_split,:], 
                             tmp_scaled[:idx_split,:],
                             tmp_raw[:idx_split,:]]))
print(get_auc_lr_valid(X_train, y_train))
# 0.958430928728 <---
                         
# raw morning
tmp_raw = full_new_feat[['morning']].as_matrix()
tmp_scaled = StandardScaler().fit_transform(full_new_feat[['start_month']])
X_train = csr_matrix(hstack([full_sites_sparse[:idx_split,:], 
                             tmp_scaled[:idx_split,:],
                             tmp_raw[:idx_split,:]]))
print(get_auc_lr_valid(X_train, y_train))
# 0.948665199943
 
 
# start_hour и morning
tmp_scaled = StandardScaler().fit_transform(full_new_feat[['start_month', 'start_hour', 'morning']])
X_train = csr_matrix(hstack([full_sites_sparse[:idx_split,:], 
                             tmp_scaled[:idx_split,:]]))
print(get_auc_lr_valid(X_train, y_train))
# 0.959149043641 <---
 
full_new_feat.corr()
 
# формируем обучающую выборку
tmp_scaled = StandardScaler().fit_transform(full_new_feat[['start_month', 'start_hour', 'morning']])
X_train = csr_matrix(hstack([full_sites_sparse[:idx_split,:], 
                             tmp_scaled[:idx_split,:]]))
 
# зафиксируем качество с параметрами по умолчанию
score_C_1 = get_auc_lr_valid(X_train, y_train)
print(score_C_1)
 
%%time
# набор возможных значений С
Cs = np.logspace(-3, 1, 10)
 
scores = []
    
for C in Cs:
    scores.append(get_auc_lr_valid(X_train, y_train, C=C))
 
plt.plot(Cs, scores, 'ro-')
plt.xscale('log')
plt.xlabel('C')
plt.ylabel('AUC-ROC')
plt.title('Подбор коэффициента регуляризации')
# горизонтальная линия -- качество модели с коэффициентом по умолчанию
plt.axhline(y=score_C_1, linewidth=.5, color = 'b', linestyle='dashed') 
plt.show()
 
# подготовим данные для обучения и теста
tmp_scaled = StandardScaler().fit_transform(full_new_feat[['start_month', 'start_hour', 'morning']])
X_train = csr_matrix(hstack([full_sites_sparse[:idx_split,:], 
                             tmp_scaled[:idx_split,:]]))
X_test = csr_matrix(hstack([full_sites_sparse[idx_split:,:], 
                            tmp_scaled[idx_split:,:]]))
 
# обучим модель на всей выборке с оптимальным коэффициентом регуляризации
lr = LogisticRegression(C=C, random_state=17).fit(X_train, y_train)

Я прикреплю юпитер-тетрадку, в ней весь код. Если удобно с нее читать.

Центр помощи » Помощь с кортежами  » Янв. 10, 2018 13:56:41

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

Python для новичков » Смена окон в Tkinter » Янв. 9, 2018 17:06:02

Всем привет. Помогите, пожалуйста, со сменой окон. Идея в том, что в окне выводятся восемь картинок и пользователь с помощью стрелочных клавиш может выбрать необходимую ему картинку (выбранная картинка подсвечивается красным). Нажав на выбранной картинке “плюс” или “минус”, выбранная картинка заменяется соответствующим изображением. Это получилось реализовать. Теперь к делу:
Нужно, чтобы обусловленное выше повторялось несколько раз (например, 4 раза). Т.е. на экран выводится 8 картинок, пользователь обозначил “плюс”, “минус”, окно закрылось, открылось новое и снова то же самое. Пробую через цикл for, внутри while, в котором ждать пока будет выбран “плюс” и “минус”. Но что-то не выходит. Подскажите, как можно ждать в цикле, пока переменная не получит определенное значение? Или не менять окно на новое, а просто обновлять текущее? Код ниже. Спасибо.

from Tkinter import*
import os, sys, random
from PIL import ImageTk, Image

def load_all_images(directory):
images = os.listdir(directory)
random.shuffle(images)
return images

def rightKey(event):
global index
if index != 7:
set.config(bg='red', bd=5)
set.config(bg='black', bd=1)
index = index + 1
current_x = set.winfo_x()
current_y = set.winfo_y()

def leftKey(event):
global index
if index != 0:
set.config(bg='red', bd=5)
set.config(bg='black', bd=1)
index = index - 1
current_x = set.winfo_x()
current_y = set.winfo_y()

def upKey(event):
global index
if index >= 4:
set.config(bg='red', bd=5)
set.config(bg='black', bd=1)
index = index - 4
current_x = set.winfo_x()
current_y = set.winfo_y()

def downKey(event):
global index
if index < 4:
set.config(bg='red', bd=5)
set.config(bg='black', bd=1)
index = index + 4
current_x = set.winfo_x()
current_y = set.winfo_y()

def plusKey(event):
global counter_selection_plus
if counter_selection_plus < 2:
set.config(bg='black', bd=1)
current_x = set.winfo_x()
current_y = set.winfo_y()
selected_plus.append(my_img)
photo = PhotoImage(file='max.gif')
panel = Label(root, image=photo, bg = ‘red’, bd = 5)
panel.photo = photo
panel.pack()
set = panel
panel.place(x=current_x, y=current_y)
counter_selection_plus += 1

def minusKey(event):
global counter_selection_minus
if counter_selection_minus < 2:
set.config(bg='black', bd=1)
current_x = set.winfo_x()
current_y = set.winfo_y()
selected_minus.append(my_img)
photo = PhotoImage(file='min.gif')
panel = Label(root, image=photo, bg = ‘red’, bd = 5)
panel.photo = photo
panel.pack()
set = panel
panel.place(x=current_x, y=current_y)
counter_selection_minus += 1

selected_plus =
selected_minus =

for sheet in range(3):

root = Tk()
root.title(“%i” %sheet)
# set the root window's height, width and x,y position
# x and y are the coordinates of the upper left corner
window_width = root.winfo_screenwidth() - 20
window_height = root.winfo_screenheight() - 80
x = 1
y = 1
# use width x height + x_offset + y_offset (no spaces!)
root.geometry(“%dx%d+%d+%d” % (window_width, window_height, x, y))
# root.minsize(window_width,window_height)
# root.maxsize(window_width,window_height)
panel_width = window_width / 4
panel_height = window_height / 2

pos_x_up = 0
pos_x_down = 0
pos_y = 0
width = 0
height = 0
counter_position = 0

current_x = 0
current_y = 0

counter_selection_plus = 0
counter_selection_minus = 0
my_img = load_all_images('1' )
set =

for name in my_img:
photo = PhotoImage(file='1/%s' %name)
panel = Label(root, image=photo, bg = ‘black’, bd = 1)
panel.photo = photo
panel.pack()
set.append(panel)
if counter_position < 4:
panel.place(x = pos_x_up, y = 0)
pos_x_up = pos_x_up + panel_width
else:
panel.place(x=pos_x_down, y = panel_height-15)
pos_x_down = pos_x_down + panel_width
counter_position += 1

set.config(bg = ‘red’, bd = 5)
start = 0
set.focus_set()
index = start

while counter_selection_plus != 1 or counter_selection_minus != 1:
set.bind(“<Right>”, rightKey)
set.bind(“<Left>”, leftKey)
set.bind(“<Up>”, upKey)
set.bind(“<Down>”, downKey)
set.bind(“<+>”, plusKey)
set.bind(“<minus>”, minusKey)

if (counter_selection_plus == 1) and (counter_selection_minus == 1):
root.destroy()
break

root.mainloop()

Python для новичков » Opencv match template, помогите решить дилему:) » Янв. 9, 2018 16:53:58

Ребята, нужна ваша помощь, есть программа которая ищет элемент на картинке, но надо сделать так чтобы когда его нету она не находила левые куски картинки.

def buttonposition_image(image):
img = cv2.imread(image,0)
template = cv2.imread('all_image.png',0)
meth = ‘cv2.TM_SQDIFF’
method = eval(meth)
res = cv2.matchTemplate(img,template,method)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
top_left = min_loc
x,y = top_left
h,w = template.shape
print min_val
print h * w
if min_val<h*w:
return x,y
else:
print ‘not found’
return False

Как ни странно в большинстве случаев с таким условием работает неплохо, но иногда начинает глючить, особенно если элемент яркого цвета, то значение min_val очень большое, а нужно чтобы оно точно возвращало False если нету элемента.

Python для новичков » Почему нельзя вызвать async функцию внутри async функции » Янв. 9, 2018 13:02:15

Привет.
Имеем пример asyncpg

 import asyncio
import asyncpg
async def run():
    conn = await asyncpg.connect(user='user', password='password',
                                 database='database', host='127.0.0.1')
    values = await conn.fetch('''SELECT * FROM mytable''')
    await conn.close()
loop = asyncio.get_event_loop()
loop.run_until_complete(run())

хочу встроить этот код в вызов по роуту в санике, чтобы в каждом методе не писать иницииализацию и тд.
Как это можно сделать?

 @app.route("/", methods=['POST'])
async def test(request):
     run()
     return json({'status_code': 200})

Python для новичков » Текстовый редактор. Библиотека tkinter » Янв. 6, 2018 17:19:00

Добрый вечер, уважаемые форумчане! Создаю текстовый редактор. Столкнулся с небольшой проблемой. У меня есть 4 меню(File, Edit, About, Setings). Я хочу, чтобы при нажатии на меню Setings у меня создавалось новое окно с настройкам, которые пользователь мог изменять, например изменять горячие клавиши event'ам. Помогите, пожалуйста, подскажите мне, как это реализовать.


 from tkinter import *
from tkinter import messagebox
from tkinter import filedialog
import time
from datetime import datetime
def popup(event):
    pmenu.tk_popup(event.x_root, event.y_root)
def app():
    messagebox.showinfo('About the App','The name of programm is Notepad\nVersion 0.1\nMade on Python 3.6.2 in 06.01.2018')
def author():
    messagebox.showinfo('About the Author','The Author of the programm is *********\nThanks for using us!')
def close(event=None):
    wn.destroy()
    
def newfile(event=None):
    wn.title('Untitled.txt') #Nameless.txt
    field.delete(1.0, END)
def openfile(event=None):
    filename = filedialog.askopenfilename()
    pos = filename.rfind('/') + 1
    newName = filename[pos:]
    
    file = open(filename, 'r')
    content = file.read()
    field.delete(1.0, END)
    field.insert(1.0, content)
    file.close()
    wn.title(newName)
def savefile(event=None):
    filename = filedialog.asksaveasfilename()     
    file = open(filename + '.txt', 'w')
    content = field.get(1.0, END)
    file.write(content)
    file.close()
    
def cut():
    field.event_generate('<<Cut>>')
def copy():
    field.event_generate('<<Copy>>')
def paste():
    field.event_generate('<<Paste>>')    
def undo():
    field.event_generate('<<Undo>>')
def redo(event=None):
    field.event_generate('<<Redo>>')
def delete():
    field.event_generate('<<Clear>>')
def selectall():
    field.event_generate('<<SelectAll>>')
def time_and_date(event=None):
    field.insert(END, datetime.now())
    
wn = Tk()
wn.geometry('400x400')
wn.title('Notepad')
menubar = Menu()
wn.config(menu=menubar)
fmenu = Menu(menubar)
menubar.add_cascade(label='File', menu=fmenu)
fmenu.add_command(label='New File', accelerator='Ctrl+N', command=newfile)
fmenu.add_command(label='Open', accelerator='Ctrl+O', command=openfile)
fmenu.add_command(label='Save As', accelerator='Ctrl+S', command=savefile)
fmenu.add_command(label='Close', accelerator='Ctrl+Q', command=close)
editmenu = Menu(menubar)
menubar.add_cascade(label='Edit', menu=editmenu)
editmenu.add_command(label='Cut', accelerator='Ctrl+X', command=cut)
editmenu.add_command(label='Copy', accelerator='Ctrl+C', command=copy)
editmenu.add_command(label='Paste', accelerator='Ctrl+V', command=paste)
editmenu.add_command(label='Undo', accelerator='Ctrl+Z', command=undo)
editmenu.add_command(label='Redo', accelerator='Shift+Ctrl+Z',command=redo)
editmenu.add_command(label='Delete', accelerator='Del', command=delete)
editmenu.add_command(label='Select All', accelerator='Ctrl+A', command=selectall)
editmenu.add_command(label='Time and Date', accelerator='Ctrl+Tab',command=time_and_date)
aboutmenu = Menu(menubar)
menubar.add_cascade(label='About', menu=aboutmenu)
aboutmenu.add_command(label='About the App', command=app)
aboutmenu.add_command(label='About the Author', command=author)
setingsmenu = Menu(menubar)
menubar.add_cascade(label='Setings', menu=setingsmenu)
field = Text(wn)
field.pack()
pmenu = Menu(field)
pmenu.add_command(label='Cut', accelerator='Ctrl+X', command=cut)
pmenu.add_command(label='Copy', accelerator='Ctrl+C', command=copy)
pmenu.add_command(label='Paste', accelerator='Ctrl+V', command=paste)
pmenu.add_command(label='Select All', accelerator='Ctrl+A', command=selectall)
pmenu.add_command(label='Undo', accelerator='Ctrl+Z', command=undo)
pmenu.add_command(label='Redo', accelerator='Shift+Ctrl+Z', command=redo)
field.bind('<Button-3>', popup)
field.bind('<Control-n>', newfile)
field.bind('<Control-o>', openfile)
field.bind('<Control-s>', savefile)
field.bind('<Control-Z>', redo)
field.bind('<Control-Tab>', time_and_date)
field.bind('<Control-q>', close)
А также я хотел бы попросить предложить мне, что еще можно добавить в мой текстовый редактор.

Web » синхронизация модулей selenium и requests » Янв. 2, 2018 16:04:31

Можно ли так сделать чтоб модуль requests авторизировался а selenium переходил по ссылке(диологи)
?

Python проекты » Регистрация и авторизация для Django проекта » Янв. 2, 2018 14:02:50

Предисловие:

Многие знают, что внутри Django уже есть функционал для создания регистрации и авторизации, он же django.contrib.auth.
Но встроенного функционала, как всегда, не хватает для некоторых проектов, чему могут свидетельствовать такие проекты как django-registration или django-allauth, которые расширяют встроенную авторизацию дополнительным функционалом.
В своём проекте я решил реализовать только необходимые функции, без которых современная система авторизации и регистрации не обойдётся, поэтому назвал проект Simple Django Login and Registration.
Также, стоит заметить, что проект не является отдельным django-app'ом, а уже встроен в пустой django-проект. Это сделано специально, чтобы любой желающий мог склонировать проект и начать писать своё приложение не заморачиваясь с копированием шаблонов под свою структуру приложения. Для тех кому такая система не удобна или не нравится я предлагаю простое решение - скопировать app под названием “accounts” в свой проект.

Функционал:

- Авторизация
- с помощью имени пользователя & пароля
- с помощью почты & пароля
- с помощью почты или имени пользователя & пароля
- Регистрация
- Выход
- Активация профиля через почту (можно выключить через настройки)
- Повторная отправка кода активации
- Восстановление пароля
- Изменение пароля
- Изменение почты
- Изменение анкетных данных (имя и фамилия)
- Переводы некоторых языков: Украинский, Русский, Испанский, Французский, Китайский (упрощенный) и Немецкий

Репозиторий:

Вот здесь - https://github.com/egorsmkv/simple-django-login-and-register

Центр помощи » Не могу запустить qtconsole » Дек. 28, 2017 17:43:29

Всем привет!
Нажимаю jupyter qt-console.exe
Возникает окно при запуске с ошибкой, раньше такого не было
Приложил фото


Как мне запустить qtconsole?
Спасибо.

Python для новичков » Нужна помощь поправить код телеуправления » Дек. 24, 2017 15:31:45

Нужна помощь поправить код телеуправления
Ниже код на питоне который отлично работает но есть одна проблема .
Как только данные UDP перестают поступать должна проходить команда STOP.
  def MotorOff():
Но этого не происходит моторы продолжают вращается с последней полученной скоростью.
Код я нашел в сети 2 года назад переписал под себя и все забыл и питон и как писал .
Прошу измените программу так чтобы она проверяла поступление данных и если пропуски более 1сек или 30 пакетов то
 def MotorOff():
 #!/usr/bin/env python
# coding: utf-8
# Load library functions we want
import SocketServer
import serial
import time
#***************INIT BLOK************************
port = serial.Serial("/dev/ttyACM0", baudrate=9600, timeout=3.0) #для отладки
#port = serial.Serial("/dev/ttyS2", baudrate=9600, timeout=3.0) #для робота
#структура массива для передачи команд [x1,y1,x2,y2,x3,x4,key_axis_L ... key_B] и того 6-Осей 10-Кнопок
#utp_command_resiv = ['X', 'X', 'X', 'X','X', 'X', 'X', 'X','X', 'X', 'X', 'X','X', 'X', 'X', 'X']     
# Map of drives to pins
lDrives = ["a", "a", 'a', "a"]
#port.write("\xAA\x0A\x04\x01\x05\x55\x2A") #motor pwm= 150hz save
#rcv =  port.readline () # читаем ответ конроллера
#print  ("\r\return:" + repr(rcv)) # return =0 ok иначе команда не принята
#*****************END INIT BLOK********************
# Function to set all drives off
 
def MotorOff():
    port.write("\xAA\x0A\x06\x00") # motor M0 stop!!!
    port.write("\xAA\x0A\x07\x00") # motor M1 stop!!!
    pass
    
def Motor_M0(value_M0):       
    if value_M0 > 255 :
        value_M0 = 255 
    elif  value_M0 < -255:
        value_M0 = -255
    #print   (value_M0)
    if value_M0 < -15 and value_M0 > -256 :    # -15 до -255  зона джойстика X1 Назад
        if abs(value_M0) > 127:
            #print   ("M0= ", value_M0)
            port.write(("\xAA\x0A\x0B")+chr(abs(value_M0)-128)) #
        else:
            #print   ("M0-1= ",value_M0)
            port.write (("\xAA\x0A\x0A")+chr(abs(value_M0)))    #
        pass
    elif value_M0 > 15 and value_M0 < 256 :    # 15 до 255 зона джойстика X1 Вперед
        if value_M0 > 127:
            #print   ("M0= ",value_M0)
            port.write (("\xAA\x0A\x09")+chr(abs(value_M0)-128))   #
        else:
            #print   ("M0= ",value_M0)
            port.write (("\xAA\x0A\x08")+chr(abs(value_M0)))   #              
        pass
    else :                # значение в районе 0 остановим двигатель 
        port.write("\xAA\x0A\x06\x00") # motor M0 stop!!!
        #port.write("\xAA\x0A\x07\x00") # motor M1 stop!!!
        print   ("M0= 0")
        pass
def Motor_M1(value_M1):
    
    if value_M1 > 255 :
        value_M1 = 255 
    elif  value_M1 < -255:
        value_M1 = -255
    #print   (value_M1)    
    if value_M1 < -15 and value_M1 > -256 :    # -15 до -255  зона джойстика X1 Назад
        if abs(value_M1) > 127:
            #print   ("M1= ",value_M1)
            port.write (("\xAA\x0A\x0F")+chr(abs(value_M1)-128))   #
        else:
            #print   ("M1= ",value_M1)
            port.write (("\xAA\x0A\x0E")+chr(abs(value_M1)))   #
        pass
    elif value_M1 > 15 and value_M1 < 256 :    # 15 до 255 зона джойстика X1 Вперед
        if value_M1 > 127:
            #print   ("M1= ",value_M1)
            port.write (("\xAA\x0A\x0D")+chr(abs(value_M1)-128))   #
        else:
            #print   ("M1= ",value_M1)
            port.write (("\xAA\x0A\x0C")+chr(abs(value_M1)))   #              
        pass
    else :                # значение в районе 0 остановим двигатель 
        #port.write("\xAA\x0A\x06\x00") # motor M0 stop!!!
        port.write("\xAA\x0A\x07\x00") # motor M1 stop!!!
        print   ("M1= 0")
        pass
# Settings for the RemoteKeyBorg server
portListen = 9038                       # What messages to listen for (LEDB on an LCD)
# Class used to handle UDP messages
class PicoBorgHandler(SocketServer.BaseRequestHandler):
    # Function called when a new message has been received
    def handle(self):
        global isRunning
        #global var_x1
        #global var_y1
        request, socket = self.request          # Read who spoke to us and what they said
        request = request.upper()               # Convert command to upper case
        driveCommands = request.split(',')      # Separate the command into individual drives
        if len(driveCommands) == 1:
            # Special commands
            if request == 'ALLOFF':
                # Turn all drives off
                MotorOff()
                print 'All drives off'
            elif request == 'EXIT':
                # Exit the program
                isRunning = False
            else:
                # Unknown command
                print 'Special command "%s" not recognised' % (request)
                
        elif len(driveCommands) == 16: # 16 - длинна принятого массива команд
            #print   (driveCommands, )  #для отладки
            #print   (driveCommands[0]) #для отладки
            #структура массива для передачи команд [x1,y1,x2,y2,x3,x4,key_axis_L ... key_B] и того 6-Осей 10-Кнопок
            #utp_command_resiv = ['X', 'X', 'X', 'X','X', 'X', 'X', 'X','X', 'X', 'X', 'X','X', 'X', 'X', 'X']            
#            for driveNo in range(len(driveCommands)):
#                command = driveCommands[driveNo]
            pass 
            Motor_M0 ((int(driveCommands[0])+int(driveCommands[1])))
            Motor_M1 ((int(driveCommands[0])-int(driveCommands[1])))
        else:
            # Did not get the right number of drive commands
            print 'Command "%s" did not have %d parts!' % (request, len(lDrives))
try:
    global isRunning #начало ****************************
    value_M0 = 0   
    value_M1 = 0
    # Start by turning all drives off
    MotorOff()
    #raw_input('Теперь вы можете включить питание, нажмите клавишу ВВОД')
    # слушать UDP
    remoteKeyBorgServer = SocketServer.UDPServer(('', portListen), PicoBorgHandler)
    
    isRunning = True
    while isRunning: # проверка пока приходит телеметрия *****************************
        remoteKeyBorgServer.handle_request()   
    # Выключите driver и освободить контакты GPIO закончилась телеметрия
    print 'Finished'
    MotorOff()
    raw_input('Выключите питание, нажмите клавишу ВВОД, чтобы продолжить')
    #GPIO.cleanup()
    pass
except KeyboardInterrupt: # если нажали CTRL+C ***********************
    # CTRL + C выход, отключить диски и освободить контакты GPIO
    print 'Terminated'
    MotorOff()
    raw_input('Выключите питание, нажмите клавишу ВВОД, чтобы продолжить')
    MotorOff()
    pass
    #GPIO.cleanup()

Python для новичков » Рекурсивное скачивание файлов с FTP  » Дек. 24, 2017 02:47:31

Нужно скачать с FTP рекурсивно, паку с всеми вложенными в нее файлами .
Попытался и написал код но к сожалению загружается только только 1 файл ls-lR.gz

 from ftplib import FTP
import os
ftp = FTP('ftp.ubuntu.com')
print(ftp.login())
ftp.cwd('ubuntu')
data = ftp.retrlines('LIST')
print(data)
filenames = ftp.nlst()
for filename in filenames:
    host_file = os.path.join(
        'D:\\files', filename
    )
    try:
        with open(host_file, 'wb') as local_file:
            ftp.retrbinary('RETR ' + filename, local_file.write)
    except ftplib.error_perm:
        pass
ftp.quit()

Python для новичков » RSA шифрование » Дек. 21, 2017 14:48:09

Добрый дэн! Пишу программу для шифрования RSA. Первые 2 версии программы (0.1 и 0.3(0.2 пропала)) работаю более-менее нормально, особенно 0.3. Но они работаю только с маленькими ключами. Сейчас делаю 0.4 версию.
Но есть проблема с памятью, выделенной для работы программы, а именно - MemoryError. Мне нужна быстрая проверка чисел на простоту. Сейчас использую решето Эратосфена, но оно вынуждает меня перебирать все простые числа с нуля, хотя число может быть длинной в 2048 бит(файл с ключом прикреплен - там пример). Выдает MemoryError потому, что питон не может хранить все числа с 0 до этого ключа. Есть какой либо способ на БЫСТРУЮ проверку числа на простоту, чтобы выдать мне ответ без ошибок? Благодарен.

Python для новичков » Webkit add script » Дек. 19, 2017 03:27:11

Добрый день) пишу вам с Raspberry)
в данный момент создаю программу, с интерфейсом Gtk+html (Webkit) и управлением GPIO (кнопки)

Суть проблемы:
для управления через GPIO необходим Цикл While True
По щелчку кнопки, необходимо закинуть js функцию в WebKit
Но проблема в том, что кроме console и alert ничего не работает, прога тупо виснет
Если написать какой то код + alert, то сработает
Вставлять функции в сам html пробовал.

Дополнительный вопрос, есть ли смысл заменить sleep и если да, то на что?

index.html любой файл (с подключенным Jquery например)

 import gi
gi.require_version('Gtk', '3.0')           # NOQA
gi.require_version('WebKit', '3.0')        # NOQA
from gi.repository import Gtk, Gdk, WebKit
from urllib.request import pathname2url
import os
import time
def get_source(webj, frame):
    print ("loading...doc2")
    while True:
        try:
            web.execute_script("$('nav').html('1');")
        except:
            print(" неудачно")
        time.sleep(2.2) 
win = Gtk.Window()
web = WebKit.WebView()
url = 'index.html'
startpage = 'file://' + pathname2url(os.path.abspath(url))
web.open(startpage)
web.connect('load-finished', get_source)
win.add(web)
win.show_all()
Gtk.main()

Центр помощи » Помогите, пожалуйста! » Дек. 18, 2017 08:35:41

Добрый день ребята!
Помогите, пожалуйста, в питоне работаю недавно. Прошу не кидаться тапками :-)
Необходимо осуществить последовательный перебор по связности метода компоновки.
Есть код, который считывает файл и по нему строит 2 матрицы. По первой матрице и нужно организовать перебор.
Все задание звучало так: “Считать файл списка соединений, по нему построить матрицу ВГС и ГЭК, визуализировать и осуществить алгоритм по нажатию кнопки”
https://studopedia.ru/4_5322_posledovatelniy-algoritm-komponovki-po-svyaznosti.html здесь есть описание алгоритма.
Код немного поправила и по-тихоньку продвигаюсь с компоновкой

from tkinter import *
from tkinter.filedialog import *
import fileinput
import re
import numpy as np



def _open():
op = askopenfilename()
for l in fileinput.input(op):
txt.insert(END,l)

#выбираем из текста только элементы
txt2=
txt3=
txt4=
w=
def printer(event):
letter = txt.get(1.0,END)
for line in letter.split(';'):
txt2.append((re.findall(r'(\w*)\(.*?\)', line)))
matrix.insert(END,mmm(txt2))
elems = mmm(txt2)#список элементов без повторений
elems2 = list(filter(None, txt2))#список элементов по строкам
#print(elems2)
#print('mmm')
#print(mmm(txt2))
#print(txt2)#список элементов по строкам
letter2 = txt.get(1.0,END)
#print(letter2.split(';\n'))
for line in letter2.split('\n'):
txt3.append((re.findall(r'^\w+', line)))
graf.insert(END,mmm(txt3))
#print(txt3)
txt4 = mmm(txt3) #список узлов
#txt4.insert(0, ‘ ’)
#print(txt4)
#res = list(zip(txt4, txt2))
#print(res)# в каком узле какие элементы
#graf.insert(END,res)
p0=
p1=
p3=
for i in elems:
for j in elems2:
p2 = j.count(i)
if p2>0:
p0.append(1)
else:
p0.append(0)
p1 = chunks(p0,len(elems))
p3=np.transpose(p1) #транспонирование матрицы
print(p3)
print('–')
print(p1)
print('–')

s = 0 # сумма
t = # временная матрица
m3 = # конечная матрица
if len(p3) != len(p1):
print
“Матрицы не могут быть перемножены”
else:
r1 = len(p1) # количество строк в первой матрице
c1 = len(p1) # Количество столбцов в 1
r2 = c1 # и строк во 2ой матрице
c2 = len(p3) # количество столбцов во 2ой матрице
for z in range(0, r1):
for j in range(0, c2):
for i in range(0, c1):
if i==j==z:
s = 0
else:
s = s + p1 * p3
t.append(s)
s = 0
m3.append(t)
t =



obbs2 = obbs(p1, elems) #строим матрицу
while len(txt4)!=len(obbs2):
txt4.insert(0, ‘ ’)


#print(obbs2)
print(“Матрица ГЭК”)
print(txt4)
for i in obbs2:
w.insert(END,str(i))
print(i)

#print(len(p0))
print('**')

obbs3 = obbs(m3,elems)


print(“Матрица ВГС”)
print(elems)
for i in obbs3:
print(i)
print('**')

#компоновка
r=
a=0
max=0
b = 0
for i in obbs2:
g=obbs2
a=a+1
for j in g:
if j==1:
s=s+1
if (s>=max):#расчет максимального
max=s
b = b + 1#какая строка будет максимальной
print(s)
print(g)
s=0
print(max)
print (b)
print ('++')

“”“a = txt2
def variants(depth):
s = 0
if depth == 1:
for head in a:
yield head
else:
for head in a:
for tail in variants(depth - 1):
# print(head + tail)
yield head + tail
s += s + 1
# print(s)

for itm in (variants(2)):
print(”*“, itm)”“”





def obbs(l,l1):
for i in range(len(l)):
l.insert(0,l1)
return l

#деление
def chunks(lst, chunk_count):
chunk_size = len(lst) // chunk_count
return [lst for i in range(0, len(lst), chunk_size)]



def f(l):
n =
for i in l:
if i not in n:
n.append(i)
return n

def mmm(l):
n =
for i in l:
for j in i:
if j not in n:
n.append(j)
return n


root = Tk()
root.state('zoomed')

m = Menu(root)
root.config(menu=m)

fm = Menu(m)
m.add_cascade(label=“File”,menu=fm)
fm.add_command(label=“Открыть”,command=_open)
# считаный файл
txt = Text(root,width=40,height=15,font=“12”)
txt.place(x=10, y=20, height=500, width=350, bordermode=OUTSIDE)
#Элементы
matrix = Text(root,width=40,height=15,font=“12”)
matrix.place(x=10, y=540, height=50, width=350, bordermode=OUTSIDE)
#Соединительные ус-ва
graf = Text(root,width=40,height=15,font=“12”)
graf.place(x=10, y=620, height=100, width=350, bordermode=OUTSIDE)
w = Text(root,width=40,height=15,font=“12”)
w.place(x=380, y=20, height=500, width=370, bordermode=OUTSIDE)
but = Button(root)
but = “Элементы”
but.bind(“<Button-1>”,printer)
but.place(x=390, y=600, height=50, width=80, bordermode=OUTSIDE)


root.mainloop()


Прикрепляю файл внизу

GUI » PyQt, OPCUA. » Дек. 13, 2017 11:37:16

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

Проект-эталон вот : https://github.com/fotonn/opcua-client-gui

Заранее спасибо.

Python для новичков » Массив из суммы произведений массивов » Дек. 12, 2017 18:02:27

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

p1 = 0.4, 0.5, 0.1,
0.1, 0.7, 0.2,
0.1, 0.7, 0.2

p2 = 0.7, 0.2, 0.1,
0.3, 0.6, 0.1,
0.1, 0.7, 0.2

p3 = 0.3, 0.6, 0.1,
0.1, 0.6, 0.3,
0.05, 0.4, 0.55

r1 = 200, 320, 400,
100, 200, 500,
0, 50,300,

r2 = 100, 400, 700,
-100, 100, 800,
-300, -200, 200

r3 = 100, 230, 410
50, 150, 500
-50, 100, 350
их сумма:
 s = np.cumsum((p1 * r1), axis = 1)+np.cumsum((p2*r2),axis = 1)+np.cumsum((p3*r3),axis = 1)
        print(s)
получается так:
180. 558. 709.
-15. 275. 605.
-32.5 -97.5 195.

а должно получится:
280.0, 250.0, 95.0,
220.0, 110.0, -130.0,
209.0, 245.0, 230.0

Грубо говоря, вычислить массив нужно таким образом(Как это можно написать функцией?):
rp1(0)(0) = r1(0)(0)*p1(0)(0)+r1(0)(1)*p1(0)(1)+r1(0)(2)*p1(0)(2)
rp1(0)(1) = r1(1)(0)*p1(1)(0)+r1(1)(1)*p1(1)(1)+r1(1)(2)*p1(1)(2)
rp1(0)(2) = r1(2)(0)*p1(2)(0)+r1(2)(1)*p1(2)(1)+r1(2)(2)*p1(2)(2)

rp1(1)(0) = r2(0)(0)*p2(0)(0)+r2(0)(1)*p2(0)(1)+r2(0)(2)*p2(0)(2)
rp1(1)(1) = r2(1)(0)*p2(1)(0)+r2(1)(1)*p2(1)(1)+r2(1)(2)*p2(1)(2)
rp1(1)(2) = r2(2)(0)*p2(2)(0)+r2(2)(1)*p2(2)(1)+r2(2)(2)*p2(2)(2)

rp1(2)(0) = r3(0)(0)*p3(0)(0)+r3(0)(1)*p3(0)(1)+r3(0)(2)*p3(0)(2)
rp1(2)(1) = r3(1)(0)*p3(1)(0)+r3(1)(1)*p3(1)(1)+r3(1)(2)*p3(1)(2)
rp1(2)(2) = r3(2)(0)*p3(2)(0)+r3(2)(1)*p3(2)(1)+r3(2)(2)*p3(2)(2)

Python для новичков » Python3-setuptools не работает » Дек. 11, 2017 15:20:09

Здравствуйте, пожалуйста, помогите решить проблему:
 lexone@DebianWorkStation:~/Документы/python/pygame-master$ python3 setup.py build
Traceback (most recent call last):
  File "setup.py", line 109, in <module>
    from setuptools import setup, find_packages
ModuleNotFoundError: No module named 'setuptools'
lexone@DebianWorkStation:~/Документы/python/pygame-master$ sudo apt-get install python3-setuptools
Чтение списков пакетов… Готово
Построение дерева зависимостей       
Чтение информации о состоянии… Готово
Уже установлен пакет python3-setuptools самой новой версии (33.1.1-1).
обновлено 0, установлено 0 новых пакетов, для удаления отмечено 0 пакетов, и 104 пакетов не обновлено.

Python проекты » софт под linkedin » Дек. 8, 2017 14:45:00

Приветствую, требуется написание софта под линкедин (авторегистратор + добавляльщик + рассыльщик, Бюджет 750 $, телеграм @followcomrad123