Сгруппировать последовательно идущие цифры в списке
Дан список с индексами, необходимо сгруппировать элементы списка, идущие последовательно и вывести номера элементов начала и конца т.е.

indexes=[1,2,3,32,33,35,70]
k=0
i=0
def Popytka_nomer_5(indexes,k,i):
    for i in range(len(indexes)-1):
        print("Группа",k,'\tНачало',i)
        if indexes[i+1]==indexes[i]+1:
            continue
        k+=1
        print("\t\tКонец",i)
Popytka_nomer_5(indexes,k,i)

Выводит это

Группа 0        Начало 0
Группа 0        Начало 1
Группа 0        Начало 2
                Конец 2
Группа 1        Начало 3
Группа 1        Начало 4
                Конец 4
Группа 2        Начало 5
                Конец 5

А нужно

Группа 0        Начало 0
                Конец 2
Группа 1        Начало 3
                Конец 5
Группа 2        Начало 6
                Конец 6

Реализация с циклом по условию (для более удобного перемещения между стартом и концом отрезка):

indexes = [1, 2, 3, 32, 33, 34, 35, 70]

def Popytka_nomer_5(indexes, group = 0, i = 0):
    while i < len(indexes):
        j = i
        while j < len(indexes) -1 \
        and indexes[j+1] == indexes[j] + 1:
            j += 1
        print("Группа {}\tНачало {}".format(group + 1, i))
        print("\t\tКонец {}".format(j))
        i = j + 1
        group += 1

Popytka_nomer_5(indexes)

Реализация с циклом по итератору:

indexes = [1, 2, 3, 32, 33, 34, 35, 70]

def Popytka_nomer_5(indexes, group = 0, i = 0):
    g = -1
    for i in range(len(indexes)):
        if g == -1:
            print("Группа {}\tНачало {}".format(group, i))
            g = group

        if i < len(indexes)-1 and indexes[i+1] == indexes[i] + 1:
            continue
        group += 1
        g = -1
        print("\t\tКонец {}".format(i))

Popytka_nomer_5(indexes)

Результат:

Группа 1    Начало 0
            Конец 2
Группа 2    Начало 3
            Конец 6
Группа 3    Начало 7
            Конец 7

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


Использование QFileDialog в pyqt
Я перевёл
.ui файл в
.py и у меня возникли проблемы.
Я не могу использовать
QFileDialog и не могу понять, в чем ошибка.
Как это можно исправить?

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QFileDialog

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(400, 104)
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(40, 50, 321, 23))
        self.pushButton.setObjectName("pushButton")
        self.pushButton.clicked.connect(self.on_click)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.pushButton.setText(_translate("Form", "PushButton"))

    def on_click(self):
        file, _ = QFileDialog.getOpenFileName(self,'Open file',None,"Image (*.png *.jpg *jpeg)")[0]

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Form = QtWidgets.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())

Чтобы ваш код заработал вам нужно заменить строку:

file, _ = QFileDialog.getOpenFileName(self,'Open file',None,"Image (*.png *.jpg *jpeg)")[0]

на

file, _ = QFileDialog.getOpenFileName(None, 'Open File', './', "Image (*.png *.jpg *jpeg)")

Но я вам не рекомендую изменять файл сделанный в
Qt Designer. Правильно делать так:

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QFileDialog

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(400, 104)
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(40, 50, 321, 23))
        self.pushButton.setObjectName("pushButton")
#        self.pushButton.clicked.connect(self.on_click)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.pushButton.setText(_translate("Form", "PushButton"))

#    def on_click(self):
#        file, _ = QFileDialog.getOpenFileName(self,'Open file',None,"Image (*.png *.jpg *jpeg)")[0]
#        file, _ = QFileDialog.getOpenFileName(None, 'Open File', './', "Image (*.png *.jpg *jpeg)")

class Demo(QtWidgets.QWidget, Ui_Form):
    def __init__(self):
        super(Demo, self).__init__()

        self.setupUi(self)

        self.pushButton.clicked.connect(self.on_click)

    def on_click(self):
#        file, _ = QFileDialog.getOpenFileName(self,'Open file',None,"Image (*.png *.jpg *jpeg)")[0]
        file, _ = QFileDialog.getOpenFileName(self, 'Open File', './', "Image (*.png *.jpg *jpeg)")

        if file:
            print(file)

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Form = Demo()
#    ui = Ui_Form()
#    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())


Что делает этот метод?
На просторах форума встретил такой кусок кода, как абстрактный пример. Что такое dispatch, какую полезную нагрузку должна нести функция, как её правильно писать и что есть смежного в этой сфере?
Спасибо
<code>
@method_decorator(login_required)
def dispatch(self, request, *args, **kwargs):
    return super().dispatch(request, *args, **kwargs)
</code>

Это метод, в который приходит "сырой"
HTTP пакет.
Именно метод
dispatch отвечает за то, в какой метод далее передать пакет:
GET в
get,
POST в
post и т. д.
Код:

def dispatch(self, request, *args, **kwargs):
    # Try to dispatch to the right method; if a method doesn't exist,
    # defer to the error handler. Also defer to the error handler if the
    # request method isn't on the approved list.
    if request.method.lower() in self.http_method_names:
        handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
    else:
        handler = self.http_method_not_allowed
    return handler(request, *args, **kwargs)

В Вашем случае, этот метод переопределяют, чтобы сделать доступ к представлению (всем его методам) только залогиненым пользователям с помощью декоратора
login_required.


Как работает это умножение?
Почему на выходе создается массив с 1000 нулями? Как я это вижу: создается массив состоящий из числа. Это число умножается на 1000, получается ноль. И после этого на массив с одним нулем ссылается переменная a.
<code>
a = [0] * 1000
print(a)
</code>

Числа в массиве умножаются на определённое, поставленное тобой число: например
<code>
print([2, 3, 1]*2)
</code>
выведет [2, 3, 1, 2, 3, 1]
То есть ты умножаешь массив на определённое число и создаёшь в том же массиве копии всех чисел массива столько раз, чему равно число, на которое ты умножаешь массив


Как прочитать загруженный файл csv на heroku?
Загружаю файл на heroku - прочитать не могу. Где сохраняется файл при загрузке POST c формы?
Прочитала, что есть папка tmp. Как прочитать?

 def index():
     if request.method == "POST":
            t = 0
            file = request.files["file"]
            if bool(file.filename):
                file_bytes = file.read(MAX_FILE_SIZE)
                args["file_size_error"] = len(file_bytes) == MAX_FILE_SIZE
                args["method"] = "POST"
            try:
                    t1 = file.filename
                    t2 = "tmp/"
                    t3 = t1 + t2
                    dataset = pd.read_csv(t3)
                    t=0
            except IOError as e:
                    t = file.filename

            else:
                    t = 1
            args["t"]  = t

        return render_template("main.html", args=args)

<body>
    {% if args["method"] == "POST" %}
        {% if args["file_size_error"] %}
            <h1>Размер файла превышает 1мб.!</h1>
        {% else %}
            <h1>Файл успешно загружен.</h1>
        {% endif %}
    {% endif %}
    <form action="/" method="POST" enctype="multipart/form-data">
        <input type="file" name="file">
        <button type="submit">Загрузить</button>
    </form>
    <div class="result" align="center">

        <br> <p style="font-size:50px">Week predict:</p>
        <p style="font-size:50px">{{ args }}</p>

</div>
</body>

if request.method == "POST":
        t = 0
        file = request.files["file"]
        str_file_value = file.read().decode('utf-8')
        file_t = str_file_value.splitlines()
        csv_reader = csv.reader(file_t, delimiter=',')
        file_data = [row for row in csv_reader][1:]
        dataset = pd.DataFrame(file_data)
        if bool(file.filename):
            file_bytes = file.read(MAX_FILE_SIZE)
            args["file_size_error"] = len(file_bytes) == MAX_FILE_SIZE
            args["method"] = "POST"
            args["t"] = prediction(dataset)

<!doctype html>
<html lang="en">
<style>
form {
    margin: auto;
    width: 35%;
}

.result {
    margin: auto;
    width: 35%;
    border: 1px solid #ccc;
}
</style>
<head>
    <meta charset="UTF-8">
    <title>Predicts</title>
</head>
<body>
    {% if args["method"] == "POST" %}
        {% if args["file_size_error"] %}
            <h1>Размер файла превышает 1мб.!</h1>
        {% else %}
            <h1>Файл успешно загружен.</h1>
        {% endif %}
    {% endif %}
    <form action="/" method="POST" enctype="multipart/form-data">
        <input type="file" name="file">
        <button type="submit">Загрузить</button>
    </form>
    <div class="result" align="center">

        <br> <p style="font-size:50px">Week predict:</p>
        <p style="font-size:50px">{{ args["t"]  }}</p>

</div>
</body>
</html>


Как очистить QBoxLayout
Есть вот такой код в tkinter

lis_del_ff = self.top_ff.pack_slaves()
for l in lis_del_ff:
l.destroy()

Как реализовать подобное на pyqt5? Ясно что отдельный виджет можно удалить

box.removeWidget(widget)

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

for i in reversed(range(box.count())):
w = box.itemAt(i).widget()
w.setParent(None)
w.deleteLater()

В
QBoxLayout есть метод
children, который возвращает список всех виджетов. Остается только пройтись циклом по ним:

for i in box.children():
    box.removeWidget(i)

for i in reversed(range(layout.count())):
    layout.itemAt(i).widget().setParent(None)


размер группы groupby(['tr_day', 'mcc_code']).size() даст количесто уникальных значений 'mcc_code' для каждого дня. чтобы отобрать те, где больше 75, при помощи transform можно положить их в колонку, и отобрать по её значению
<code>
df[df.groupby(['tr_day', 'mcc_code'])['mcc_code'].transform('size')>75]
</code>
во втором случае вместо 'mcc_code' можно подставить любую существующую колонку


Как обновить QLabel?
<code>
    def setTheme(self):
    backgroundImage = config.get("Theme","background")
    background = QtWidgets.QLabel(self)
    background.setMinimumSize(QtCore.QSize(252, 424))
    background.setMaximumSize(QtCore.QSize(252, 424))
    if backgroundImage == 'default':
        background.setStyleSheet("image: url(data/images/background.png);")
    elif backgroundImage == 'dark':
        background.setStyleSheet("image: url(data/images/background2.png);")
    background.show()
</code>
Собственно. В другом классе я меняю значение background и снова вызываю метод setTheme. Однако изображение не меняется, хотя backgroundImage уже с нужным значением.
ссылка на пример

тут вы создаете новый QLabel при установки темы.
Уложите его в атрибут класса там где вы его создаете в первый раз, а потом

self.background_label.setStyleSheet(...)
self.background_label.update()

С внешнего класса лучше сделать signal-slot
на классе c backgroundLabel

class Window1(QObject):
    @pyqtSlot(str)
    def setTheme(self, backgroundImage):
        self.backgroundLabel.setStyleSheet(...)
        self.backgroundLabel.update()

на классе с настройками

class Window2(QObject):
    on_theme_changed = pyqtSignal(str)
    def onChanged(self):
        # ... обработать сеттингс тут чтоб не таскать в другие классы
        self.on_theme_changed.emit(backgroundImage)

Инит

w1 = Window1()
w2 = Window2()
w2.on_theme_changed.connect(w1.setTheme)


Подсчет стоимости по траченой воды и нахождение наибольшего количество по цене и и наименьшего
Всем привет нужна помощь в решении задачки:
1) пользователь вводит количество потраченных кубометров воды за 12 месяц и стоимость 1 кубометра
2) скрипт выводит стоимость за каждый месяц
3) после чего наибольшее количество по цене и и наименьшее
Пункт 1 я сделал скрипт предоставляю ниже.
P.S - нужна помощь в решении 2 и 3 пункта. Формула расчета стоимости кубометра я так понимаю вот такая (введенный кубометр * на введенную стоимость - например "23 * 19.88")
Скрипт:
<code>
print("Выберите один из пуктов меню:")
print("1 - расчет стоимости потраченой воды за весь год (по каждому месяцу.)")
print("2 - расчет стоимости потраченой воды за определенные месяца.")
print('')
menu = int(input("Сделайте свой выбор: "))

while menu < 1 or menu > 2:
    print("Вы выбрали пункт меню № {0} - он не существующий в этом пространсвенном мире".format(str(menu)))
    print('')
    menu = int(input("Сделайте свой выбор: "))

if menu == 1:
    print("Вы выбрали пункт № {0}".format(str(menu)))
    print('')

    arr_cubic_meter = []
    arr_cubic_meter_cost = []

    cubic_meter = 3
    cubic_meter_cost = 3
    count_month = 0
    count_cost = 0

    print('Вод кубометра воды за 12 месяцев')
    print('')
    for i in arr_cubic_meter:
        count_month += 1
        arr_cubic_meter.append(int(input("Введите использованный кубометр воды за {0}-вый месяц: ".format(str(count_month)))))

    print('')
    print('Вод стоимости одного кубометра воды за 12 месяцев')
    print('')
    for j in arr_cubic_meter:
        count_cost += 1
        arr_cubic_meter_cost.append(float(input("Введите стоимость одного кубометра воды за {0}-вый месяц: ".format(str(count_cost)))))

elif menu == 2:

    print('')
    month_selection = int(input("За сколько месяцев вы хотите сделать расчет потраченой воды?: "))

    while month_selection < 1 or month_selection > 12:
        print('')
        print("Такого месяца в календре не существует!!! Попробуйте снова =)")
        print('')
        month_selection = int(input("За сколько месяцев вы хотите сделать расчет потраченой воды?: "))

    arr_cubic_meter = []
    arr_cubic_meter_cost = []

    cubic_meter = month_selection
    cubic_meter_cost = month_selection
    count_month = 0
    count_cost = 0

    print('')
    print("Вод кубометра воды за {0} месяцев".format(str(month_selection)))
    print('')
    for i in range(cubic_meter):
        count_month += 1
        arr_cubic_meter.append(
            int(input("Введите использованный кубометр воды за {0}-вый месяц: ".format(str(count_month)))))

    print('')
    print("Вод стоимости одного кубометра воды за {0} месяцев".format(str(month_selection)))
    print('')
    for j in range(cubic_meter_cost):
        count_cost += 1
        arr_cubic_meter_cost.append(
            float(input("Введите стоимость одного кубометра воды за {0}-вый месяц: ".format(str(count_cost)))))
</code>

На счёт

Пункт 1 я сделал ...

Ваш код никак не будет работать. Достаточно взглянуть на эти две строчки:

arr_cubic_meter = []
for i in arr_cubic_meter:
    ...

Вот необходимый функционал, надеюсь по пунктам сами раскидать сможете.

cms = [int(input('Введите количество использованных кубометров воды за {0} месяц: '.format(i+1))) for i in range(12)]
cmc = [float(input('Введите стоимость одного кубометра воды за {0} месяц: '.format(i+1))) for i in range(12)]
c = float(input('Введите стоимость одного кубометра при оплате за год: '))

print('Затраты по месяцам (при оплате кубометра воды за каждый месяц)')
for i in range(12):
    print('За %s месяц потрачено %s' % (i+1, cmc[i]*cms[i]))

cbmc = sum([cms[i]*cmc[i] for i in range(12)])
print('За весь год потрачено (учитывая стоимость кубометра воды за каждый месяц): %s' % cbmc)

cbyc = sum([cms[i]*c for i in range(12)])
print('За весь год потрачено (учитывая стоимость кубометра воды при оплате за год): %s' % cbyc)

print(['Выгоднее платить за каждый месяц отдельно','Выгоднее платить сразу за год'][cbmc > cbyc])

И на будущее, постарайтесь не использовать мат на stackoverflow.


Проверка, запущен ли python-скрипт от имени администратора
В коде имеется скрипт, работающий только от имени администратора и если запустить его просто так, то все остальное, что делает код, будет бесполезно без этого скрипта.
Поэтому мне надо, чтобы при запуске приложения проверялось, запущено ли оно от имени администратора, и если нет - запуск должен отмениться и вылететь ошибка.
Я сделал это следующим образом:
<code>
import os
import ctypes
from tkinter import messagebox as mb

def is_admin():
   try:
     return os.getuid() == 0
   except AttributeError:
     return ctypes.windll.shell32.IsUserAnAdmin() != 0

if is_admin == True:
   #запуск скрипта
else:
   mb.showerror('Ошибка','Запустите от имени администратора')
</code>
Однако у меня при запуске, что от имени админа, что без него, появляется ошибка (мое сообщение)
В чем проблема?

Не хватает скобок, нужно так

if is_admin() == True:

А ещё лучше так

if is_admin():

Избавиться от второго окна можно добавив строчки:

root = tkinter.Tk()
root.withdraw()
mb.showerror('Ошибка','Запустите от имени администратора')


Как выдать права модератора в группе вк через скрипт на python?
Пытался сделать так:
<code>
    import vk_api
import random
import time

token = "token"

vk = vk_api.VkApi(token=token)

vk._auth_token()

while True:
    try:
        messages = vk.method("messages.getConversations", {"offset": 0, "count": 20, "filter": "unanswered"})
        if messages["count"] >= 1:
            id = messages["items"][0]["last_message"]["from_id"]
            body = messages["items"][0]["last_message"]["text"]
            if body.lower() == "привет":
                vk.method("group.editManager",{"group_id": 187698788}, {"user_id": 548834958}, {"role": moderator})
                vk.method("messages.send", {"peer_id": id, "message": "готово", "random_id": random.randint(1, 2147483647)})
except Exception as E:
        time.sleep(1)
</code>
Но ничего не происходило, хотя права у лонгпула выставлены

Ошибки есть. Во-первых:
groups.editManager, во-вторых:
{"role": "moderator"}
Также токен нужен не группы, а твой. Кстати, ты не видишь ошибок потому, что у тебя стоит
try

import vk_api
token="токен пользователя"
vk = vk_api.VkApi(token=token)
vk._auth_token()
vk.method('groups.editManager',{'group_id': 'id группы','user_id':
'id человека','role':'editor'})


Почему не работают два оператора в lambda?
<code>
import sys

defaults_commands = {
    'help': lambda: print('text'),
    'shut up':  lambda: print('\n Exiting...') sys.exit()
}
</code>
File "ToDoList.py", line 8
    }
    ^
SyntaxError: invalid syntax
Зарание спасибо.

Вот так вроде работает. В Питоне можно через запятую команды писать. А чтобы всё в одну лямбду попало надо в скобки взять. Ну или по факту tuple тут получается, лень уже разбираться.
<code>
defaults_commands = {
    'help': lambda: print('text'),
    'shut up':  lambda: (print('\n Exiting...'), sys.exit())
}
</code>


Подсчет количества сравнений и перестановок чисел при сортировке
Приложу фрагмент своей программы в виде алгоритма сортировки пузырьковым методом по возрастанию и по спаданию чисел:
<code>
import numpy as np
import timeit

def bubble_sort(arr):
    len_arr = len(arr)
    for i in range(len_arr):
        for j in range(0, len_arr - 1 - i):
            if arr[j] > arr[j + 1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]

def reversed_bubble_sort(arr):
    len_arr = len(arr)
    for i in range(len_arr):
        for j in range(0, len_arr - 1 - i):
            if arr[j] < arr[j + 1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]

arr = np.empty(1000, dtype=int)
print(f'Non-sorted array: \n {arr}')

reverse_check = input('Choose the sort order: \n 1.Ascending \n 2.Descending \n')
if reverse_check == '1':
    bubble_sort(arr)
else:
    reversed_bubble_sort(arr)

bubble_sort(arr)
len_arr = len(arr)
print(f'Sorted array: \n {arr}')
t = timeit.timeit('"-".join(str(n) for n in range(100))', number=10000)
print(f"Program was executed by {t} seconds")

</code>
Каким образом здесь можно реализовать вывод подсчета количества сравнений чисел и их перестановок в функции сортировки в зависимости от того, какой порядок сортировки выбрал пользователь? Пытался играться с видимостью переменных, разными способами вывода результатов подсчетов, но все безрезультатно.
P.S знаю, что скорее всего ответ будет слишком простым и очевидным, но я только изучаю функции, а ответов на подобные вопросы в гугле найти не смог. Буду благодарен за любую помощь, спасибо.

def bubble_sort(arr):
    num_comp = 0
    num_moves = 0
    len_arr = len(arr)
    for i in range(len_arr):
        for j in range(0, len_arr - 1 - i):
            num_comp += 1
            if arr[j] > arr[j + 1]:
                num_moves += 1
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
    return num_comp, num_moves

num_comp, num_moves = bubble_sort(arr)

Дополнение.
numpy.empty не создаёт массив псевдослучайных чисел. Эта функция создаёт незаполненный массив заданного размера, в котором лежит мусор. Чтобы создать массив псевдослучайных чисел, пользуйтесь функцией numpy.random.randint:

np.random.randint(low, high, size=n)


Как устранить задержку вывода сообщений на косоль из python скрипта?
Запускаю python скрипт из .net приложения так, как это делается в windows cmd. Перехватываю консольные сообщения скрипта. Все получается. Проблема в том, что сообщения приходят с огромной задержкой. Например, если скрипт выводит 10 строк, нет шансов перехватить их во время возникновения. Получаю их все вместе после завершения работы скрипта. Но если скрипт выводит 1000 (мнного) строк, они перехватываются большими порциями (50-60). Очень похоже на работу внутреннего буфера консольного вывода в python. Кто нить знает как этим можно управлять. Мне нужен немедленный (или быстрый) перехват сообщений. Спасибо.

В самом скрипте можно использовать аргумент
flush функции
print:

print(..., flush=True)

Запуская из консоли/терминала можно использовать аргумент
-u
Можно установить переменную окружения
PYTHONUNBUFFERED


Увеличивается количество знаков после запятой при использовании df.to_csv() для вывода DataFrame в CSV файл
Надо прочитать файл, заменить десятичный разделитель с запятой на точку и сохранить в новый файл.
Содержимое файла:

78512;0,756

Считываю в DataFrame:

df = pd.read_csv('111.csv', sep=';', encoding='utf-8', decimal=',', header=None)

Смотрю содержимое DataFrame:

In [56]: df

Out[56]:
         0      1
  0  78512  0.756

Записываю в файл:

In [57]: df.to_csv('222.csv', sep=';', encoding='utf-8', decimal='.', header=None, index=False)

В результате получаю в итоговом файле:

78512;0.7559999999999999

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


Помогите исправить код. Ошибка "enemy" object is not callable
<code>
#0.0.1v

import pygame
from os import path
import random

pygame.init()
win = pygame.display.set_mode((500,500))

pygame.display.set_caption('Cubes Game')

walkRight = [pygame.image.load('pygame_right_1.png'), pygame.image.load('pygame_right_2.png'), pygame.image.load('pygame_right_3.png'), pygame.image.load('pygame_right_4.png'), pygame.image.load('pygame_right_5.png'), pygame.image.load('pygame_right_6.png')]

walkLeft = [pygame.image.load('pygame_left_1.png'), pygame.image.load('pygame_left_2.png'), pygame.image.load('pygame_left_3.png'), pygame.image.load('pygame_left_4.png'), pygame.image.load('pygame_left_5.png'), pygame.image.load('pygame_left_6.png')]

bg = pygame.image.load('pygame_bg.jpg')
playerStand = pygame.image.load('pygame_idle.png')

clock = pygame.time.Clock()
x = 50
y = 425
widht = 60
height = 71
speed = 5
isJump = False
jumpCount = 10
lastMove = "right"
left = False
right = False
animCount = 0
x_enemy = 495
y_enemy = 495
speedy = 3
widht_enemy = 40
height_enemy = 60

class enemy(): #error enemy object is not callable
    def __init__(self, x_enemy, y_enemy, color_enemy, facing, widht_enemy, height_enemy):
        self.facing = facing
        self.x_enemy = x_enemy
        self.widht_enemy = widht_enemy
        self.y_enemy = y_enemy
        self.height_enemy = height_enemy

        self.speedy = 3
        self.color_enemy = color_enemy
    def draw(self, win, widht_enemy, height_enemy):
        pygame.draw.rect(win, self.color_enemy, (self.x_enemy, self.y_enemy, self.widht_enemy, self.height_enemy))

class snaryad():
    def __init__(self, x, y, radius, color, facing):
        self.x = x
        self.y = y
        self.radius = radius
        self.color = color
        self.facing = facing
        self.vel = 8 * facing
    def draw(self, win):
        pygame.draw.circle(win, self.color, (self.x, self.y), self.radius)

pygame.mixer.music.load(path.join(r'D:\Python\sprites\dist', 'sound.mp3'))
pygame.mixer.music.set_volume(0.4)

def drawWindow():
    global animCount
    win.blit(bg, (0, 0))

    if animCount + 1 >= 30:
        animCount = 0
    if left:
        win.blit(walkLeft[animCount // 5], (x, y))
        animCount+=1
    elif right:
        win.blit(walkRight[animCount // 5], (x, y))
        animCount+=1
    else:
        win.blit(playerStand, (x, y))
    for bullet in bullets:
        bullet.draw(win)
    for enemy in enemies:
        enemy.draw(win, 40, 60)

    pygame.display.update()

run = True
bullets = []
enemies = []
pygame.mixer.music.play(loops=-1)
while run:

    clock.tick(30)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    for enemy in enemies:
        if x_enemy < 500 and x_enemy > 0:
            x_enemy -= speedy
        else:
            enemies.pop(enemies.index(enemy))

    if lastMove == "right":
        facing = 1
    else:
        facing = -1

    if len(enemies) < 5:
        enemies.append(enemy(round(495), round(495),(255, 0, 0),facing , widht_enemy, height_enemy)) #что-то здесь не так

    for bullet in bullets:
        if bullet.x < 500 and bullet.x > 0:
            bullet.x += bullet.vel
        else:
            bullets.pop(bullets.index(bullet))

    keys = pygame.key.get_pressed()

    if keys[pygame.K_w]:
        if lastMove == "right":
            facing = 1
        else:
            facing = -1

        if len(bullets) < 5:
            bullets.append(snaryad(round(x + widht // 2), round(y + height // 2), 5, (255, 0, 0), facing))

    if keys[pygame.K_a] and x > 5:
        x -= speed
        left = True
        right = False
        lastMove = "left"
    elif keys[pygame.K_d] and x < 500 - widht - 5:
        x += speed
        left = False
        right = True
        lastMove = "right"
    else:
        left = False
        right = False
        animCount = 0
    if not(isJump):
        if keys[pygame.K_SPACE]:
            isJump = True
    else:
        if jumpCount >= -10:
            if jumpCount < 0:
                y += (jumpCount ** 2) / 2
            else:
                y -= (jumpCount ** 2) / 2
            jumpCount -= 1
        else:
            isJump = False
            jumpCount = 10
    drawWindow()

pygame.quit()
</code>

# 0.0.1v

import pygame
from os import path
import random

pygame.init()
win = pygame.display.set_mode((500, 500))

pygame.display.set_caption('Cubes Game')

walkRight = [pygame.image.load('pygame_right_1.png'), pygame.image.load('pygame_right_2.png'), pygame.image.load(
    'pygame_right_3.png'), pygame.image.load('pygame_right_4.png'), pygame.image.load('pygame_right_5.png'), pygame.image.load('pygame_right_6.png')]

walkLeft = [pygame.image.load('pygame_left_1.png'), pygame.image.load('pygame_left_2.png'), pygame.image.load(
    'pygame_left_3.png'), pygame.image.load('pygame_left_4.png'), pygame.image.load('pygame_left_5.png'), pygame.image.load('pygame_left_6.png')]

bg = pygame.image.load('pygame_bg.jpg')
playerStand = pygame.image.load('pygame_idle.png')

clock = pygame.time.Clock()
x = 50
y = 425
widht = 60
height = 71
speed = 5
isJump = False
jumpCount = 10
lastMove = "right"
left = False
right = False
animCount = 0
x_enemy = 495
y_enemy = 495
speedy = 3
widht_enemy = 40
height_enemy = 60

class Enemy():
    def __init__(self, x_enemy, y_enemy, color_enemy, facing, widht_enemy, height_enemy):
        self.facing = facing
        self.x_enemy = x_enemy
        self.widht_enemy = widht_enemy
        self.y_enemy = y_enemy
        self.height_enemy = height_enemy

        self.speedy = 3
        self.color_enemy = color_enemy

    def draw(self, win, widht_enemy, height_enemy):
        pygame.draw.rect(win, self.color_enemy, (self.x_enemy,
                                                 self.y_enemy, self.widht_enemy, self.height_enemy))

class snaryad():
    def __init__(self, x, y, radius, color, facing):
        self.x = x
        self.y = y
        self.radius = radius
        self.color = color
        self.facing = facing
        self.vel = 8 * facing

    def draw(self, win):
        pygame.draw.circle(win, self.color, (self.x, self.y), self.radius)

pygame.mixer.music.load(path.join(r'D:\Python\sprites\dist', 'sound.mp3'))
pygame.mixer.music.set_volume(0.4)

def drawWindow():
    global animCount
    win.blit(bg, (0, 0))

    if animCount + 1 >= 30:
        animCount = 0
    if left:
        win.blit(walkLeft[animCount // 5], (x, y))
        animCount += 1
    elif right:
        win.blit(walkRight[animCount // 5], (x, y))
        animCount += 1
    else:
        win.blit(playerStand, (x, y))
    for bullet in bullets:
        bullet.draw(win)
    for enemy in enemies:
        enemy.draw(win, 40, 60)

    pygame.display.update()

run = True
bullets = []
enemies = []
pygame.mixer.music.play(loops=-1)
while run:

    clock.tick(30)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    for enemy in enemies:
        if x_enemy < 500 and x_enemy > 0:
            x_enemy -= speedy
        else:
            enemies.pop(enemies.index(enemy))

    if lastMove == "right":
        facing = 1
    else:
        facing = -1

    if len(enemies) < 5:
        enemies.append(Enemy(round(495), round(495), (255, 0, 0),
                             facing, widht_enemy, height_enemy))

    for bullet in bullets:
        if bullet.x < 500 and bullet.x > 0:
            bullet.x += bullet.vel
        else:
            bullets.pop(bullets.index(bullet))

    keys = pygame.key.get_pressed()

    if keys[pygame.K_w]:
        if lastMove == "right":
            facing = 1
        else:
            facing = -1

        if len(bullets) < 5:
            bullets.append(snaryad(round(x + widht // 2),
                                   round(y + height // 2), 5, (255, 0, 0), facing))

    if keys[pygame.K_a] and x > 5:
        x -= speed
        left = True
        right = False
        lastMove = "left"
    elif keys[pygame.K_d] and x < 500 - widht - 5:
        x += speed
        left = False
        right = True
        lastMove = "right"
    else:
        left = False
        right = False
        animCount = 0
    if not(isJump):
        if keys[pygame.K_SPACE]:
            isJump = True
    else:
        if jumpCount >= -10:
            if jumpCount < 0:
                y += (jumpCount ** 2) / 2
            else:
                y -= (jumpCount ** 2) / 2
            jumpCount -= 1
        else:
            isJump = False
            jumpCount = 10
    drawWindow()

pygame.quit()


Замена части элемента списка на часть элемента этого же списка [закрыт]

Закрыт. Этот вопрос необходимо уточнить или дополнить подробностями. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.

Закрыт 3 года назад.

                        Улучшить вопрос

есть список

a = ["12", "34"]
как из его получить список

a = ["123", "34"]
к 1 элементу добавляется половина 2 элемента.


Определите координату точки,которая ближе расположена к началу координат
Имеется код
<code>
from math import *
print("Введите исходные данные")
print("x0 = ", end='')
x0 = float(input())
print("xs = ", end='')
xs = float(input())
print("x2 = ", end='')
x2 = float(input())
print("Вы ввели:")
print("x0 = %.1f  xs = %.1f  x2 = %.31f" % (x0, xs, x2))
x = x0
y = 0
while x <= x2 + xs / 2:
    y = 2*sin((3/4) * x)
else:
    y = ("error")
print("x = ", x, "y = ", y)
x += xs
</code>
Задача: Определить координаты точки (x, f(x), которая ближе всего расположена к началу координат, т.е. к точке (0, 0).
Проблема: У меня не вычисляются значения функции 2*sin((3/4)*x), но пишет error, в случае несоблюдения заданных условий. +Я не понимаю как определить координаты этой точки. Помогите пожалуйста :)


Вывести из списка в окно программы python Tkinter
Есть цикл, в котором создаются 3 радиокнопки, и заполняются в список. Как вывести эти кнопки из списка в окно программы ?
Вот код:
<code>
curRad = []
    for col in range(3):
        curRad.append(tk.Radiobutton(traffic, text=colors[col], variable=radVar,
                                     value=col, command=radCall))
        curRad.grid(column=col, row=1, sticky=tk.W)  # row=6
</code>
При попытке вывести через grid, ошибка : AttributeError: 'list' object has no attribute 'grid'. Как правильно это сделать?

curRad = []
for col in range(3):
        curRad.append(tk.Radiobutton(traffic, text=colors[col], variable=radVar,
                                     value=col, command=radCall))
        curRad[col].grid(column=col, row=1, sticky=tk.W)  # row=6


Квадратный корень в Python [закрыт]

Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

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

Закрыт 3 года назад.

                        Улучшить вопрос

<code>
import math
def psq():
    a = int(input())
    b = int(input())
    c = int(input())
    a1 = int(input())
    b1 = int(input())
    c1 = int(input())
    p = float((a + b + c) / 3)
    p2 = float((a1 + b1 + c1) / 3)
    s = p + p2
    sq = (p * (p - a)(p - b)(p - c)) ** 0.5 + (p2 * (p2 - a1)(p2 - b1)(p2 - c1)) ** 0.5
    print(s, ' - периметр, ', sq, ' - площадь')
psq()
</code>
Вот код и в строке где корень все время вылазает ошибка на счет  типа данных.
Помогите пожалуйста

А знаки арифметическмх операций кто за вас будет ставить?
<code>
sq = (p * (p - a)*(p - b)*(p - c)) ** 0.5 + (p2 * (p2 - a1)*(p2 - b1)*(p2 - c1)) ** 0.5
</code>


Сравнить два списка и вывести недостающие элементы (с сохранением количества)
Пытаюсь получить все элементы списка list_a, которых нет в списке list_b (с сохранением количества):

list_a = ['users1_', 'users1_', 'users2_', 'users3_']
list_b = ['users1_', 'users3_']
list_c = list()

for template in list_a:
    if template not in list_b:
        list_c.append(template)

print(list_c)  # ['users2_']

Но получаю только один элемент. Что требуется сделать, чтобы получить ['users1_', 'users2_'] ?
Что-то вроде:

print(list(set(list_a) ^ set(list_b)))

не подходит, поскольку мне важны все элементы списка. Здесь set не подходит, так как он оставит только уникальные элементы в списках.

Если элемент найден, то удалить из списка b:
<code>
for template in list_a:
    if template not in list_b:
        list_c.append(template)
    else:
        list_b.remove(template)
</code>


Как вывести все процессы одним сообщением?
Имеется следующий код, как вывести в нем все процессы одним сообщением и убрать из каждого .exe?

import psutil
for proc in psutil.process_iter():
    name = proc.name()
    print(name)
    if name == "program.exe":
        pass

Чтобы получилось:

chrome
opera
browser
svhost
....

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

name = proc.name().rsplit('.',maxsplit=1)[0]

Вот этот не очень, но

name = proc.name().rstrip('ex').strip('.')

Одним сообщением это как? предположу что

proclist = list(map( lambda proc:  proc.name().rsplit('.',maxsplit=1)[0]
, psutil.process_iter()))


Асинхронное переподключение к серверу
Есть два python-скрипта простенького мессенджера, сервер и клиент, ниже листинг клиента.
Суть проблемы заключается в обработке поведения кнопки в функции
reconnect_button. При нажатии, я отключаюсь от сервера и пытаюсь снова к нему подключиться, вызывая
self.start(), но при нажатии на кнопку, в Traceback выводится:
RuntimeWarning: coroutine 'MainWindow.start' was never awaited. Как мне вклиниться в поток, чтобы выдать ему указание снова подключиться? Приостановить весь поток?
app.py

import asyncio
from asyncio import transports
from PySide2.QtWidgets import QMainWindow, QApplication
from asyncqt import QEventLoop
from interface import Ui_MainWindow

class ClientProtocol(asyncio.Protocol):
    transport: transports.Transport
    window: 'MainWindow'

    def __init__(self, chat_window: 'MainWindow'):
        self.window = chat_window

    def data_received(self, data: bytes):
        decoded = data.decode()
        self.window.append_text(decoded)

    def send_data(self, message: str):
        encoded = message.encode()
        self.transport.write(encoded)

    def connection_made(self, transport: transports.BaseTransport):
        self.window.append_text("Connected")
        self.transport = transport

    def connection_lost(self, exception):
        self.window.append_text("Disconnected")

class MainWindow(QMainWindow, Ui_MainWindow):
    protocol: ClientProtocol
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.message_button.clicked.connect(self.messagebutton_handler)
        self.reconnect_button.clicked.connect(self.reconnect_handler)

    def messagebutton_handler(self):
        message_text = self.message_input.text()
        self.message_input.clear()
        self.protocol.send_data(message_text)

    def reconnect_handler(self):
        self.message_box.clear()
        self.protocol.transport.close()
        self.start()

    def append_text(self, content: str):
        self.message_box.appendPlainText(content)

    def build_protocol(self):
        self.protocol = ClientProtocol(self)
        return self.protocol

    async def start(self):
        event_loop = asyncio.get_running_loop()
        coroutine = event_loop.create_connection(
            self.build_protocol,
            "127.0.0.1",
            8888
        )
        await asyncio.wait_for(coroutine, 1000)

app = QApplication()
loop = QEventLoop(app)
asyncio.set_event_loop(loop)
window = MainWindow()
loop.create_task(window.start())
window.show()
loop.run_forever()

def reconnect_handler(self):
    self.message_box.clear()
    self.protocol.transport.close()
    asyncio.ensure_future(self.start())

или

    loop.create_task(self.start())

Асинхронную функцию нужно запланировать к выполнению - поставить на loop, если она вызывается из синхронного кода.


помогите разобраться с мультипоточностью Python
Вопрос банальный но что-то я уперся в стену непонимания.
есть 2 функции условно f1 и f2
все примеры показывают как запихнуть в параллельные потоки f1.
мне же нужно чтобы параллельно выполнялись f1 и f2

Две функции выполняются одновременно:
<code>
from threading import Thread
import time

def f1():
    while True:
        print('f1')
        time.sleep(1)

def f2():
    while True:
        print('f2')
        time.sleep(1)

thread_1 = Thread(target=f1)
thread_1.start()

thread_2 = Thread(target=f2)
thread_2.start()
</code>


не могу установить pip: "cannot import name 'PackageFinder' from 'pip._internal.index'"
На команду:
py -m pip install -U pip
Выдает:

Traceback (most recent call last):
  File "C:\Users\User\AppData\Local\Programs\Python\Python38-32\lib\runpy.py", line 193, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Users\User\AppData\Local\Programs\Python\Python38-32\lib\runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "C:\Users\User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pip\__main__.py", line 16, in <module>
    from pip._internal import main as _main  # isort:skip # noqa
  File "C:\Users\User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pip\_internal\__init__.py", line 40, in <module>
    from pip._internal.cli.autocompletion import autocomplete
  File "C:\Users\User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pip\_internal\cli\autocompletion.py", line 8, in <module>
    from pip._internal.cli.main_parser import create_main_parser
  File "C:\Users\User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pip\_internal\cli\main_parser.py", line 11, in <module>
    from pip._internal.commands import (
  File "C:\Users\User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pip\_internal\commands\__init__.py", line 6, in <module>
    from pip._internal.commands.completion import CompletionCommand
  File "C:\Users\User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pip\_internal\commands\completion.py", line 6, in <module>
    from pip._internal.cli.base_command import Command
  File "C:\Users\User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pip\_internal\cli\base_command.py", line 26, in <module>
    from pip._internal.index import PackageFinder
ImportError: cannot import name 'PackageFinder' from 'pip._internal.index' (C:\Users\User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pip\_internal\index\__init__.py)

как установить pip?
помогите, пожалуйста

Ошибка в pip
Попробуйте сделать так, чтобы поставить старшую, стабильную версию:
<code>
python get-pip.py pip==19.3.1
</code>


Не выводится текст
Всем привет. Быстро распишу смысл программы. При вписании в строку enter текста help и нажатие на кнопку btn, в строку HowCanProgram должно вывестись слово "Текст". Текст не выводится. Буду благодарен, если напишите, где я допустил ошибку. Вот код:
<code>
from tkinter import *
import keyboard
from time import sleep

def cmd():
    x = enter.get()
    enter.delete(0, END)
    if x == "help":
        HowCanProg.insert(0, "Текст")

window = Tk()
window.geometry("720x480")
window.resizable(False, False)
window.title("PyHelper")

HowCanProg = Entry(window, state="disabled")
HowCanProg.place(x = 0, y = 0, width=703, height=460)

enter = Entry(window)
enter.place(x = 20, y = 460, width=682)

scroll = Scrollbar(window)
scroll.pack(side=RIGHT, fill=Y)

text = Label(window, text=">")
text.place(x = 3, y = 459)

btn = Button(window, text="Отправить", command=cmd)
btn.place(x = 633, y = 460, height=21)

window.mainloop()
</code>

В tkinter нельзя что-то записать в неактивное (disabled) текстовое поле. Перед выводом снимайте неактивность, потом возвращайте обратно:
<code>
def cmd():
    x = enter.get()
    enter.delete(0, END)
    if x == "help":
        HowCanProg.configure(state=NORMAL)
        HowCanProg.insert(0, "Текст")
        HowCanProg.configure(state=DISABLED)
</code>


Работа цикла while в работе [закрыт]

Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

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

Закрыт 3 года назад.

                        Улучшить вопрос

Имеется код
<code>
print("Введите исходные данные")
print("x0 = ", end='')
x0 = float(input())
print("hx = ", end='')
hx = float(input())
print("xn = ", end='')
xn = float(input())

print("Вы ввели:")
print("x0 = %.1f  xs = %.1f  x2 = %.31f" % (x0, hx , xn))
x = x0
y = 0
n=int(1)
round(n)
while x <= xn + hx/2:
    if x >= -2 and x <= -1:
       y = (2*x + 4)
    elif x > -1 and x <= 1:
       y = (x**2)*2
    elif x > 1 and x <= 2:
       y = -2*x + 2
    else:
       y = ("Error")

print("x = %.1f  y = %.1f" % (x,y))
x += hx
</code>
И почему-то он не работает так,как нужно.Объясните пожалуйста дураку,в чем дело.


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

from pynput import keyboard

mass = ['0', '0', '0', '0', '0', '0,']
obraz_m = ["'m'", "'i'", "'c'", "'u'", "'r'", "'i'"]
obraz_naz = ["'g'", "'o'", "'b'", "'a'", "'c'", "'k'"]

#sost = False

def naz(key):
    try:
        sost = sost
    except NameError:
        sost = False
        print('отладочное сообщение')
    mass[0] = mass[1]
    mass[1] = mass[2]
    mass[2] = mass[3]
    mass[3] = mass[4]
    mass[4] = mass[5]
    key = str(key)
    mass[5] = key
    print(mass)
    print(sost)
    if mass == obraz_m and sost == False:
        print('horay')
        sost = True
        print(sost)
    elif mass == obraz_naz and sost == True:
        print('back tak back')
        sost = False
        print(sost)

def otz(key):
    if key == keyboard.Key.esc:
         return False

with keyboard.Listener(on_press=naz, on_release=otz) as listener:
    listener.join()

А если подать второй аргумент, то появляется такая ошибка:

Unhandled exception in listener callback
Traceback (most recent call last):
  File "C:\Program Files (x86)\Python37-32\lib\site-packages\pynput\_util\__init__.py", line 162, in inner
    return f(self, *args, **kwargs)
  File "C:\Program Files (x86)\Python37-32\lib\site-packages\pynput\keyboard\_win32.py", line 280, in _process
    self.on_press(key)
  File "C:\Program Files (x86)\Python37-32\lib\site-packages\pynput\_util\__init__.py", line 78, in inner
    if f(*args) is False:
TypeError: naz() missing 1 required positional argument: 'key'
Traceback (most recent call last):
  File "C:/Users/Kirill/Desktop/cmena_oboi/main.py", line 41, in <module>
    listener.join()
  File "C:\Program Files (x86)\Python37-32\lib\site-packages\pynput\_util\__init__.py", line 210, in join
    six.reraise(exc_type, exc_value, exc_traceback)
  File "C:\Program Files (x86)\Python37-32\lib\site-packages\six.py", line 695, in reraise
    raise value.with_traceback(tb)
  File "C:\Program Files (x86)\Python37-32\lib\site-packages\pynput\_util\__init__.py", line 162, in inner
    return f(self, *args, **kwargs)
  File "C:\Program Files (x86)\Python37-32\lib\site-packages\pynput\keyboard\_win32.py", line 280, in _process
    self.on_press(key)
  File "C:\Program Files (x86)\Python37-32\lib\site-packages\pynput\_util\__init__.py", line 78, in inner
    if f(*args) is False:
TypeError: naz() missing 1 required positional argument: 'key'

А если переменную sost использовать как глобальную в функции? Видимо ты пытался, но из за того, что она была локальной, тебе било ошибку.
<code>
from pynput import keyboard

mass = ['0', '0', '0', '0', '0', '0,']
obraz_m = ["'m'", "'i'", "'c'", "'u'", "'r'", "'i'"]
obraz_naz = ["'g'", "'o'", "'b'", "'a'", "'c'", "'k'"]

sost = False

def naz(key):
    global sost
    mass[0] = mass[1]
    mass[1] = mass[2]
    mass[2] = mass[3]
    mass[3] = mass[4]
    mass[4] = mass[5]
    key = str(key)
    mass[5] = key
    print(mass)
    print(sost)
    if mass == obraz_m and sost == False:
        print('horay')
        sost = True
        print(sost)
    elif mass == obraz_naz and sost == True:
        print('back tak back')
        sost = False
        print(sost)

def otz(key):
    if key == keyboard.Key.esc:
         return False

with keyboard.Listener(on_press=naz, on_release=otz) as listener:
    listener.join()
</code>


Подскажите,почему функция не воспроизводится,и при любых входных коэффициентах(где дискриминант больше 0)выдает "id"?
Подскажите,почему функция не воспроизводится,и при любых входных коэффициентах (где дискриминант больше 0) выдает “id”?
<code>
import math
print("Запишите коэффициенты данного квадратного уравнения: ax^2 + bx + c = 0 ")
def cof(d, e, f):
    return (d ** 2 - 4 * e * f)
def root1(b, cof, a):
    return (- b + math.sqrt(cof())) / (2 * a)
def root2(b, cof, a):
    return (- b - math.sqrt(cof())) / (2 * a)

a = float(input("a = "))
b = float(input("b = "))
c = float(input("c = "))
if (a != 1):
    #Disk = cof(a, b, c)
    if (cof(a, b, c) > 0):
        print("Дискриминант D = %.2f" % (cof(a, b, c)))
    else:
        print("ld")
</code>

Потому что для большей наглядности следует помнить о значащих именах переменных. Вы передаёте в
cof аргументы
(a, b, c), и, исходя из тела этой функции, считаете дискриминант по формуле
a**2 - 4*b*c. В то же время реальная формула -
b**2 - 4*a*c.
Именно из-за абстрактных
d, e, f вы и не увидели эту ошибку

import math
print("Запишите коэффициенты данного квадратного уравнения: ax^2 + bx + c = 0 ")
def cof(a, b, c):
    return (b**2 - 4*a*c)

def root1(b, cof, a):
    return (- b + math.sqrt(cof())) / (2 * a)

def root2(b, cof, a):
    return (- b - math.sqrt(cof())) / (2 * a)

a = float(input("a = "))
b = float(input("b = "))
c = float(input("c = "))
if (a != 1):
    if (cof(a, b, c) > 0):
        print("Дискриминант D = %.2f" % (cof(a, b, c)))
    else:
        print("ld")

Запишите коэффициенты данного квадратного уравнения: ax^2 + bx + c = 0
a = 2
b = 5
c = 2
Дискриминант D = 9.00


одновременная работа 2ух скриптов
Есть проект, в нём 2 файла:
1 файл с именем Server.py

import socket
server_socket = socket.socket()
server_socket.bind(('127.0.0.1', 5090))
server_socket.listen(1)
conn, addr = server_socket.accept()
#content = 'hello friend'
#answer = sock.sendall((content).encode())
print ('connected:', addr)

while True:
    data = conn.recv(1024)
    if not data:
        break
    conn.send(data.upper())

conn.close()

И 2 файл с именем Client.py

import socket

sock = socket.socket()
sock.connect(('127.0.0.1', 5090))
sock.send('hello, world!')

data = sock.recv(1024)
sock.close()

print (data)

Как сделать их одновременное выполнение? Или по другому говоря чтобы их соединить

Решение через
subprocess:

import subprocess
import sys
import time

server = subprocess.Popen([sys.executable, 'server.py'])
time.sleep(2)  # Даем время серверу на запуск

client = subprocess.Popen([sys.executable, 'client.py'])

server.wait()

server.py:

import socket
server_socket = socket.socket()
server_socket.bind(('127.0.0.1', 5090))
server_socket.listen(1)
conn, addr = server_socket.accept()
print('connected:', addr)

while True:
    data = conn.recv(1024)
    if not data:
        break
    conn.send(data.upper())

conn.close()

print('closed')

client.py:

import socket

sock = socket.socket()
sock.connect(('127.0.0.1', 5090))
sock.send('hello, world!'.encode('utf-8'))

data = sock.recv(1024)
sock.close()


Сортировка списка в Python с параметром reverse
При сортировке такого списка

A = [22, 44, 11, 12, 99, 88]

с помощью метода sorted с объявленными параметрами key и reverse

B = sorted(A, key=lambda x: len(str(x)), reverse=True)
C = sorted(A, key=lambda x: len(str(x)), reverse=False)

на выходе получается два одинаковых списка B и С, а именно:

[22, 44, 11, 12, 99, 88]

Почему так происходит?

Параметр
reverse явно задаёт порядок сортировки, а не разворачивает список в конце.
В этом и есть принципиальное отличие. Т.к. в вашем случае для сортировщика все элементы равны, вы и получаете два равных списка для прямой и обратной сортировки.
Хотите получить два зеркальных - используйте
sorted(A, key=lambda x: len(str(x))) и
reversed(sorted(A, key=lambda x: len(str(x)))), тогда результаты всегда будут зеркальными


Как сделать сводную ("перевернуть") таблицу?
Есть таблица с данными:

ID модели | модель | категория характеристики | название характеристики | характеристика

Пример :

1 | Phillips 100 | size  | length   | 100
1 | Phillips 100 | size  | width    | 200
1 | Phillips 100 | size  | height   | 200
1 | Phillips 100 | screen| diagonal | 25
1 | Phillips 100 | price |          | 100$
2 | Phillips 200 | size  |  width   | 300
2 | Phillips 200 | size  |  height  | 300
3 | Phillips 300 | tech  |  smart tv| 3 generation

То есть, количество строк для каждой модели может отличаться, в третьей колонке может быть пустое значение.
Я хочу из этого сделать CSV для импорта в БД, то есть подобной структуры:

id| name        | size_length| size_width| size_height|screen_diagonal|price|tech_smart_tv
1 | Phillips 100| 100        | 200       | 200        | 25            | 100$| 3 generation

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

f = open('folder/table.csv', 'r')
    lines = f.readlines()

#Далее создаю цикл while, для разделения по id
i = 0
while i < int(lines[-1].split(';')[0]):

    #Достаю список элементов с id 1 (и далее по циклу)
    target = [item for item in lines if item.split(';')[0] == str(i+1)]

    for lis in target:
        #Разбиваю строки по ячейкам
        ttarg = lis.split(';')

        # А вот дальше начинаются проблемы, т.к. не могу корректно вытащить
        # нужные мне значения
        # Пытаюсь подобным образом:
            try:
                n_nn = [item for item in ttarg if ttarg[2].find('ch_cat')
                != -1
                and ttarg[3].find('ch_name')!= -1 ]
            except:
                pass
        # Но это работает некорректно, как и опробованные ранее
         варианты(инкремент while на месте)

Воспользуйтесь модулем Pandas:

import pandas as pd   # pip install pandas

df = pd.read_csv(filename, sep=";", header=None,
                 names=["id", "name", "attr1", "attr2", "val"])
df = df.assign(col=df.pop("attr1")+"_"+df.pop("attr2").fillna(""))
df["col"] = df["col"].str.replace(r"_$", "")
res = (df.pivot_table(index=["id", "name"], columns="col",
                     values="val", aggfunc="first", fill_value="")
         .reset_index())
res.to_csv("c:/temp/res.csv", index=False, sep=";")

результат (
c:/temp/res.csv):

id;name;price;screen_diagonal;size_height;size_length;size_width;tech_smart tv
1;Phillips 100;100$;25;200;100;200;
2;Phillips 200;;;300;;300;
3;Phillips 300;;;;;;3 generation


Программа которая обнаруживает пропуски в названиях программ
Есть папка, в которой есть файлы spam001, spam002 и так далее. Если например spam003 отсутствует, нужно чтобы программа создала файл, что бы устранить пропуск.
Извините что нет кода, я новичок я не понимаю как это реализовать;(
Заранее спасибо

Получить список имён файлов в папке
Выделить из каждого элемента списка числа
Обойти список, на каждой итерации проверяя, что значение текущего элемента соответствует его порядковому номеру


Код выдаёт ошибку [закрыт]

Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

 Вопросы с просьбами помочь с отладкой («почему этот код не работает?») должны включать желаемое поведение, конкретную проблему или ошибку и минимальный код для её воспроизведения прямо в вопросе. Вопросы без явного описания проблемы бесполезны для остальных посетителей. См. Как создать минимальный, самодостаточный и воспроизводимый пример.

Закрыт 3 года назад.

                        Улучшить вопрос

Выдаёт ошибку с tkinter, делаю словарик, не могу понять, что не правильно
<code>
from tkinter import *
    text = open('slovar.txt', 'w+')
    words = {}
    perevod_word = ''
    perevod_word1 = ''
    def update1(dict):
        with open("slovar.txt") as file:
            for line in file:
                key, *value = line.split()
                words[key] = value
    def rus1():
        global perevod_word
        perevod_word = entrus2.get()
    def eng1():
        global perevod_word1
        perevod_word1 = enteng2.get()
    def rus():
        slovo1 = entrus1.get()
        if slovo1 in words:
            print(words.get(slovo1))
        else:
            print('Не найдено')
            print('Введите значение слова по Английски')
            rus1()
            perevod1 = perevod_word
            slovo1, perevod1 = perevod1, slovo1
            words[slovo1] = perevod1
            up = slovo1 + ' : ' + perevod1 + ', '
            text.write(up)
        print(words)
    def eng():
        slovo2 = enteng1.get()
        eng_words=dict([[v, k] for k,v in words.items()])
        if slovo2 in eng_words:
            print(eng_words.get(y))
        else:
            print('Не найдено')
            print('Введите значение слова по Русски')
            eng1()
            perevod2 = perevod_word1
            words[slovo2] = perevod2
            up = slovo2 + ' : ' + perevod2 + ', '
            text.write(up)
        print(words)
    def w2():
        d = Tk()
        d.geometry('200x200')
        d.title('Русско-английский')
        te = Text(d, text='Введите слово:')
        te.grid()
        entrus1 = Entry(d)
        entrus1.grid()
        button_check = Button(d, text='Ready!', command=rus)
        button_check.grid()
        entrus2 = Entry(d)
        entrus2.grid()
        button_check1 = Button(d, text='Ready!', command=rus1)
        button_check1.grid()
        d.mainloop()
    def w1():
        k = Tk()
        k.geometry('200x200')
        k.title('Англо-русский')
        te = Text(k, text='Введите слово:')
        te.grid()
        ent = Entry(k)
        ent.grid()
        button_check = Button(k, text='Ready!', command=eng)
        button_check.grid()
        k.mainloop()
    def main():
        root = Tk()
        root.title('Переводчик')
        root.geometry('400x400')
        but1 = Button(root, text='Русско-английский', command=w2)
        but1.grid()
        but2 = Button(root, text='Англо-русский', command=w1)
        but2.grid()
        root.mainloop()
    def glav():
        update1(words)
        main()
    glav()
</code>

Вы неправильно заполняете Text виджет
<code>
te = Text(d)
te.insert(END, 'Введите слово:')
</code>


Как исправить ошибку RecursionError: maximum recursion depth exceeded in __instancecheck__
Есть часть кода
<code>
class Creat_Timetable():
    def __init__(self):

        self.all_hours_start = [8,9,10,11,12,13,14]
        self.all_minutes_start = [28,23,28,28,23,28,23]

        Creat_Timetable.CreatWin(self)

    def CreatWin(self): # Создаём главное окно
        global main_win, time

        main_win = Tk ()
        main_win.resizable ( width=False,height=False )
        main_win.geometry ( "700x400")
        main_win.title ( "Timetable" )

        time = Label ( text="" )
        time.place ( x=323,y=0)

        Monday = Label (main_win, text="понедельник" )
        Tuesday = Label (main_win, text="вторник" )
        Wednesday = Label (main_win, text="среда" )
        Thursday = Label (main_win, text="четверг" )
        Friday = Label (main_win, text="пятница" )

        Monday.place ( x=10,y=50 )
        Tuesday.place ( x=190,y=50 )
        Wednesday.place ( x=340,y=50 )
        Thursday.place ( x=450,y=50 )
        Friday.place ( x=580,y=50 )

        Creat_Timetable.CheckTime ( self)
        main_win.mainloop ()
    def CheckTime(self):  # Проверка времяни для сбора информации
        now = datetime.now ()

        if now.minute < 10:
            time_n = str ( now.hour )+":0"+str ( now.minute )
        else:
            time_n = str(now.hour) + ":" + str(now.minute)

        time.configure(text=str(time_n))

        for i in range(0,len(self.all_hours_start)):
            if self.all_minutes_start[i] < 10:
                time_l = str (self.all_hours_start[i] )+":0" + str(self.all_minutes_start[i])
            else:
                time_l = str(self.all_hours_start[i]) + ":" + str(self.all_minutes_start[i])

            if time_n == time_l: # Если время нужное
                print ( app2.schoolParse () )  # Выводим что спарсила программа
                del self.all_hours_start[i], self.all_minutes_start[i] # Удаляем не нужное время
        main_win.after(100000,Creat_Timetable.CheckTime(self))
</code>
выдаёт ошибку

Traceback (most recent call last):
    File "/Users/lrd/PycharmProjects/schedule_creation/venv/include/main.py", line 65, in
      Creat_Timetable()
    File "/Users/lrd/PycharmProjects/schedule_creation/venv/include/main.py", line 11, in init
      Creat_Timetable.CreatWin(self)
    File "/Users/lrd/PycharmProjects/schedule_creation/venv/include/main.py", line 36, in CreatWin
      Creat_Timetable.CheckTime ( self)
    File "/Users/lrd/PycharmProjects/schedule_creation/venv/include/main.py", line 62, in CheckTime
      main_win.after(100000,Creat_Timetable.CheckTime(self))
    File "/Users/lrd/PycharmProjects/schedule_creation/venv/include/main.py", line 62, in CheckTime
      main_win.after(100000,Creat_Timetable.CheckTime(self))
    File "/Users/lrd/PycharmProjects/schedule_creation/venv/include/main.py", line 62, in CheckTime
      main_win.after(100000,Creat_Timetable.CheckTime(self))
    [Previous line repeated 988 more times]
    File "/Users/lrd/PycharmProjects/schedule_creation/venv/include/main.py", line 50, in CheckTime
      time.configure(text=str(time_n))
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/tkinter/init.py", line 1485, in configure
      return self._configure('configure', cnf, kw)
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/tkinter/init.py", line 1469, in _configure
      cnf = _cnfmerge((cnf, kw))
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/tkinter/init.py", line 100, in _cnfmerge
      elif isinstance(cnfs, (type(None), str)):
  RecursionError: maximum recursion depth exceeded in instancecheck

В этой строке:

main_win.after(100000,Creat_Timetable.CheckTime(self))

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

main_win.after(100000, self.CheckTime)

В целом, конструкции вида
ИмяКласса.метод(self) лучше везде заменить на
self.метод() - это одно и то же по сути, но так проще читается. Вызвать метод через класс имеет смысл только для методов класса и статических методов (т.е. для методов с аннотациями
@classmethod и
@staticmethod).
Также я бы посоветовал при использовании ООП избавиться от использования глобальных переменных. Вместо глобальных переменных используйте поля объекта.


Как мне подключить функций и объекты находящиеся внутри файла в разных папках?
Я запускаю файл находящийся в директории.

python/folder/test_1.py

И мне нужно получить функций из файлов test_2.py и test_3.py
Но способы которые я пробовал не работают.

#python/folder/test/test_2.py
from test.test_2 import fun_1, fun_2, fun_3
#python/test_3.py
sys.path += ['~/python']
from test_3 import fun_1, fun_2, fun_3

Что я делаю не так?

Измените имя папки
test, например на
testing, и ваш первый импорт
from testing.test_2 import fun_1, fun_2, fun_3 будет в Питоне 3.3+ работать.
Имя
test для пакета опасно, т.к. это имя регулярного пакета — папки
Lib\test\ в папке вашей инсталляции Питона, и потому что папка
Lib автоматически находится в списке
sys.path (который команда
import осматривает), ваш пакет
test.test_2 будет Питон искать не в вашей папке test, a в своей
Lib\test\:

>>> import test
>>> test.__path__
['C:\\Program Files\\Python37\\lib\\test']

Для Питона до версии 3.2 включительно:
Добавите файл с именем
__init__.py (может быть пустой) в папки
python,
folder,
testing,
test2,
test3, чтобы Питон узнал, что эти папки содержат пакеты.
Для всех версий Питона:
Перед командой
from test_3 import fun_1, fun_2, fun_3 добавите путь к папке, в которой находится папка
test3, например

sys.path += [r'C:\Users\user\python']


Explorer.exe запускается в виде проводника, а не графической оболочки
Если запустить скрипт, который убивает графическую оболчку windows (explorer.exe), а затем в этом же скрипте вызвать этот explorer.exe обратно, то он запустится в виде проводника, а не графической оболочки.
Если же ввести все то же самое вручную, то запускается граф. оболочка. Как решить проблему?
Код на vbs:

Do
set t = createobject("wscript.shell")
t.run"taskkill /f /im explorer.exe"
t.run"explorer.exe"

даже если указать полный путь до эксплорера или запустить от имени администратора, то он все равно будет запускаться как проводник.
Код на python: (тот же результат, не запускается как надо)

import os
os.system('taskkill /f /im explorer.exe')
os.system('explorer.exe')

Данная проблема связана с тем, что вы запускаете explorer из 32-битного интерпретатора. Если вы запустите из 64-битного то ваши команды будут работать.
Либо можно напрямую прописать путь до 64-битной cmd, она находиться в папке sysnative.
(когда вы обращаетесь без абсолютного пути, то по дефолту запускается cmd из C:\Windows\system32)
<code>
import os
os.system('taskkill /f /im explorer.exe')
os.system('%systemroot%\sysnative\cmd.exe /c start explorer.exe')
</code>


Как отсортировать данные в txt файле?
В первом файле содержатся разные (одинаковых нет) ip адреса
Во втором содержаться записи по типу:

55.145.78.252 28/Feb/2020:06:27:33 +0100 "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1)"
Как отсортировать данные во втором файле, чтобы они были отсортированы по ip из первого файла?
Например был взят 55.145.78.252 адрес и во втором файле с таким ip есть 10 записей по всему файлу. Чтобы он записал эти записи и дальше перешел к следующему адресу

with open("ips.txt", "r") as fp:
    ips = list(map(str.rstrip, fp))  # Считываем из файла все адреса

with open("records.txt", "r") as fp:
    records = list(map(str.rstrip, fp))  # Считываем из другого файла записи

records.sort(key=lambda x: ips.index(x.split()[0]))  # Сортируем записи по нахождению адреса в списке адресов

with open("sorted_records.txt", "w") as fp:
    fp.write("\n".join(records))  # Записываем отсортированные записи


Вопрос по теме "Множества"
<code>
>>> bri = set(['Бразилия', 'Россия', 'Индия'])
>>> 'Индия' in bri
True
>>> 'США' in bri
False
>>> bric = bri.copy()
>>> bric.add('Китай')
>>> bric.issuperset(bri)
True
>>> bri.remove('Россия')
>>> bri & bric # OR bri.intersection(bric)
{'Бразилия', 'Индия'}
</code>
Доброго времени суток всем. Кто может подробно расписать по пунктам что происходит в этой операции?
Мне для общего понимания хода вещей.

Состояние после первых 5 команд:

In[6]: bri
Out[6]: {'Бразилия', 'Индия', 'Россия'}
In[7]: bric
Out[7]: {'Бразилия', 'Индия', 'Китай', 'Россия'}

bric.issuperset(bri)
«Разве
bric является надмножеством
bri?».
Когда
True, это значит, что каждый элемент из
bri тоже находится в
bric.

bri.remove('Россия')
Элемент
'Россия' удалится из множества
bri.
Состояние после этого:

In[9]: bri
Out[9]: {'Бразилия', 'Индия'}
In[10]: bric
Out[10]: {'Бразилия', 'Индия', 'Китай', 'Россия'}

bri & bric # OR bri.intersection(bric)
«Пересечение множеств
bri и
bric».
Множество общих элементов из
bri и
bric; другими словами, множество тех элементов, которые находятся так в множестве
bri, как и в множестве
bric.


Изменение массива с помощью массива индексов
Есть два массива: один массив индексов, другой — массив элементов.
Хочу в массиве элементов изменить элементы (к примеру, вычесть 1), которые соответствуют индексам, находящимися в массиве индексов (без циклов).
К примеру (на вычитание 1):
Исходные данные:

array1 = [[1, 2, 3, 4], [10, 11, 12, 13]], indexes = [[1], [3]]

Ожидаемый результат:

array1 = [[1, 1, 3, 4], [10, 11, 12, 12]]


Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение. Что не так?
<code>
import pyowm
import telebot
import config

owm = pyowm.OWM('977177690:AAHGtD3f9BGUSLOQTDwDnHdKNVFlyWJmi4c', language = "ru")
bot = telebot.TeleBot(config.TOKEN)

@bot.message_handler(content_types=['text'])
def send_echo(message):
    observation = owm.weather_at_place( message.text )
    w = observation.get_weather()
    temp = w.get_temperature('celsius')["temp"]
    wind = w.get_wind()["speed"]
    humidity = w.get_humidity()

    answer = "В " + message.text + " сейчас " + str(temp) + " градусов по Цельсию" + "\n"
    answer += "Скорость ветра " + str(wind) + " м/с"
    answer += "Влажность " + str(humidity) + " %"

    temp_1 = round(temp)

    if temp_1 in range(-50,-26):
        answer += "Колотун 0_0, надевай валенки, маж харю жиром"
    if temp_1 in range(-25,-20):
        answer += "Не забудь варежки!"
    if temp_1 in range(-19,-10):
        answer += "Зябко, но жить можно"
    if temp_1 in range(-9,0):
        answer += "Можно и прогуляться"
    if temp_1 in range(1,10):
        answer += "Хорошая погода, но лёгкую куртку стоит одеть"
    if temp_1 in range(11,18):
        answer += "оооо, тепленько"
    if temp_1 in range(19,25):
        answer += "Время шортиков!"
    if temp_1 in range(25,40):
        answer += "Держись ближе к кондёру!"

    bot.send_message(message.chat.id, answer)

bot.polling( none_stop = True )
</code>

Надо vpn включить или прокси, в настройках vpn ставь не Россию


Как изменить символ перед определенным словом
Задача: Перед каждым словом  BACKSPACE  в файле нужно убрать 1 символ.
К примеру: в файле следующие данные: Hello user BACKSPACE .
После выполнения программы, должно получиться: Hello use BACKSPACE .
<code>
 with open('log.txt', 'r') as f:
 old_data = f.read()

 new_data = old_data.replace(' BACKSPACE ', 'на_что_меняем')

 with open('log.txt', 'w') as f:
 f.write(new_data)
</code>

Если вам нужно во всём тексте убрать букву перед
' BACKSPACE', используйте регулярные выражения:

import re

s = ""
with open('log.txt') as f:
    s = f.read()
    # если после BACKSPACE тоже должен быть пробел - в первых кавычках добавляем \s, а во вторых - пробел
    # т.е. re.sub(r".\sBACKSPACE\s", " BACKSPACE ", s)
    s = re.sub(r".\sBACKSPACE", " BACKSPACE", s)
with open('low.txt', 'w') as f:
    f.write(s)


Как дешифровать текст?
Есть код, который шифрует текст (текст разбивается на группы из 5 элементов, в каждой группе символы записываются в обратном порядке, далее переставляются сами группы символов). Нужно дешифровать, то есть вернуть исходный текст.
<code>
s = input('Введите строку: ')
# убираем все знаки препинания и тд., оставляем только буквы и цифры
s = ''.join(e for e in s if e.isalnum())
# разделим на части и сразу развернем текст
s = [s[i:i+5][::-1] for i in range(0, len(s), 5)]
# теперь развернем группы
random.shuffle(s)
print(s)
</code>

Наслаждайтесь :)
Единственное, нужно передовать ключ. В роли ключа здесь выступает набор из 624 целых чисел в диапазоне от 0 до 4294967294.  Они используются для составления матрицы Мерсенна, по которой, в последствии, прогнозируются случайные числа, используемые в шифровании.
Ваш алгоритм шифрования я не менял, только добавил дешифровку.
<code>
import random, time

'''
 ------------------------------ ENCODE ------------------------------
'''

class Encoder():
    def __init__(self):
        self.key = []

    def castom_shuffle(self, lst):
        for i in range(len(lst)-1, 0, -1):
            j = random.randint(0, i)
            lst[i], lst[j] = lst[j], lst[i]

    def encode(self, text):
        if not text:
            raise ValueError("Unable to encrypt blank text")

        s = ''.join(e for e in text if e.isalnum())
        s = [s[i:i+5][::-1] for i in range(0, len(s), 5)]

        for i in range(624):
            self.key.append(random.getrandbits(32))

        self.castom_shuffle(s)
        return ' '.join(s), self.key

'''
 ------------------------------ DECODE ------------------------------
'''
class Decoder:
    def __init__(self, key):
        self.counter = 0
        self.mt = []
        self.state = False

        for i in key:
            self.submit(i)

    def decode(self,text):
        s = text.split()
        self.predict_shuffle(s)
        return ''.join([i[::-1] for i in s])

    def submit(self, num):
        if self.state:
            raise ValueError("Already got enough bits")

        bits = self._to_bitarray(num)

        assert (all([x == 0 or x == 1 for x in bits]))
        self.counter += 1
        self.mt.append(self._harden_inverse(bits))
        if self.counter == 624:
            self._regen()
            self.state = True

    def _predict_32(self):
        if not self.state:
            raise ValueError("Didn't recieve enough bits to predict")

        if self.counter >= 624:
            self._regen()
        self.counter += 1

        return self._harden(self.mt[self.counter - 1])

    def predict_getrandbits(self, k):
        if not self.state:
            raise ValueError("Didn't recieve enough bits to predict")

        if k == 0:
            return 0
        words = (k - 1) // 32 + 1
        res = []
        for i in range(words):
            r = self._predict_32()
            if k < 32:
                r = [0] * (32 - k) + r[:k]
            res = r + res
            k -= 32
        return self._to_int(res)

    def predict_randbelow(self, n):
        k = n.bit_length()
        r = self.predict_getrandbits(k)
        while r >= n:
            r = self.predict_getrandbits(k)
        return r

    def predict_randrange(self, start, stop=None, step=1, _int=int):
        istart = _int(start)
        if istart != start:
            raise ValueError("non-integer arg 1 for randrange()")
        if stop is None:
            if istart > 0:
                return self.predict_randbelow(istart)
            raise ValueError("empty range for randrange()")

        istop = _int(stop)
        if istop != stop:
            raise ValueError("non-integer stop for randrange()")
        width = istop - istart
        if step == 1 and width > 0:
            return istart + self.predict_randbelow(width)
        if step == 1:
            raise ValueError("empty range for randrange() (%d,%d, %d)" % (istart, istop, width))

        istep = _int(step)
        if istep != step:
            raise ValueError("non-integer step for randrange()")
        if istep > 0:
            n = (width + istep - 1) // istep
        elif istep < 0:
            n = (width + istep + 1) // istep
        else:
            raise ValueError("zero step for randrange()")

        if n <= 0:
            raise ValueError("empty range for randrange()")

        return istart + istep * self.predict_randbelow(n)

    def predict_randint(self, a, b):
        return self.predict_randrange(a, b + 1)

    def predict_shuffle(self, seq):
        rr = [self.predict_randint(0, i) for i in range(len(seq)-1, 0, -1)]
        rr.reverse()
        for i in range(1,len(seq)):
            j = rr[i-1]
            seq[i], seq[j] = seq[j], seq[i]

    def _to_bitarray(self, num):
        k = [int(x) for x in bin(num)[2:]]
        return [0] * (32 - len(k)) + k

    def _to_int(self, bits):
        return int("".join(str(i) for i in bits), 2)

    def _or_nums(self, a, b):
        if len(a) < 32:
            a = [0] * (32 - len(a)) + a
        if len(b) < 32:
            b = [0] * (32 - len(b)) + b

        return [x[0] | x[1] for x in zip(a, b)]

    def _xor_nums(self, a, b):
        if len(a) < 32:
            a = [0] * (32 - len(a)) + a
        if len(b) < 32:
            b = [0] * (32 - len(b)) + b

        return [x[0] ^ x[1] for x in zip(a, b)]

    def _and_nums(self, a, b):
        if len(a) < 32:
            a = [0] * (32 - len(a)) + a
        if len(b) < 32:
            b = [0] * (32 - len(b)) + b

        return [x[0] & x[1] for x in zip(a, b)]

    def _decode_harden_midop(self, enc, and_arr, shift):
        NEW = 0
        XOR = 1
        OK = 2
        work = []
        for i in range(32):
            work.append((NEW, enc[i]))
        changed = True
        while changed:
            changed = False
            for i in range(32):
                status = work[i][0]
                data = work[i][1]
                if i >= 32 - shift and status == NEW:
                    work[i] = (OK, data)
                    changed = True
                elif i < 32 - shift and status == NEW:
                    if and_arr[i] == 0:
                        work[i] = (OK, data)
                        changed = True
                    else:
                        work[i] = (XOR, data)
                        changed = True
                elif status == XOR:
                    i_other = i + shift
                    if work[i_other][0] == OK:
                        work[i] = (OK, data ^ work[i_other][1])
                        changed = True

        return [x[1] for x in work]

    def _harden(self, bits):
        bits = self._xor_nums(bits, bits[:-11])
        bits = self._xor_nums(bits, self._and_nums(bits[7:] + [0] * 7, self._to_bitarray(0x9d2c5680)))
        bits = self._xor_nums(bits, self._and_nums(bits[15:] + [0] * 15, self._to_bitarray(0xefc60000)))
        bits = self._xor_nums(bits, bits[:-18])
        return bits

    def _harden_inverse(self, bits):
        bits = self._xor_nums(bits, bits[:-18])
        bits = self._decode_harden_midop(bits, self._to_bitarray(0xefc60000), 15)
        bits = self._decode_harden_midop(bits, self._to_bitarray(0x9d2c5680), 7)
        bits = self._xor_nums(bits, [0] * 11 + bits[:11] + [0] * 10)
        bits = self._xor_nums(bits, bits[11:21])

        return bits

    def _regen(self):
        N = 624
        M = 397
        MATRIX_A = 0x9908b0df
        LOWER_MASK = 0x7fffffff
        UPPER_MASK = 0x80000000
        mag01 = [self._to_bitarray(0), self._to_bitarray(MATRIX_A)]

        l_bits = self._to_bitarray(LOWER_MASK)
        u_bits = self._to_bitarray(UPPER_MASK)

        for kk in range(0, N - M):
            y = self._or_nums(self._and_nums(self.mt[kk], u_bits), self._and_nums(self.mt[kk + 1], l_bits))
            self.mt[kk] = self._xor_nums(self._xor_nums(self.mt[kk + M], y[:-1]), mag01[y[-1] & 1])

        for kk in range(N - M - 1, N - 1):
            y = self._or_nums(self._and_nums(self.mt[kk], u_bits), self._and_nums(self.mt[kk + 1], l_bits))
            self.mt[kk] = self._xor_nums(self._xor_nums(self.mt[kk + (M - N)], y[:-1]), mag01[y[-1] & 1])

        y = self._or_nums(self._and_nums(self.mt[N - 1], u_bits), self._and_nums(self.mt[0], l_bits))
        self.mt[N - 1] = self._xor_nums(self._xor_nums(self.mt[M - 1], y[:-1]), mag01[y[-1] & 1])

        self.counter = 0

enc = Encoder()
enc_text, key = enc.encode('случайности не случайны')

dec = Decoder(key)
print(dec.decode(enc_text))
</code>


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

PLATINUM = 10
GOLD = 9

products_by_id = {77: {'type': PLATINUM}, 883: {'type': GOLD}, 9: {'type': PLATINUM}, 714: {'type': GOLD}, 459: {'type': PLATINUM}, 16: {'type': GOLD}, 978: {'type': GOLD}, 403: {'type': GOLD}, 149: {'type': PLATINUM}, 957: {'type': GOLD}, 981: {'type': PLATINUM}}

prices = [{'id': 1, 'product': 149}, {'id': 10, 'product': 9}, {'id': 2, 'product': 957} , {'id': 3, 'product': 77} , {'id': 15, 'product': 983}]

Я хочу отсортировать список
prices так, чтобы впереди шли цены, которые привязаны к продуктам с типом
GOLD
Я могу это сделать так:

>>> sorted(prices, key=lambda p: products_by_id.get(p['product'], {}).get('type') == GOLD, reverse=True)
[{'product': 957, 'id': 2}, {'product': 149, 'id': 1}, {'product': 9, 'id': 10}, {'product': 77, 'id': 3}, {'product': 983, 'id': 15}]

Что выглядит ужасно, да еще и вызывает два метода get(). Можно ли реализовать подобную сортировку более красивым способом? (Не вынося лямбду в "полноценную" функцию)

Для простого перемещения
GOLD элементов в начало списка сортировка не нужна, можно просто создать новый список и все
GOLD элементы добавлять в его начало, а все остальные в конец. В итоге получите тоже самое, только быстрее: сам алгоритм имеет
O(N) сложность + экономите время на вызовах лямбды.

from pprint import pprint

PLATINUM = 10
GOLD = 9

products_by_id = {
                    9: {'type': PLATINUM},
                    16: {'type': GOLD},
                    77: {'type': PLATINUM},
                    149: {'type': PLATINUM},
                    403: {'type': GOLD},
                    459: {'type': PLATINUM},
                    714: {'type': GOLD},
                    883: {'type': GOLD},
                    957: {'type': GOLD},
                    978: {'type': GOLD},
                    981: {'type': PLATINUM}
                }
prices = [
            {'id': 1, 'product': 149},
            {'id': 10, 'product': 9},
            {'id': 2, 'product': 957},
            {'id': 3, 'product': 77},
            {'id': 15, 'product': 983}
        ]

sorted_prices = []
for price in prices:
    if price['product'] in products_by_id and products_by_id[price['product']]['type'] == GOLD:
        sorted_prices.insert(0, price)
    else:
        sorted_prices.append(price)

pprint(sorted_prices)

Output

[{'id': 2, 'product': 957},
 {'id': 1, 'product': 149},
 {'id': 10, 'product': 9},
 {'id': 3, 'product': 77},
 {'id': 15, 'product': 983}]


Подсчитать количество пользователей на канале Telegram
Проблема: после того, как пользователь вводит команду /MembersCount, в аргумент функции getChatMembersCount(channel) ничего не передается.
Как сделать так, чтобы после ввода команды /MembersCount пользователь мог ввести идентификатор канала?
<code>
@bot.message_handler(commands=['start'])
def start_message(msg):
    keyboard1 = telebot.types.ReplyKeyboardMarkup(True, True)
    keyboard1.row('/help', '/MembersCount')
    bot.send_message(msg.chat.id, 'Starting', reply_markup=keyboard1)

@bot.message_handler(commands=['MembersCount'])
def getChatMembersCount(channel):
    bot.get_chat_members_count(chat_id=channel)
</code>

Ответ на ваш вопрос:

sw = {}

@bot.message_handler(commands=['start'])
def start_message(msg):
    keyboard1 = telebot.types.ReplyKeyboardMarkup(True, True)
    keyboard1.row('/help', '/MembersCount')
    bot.send_message(msg.chat.id, 'Starting', reply_markup=keyboard1)
    sw[msg.chat.id] = False

@bot.message_handler(content_types=['text'])
def handler(message):
    if message.chat.id in sw and sw[message.chat.id]:
        count = bot.get_chat_members_count(message.text)
        bot.send_message(message.chat.id, count)
        sw[msg.chat.id] = False

@bot.message_handler(commands=['MembersCount'])
def getChatMembersCount(channel):
    bot.send_message(message.chat.id, 'Input chat_id:')
    sw[msg.chat.id] = True

Но лучше, сделайте так, чтобы идентификатор канала передавался сразу внутри команды.
Like this:

/MembersCount < chat_id >

@bot.message_handler(commands=['start'])
def start_message(msg):
    keyboard1 = telebot.types.ReplyKeyboardMarkup(True, True)
    keyboard1.row('/help', '/MembersCount')
    bot.send_message(msg.chat.id, 'Starting', reply_markup=keyboard1)

@bot.message_handler(content_types=['text'])
def handler(message):
    if '/MembersCount' in message.text:
        cmnd = message.text.split()
        count = bot.get_chat_members_count(cmnd[1])
        bot.send_message(message.chat.id, count)


Вводится текст и разбивается на группы из k элементов, в которых символы переставляются некоторым образом, далее переставляются сами группы символов
Я написал код, который делит вводимый текст на группы по 5 символов и выводит их в обратном порядке. Но я не знаю как перемешать сами группы и вывести их. Думал создать массив в который запишутся группы, и вывести их в обратном порядке как и строки(с помощью среза [::-1]), но не получается. Помогите пожалуйста)
<code>
s = str(input('Введите строку: '))
s = ''.join(s.split())
for x in range(0, len(s), 5):
    arr = s[x:x+5]
    print(arr[::-1])
</code>

import random
lt=[]
s = str(input('Введите строку: '))
s = ''.join(s.split())
for x in range(0, len(s), 5):
    arr = s[x:x+5]
    lt.append(arr)
print (lt)
random.shuffle(lt)
print(lt)

Искомый результат

Введите строку: ergbdgnbsnsynnyhsrththhzdthth
['ergbd', 'gnbsn', 'synny', 'hsrth', 'thhzd', 'thth']
['thhzd', 'synny', 'ergbd', 'gnbsn', 'hsrth', 'thth']


не получается заменить пробел при помощи replace Python
<code>
s_2=' '
s=str('НУЖНО ЛЮБИТЬ МАТЕМАТИКУ')
def count_word(s):
    kol=0
    for i in range(0,len(s)):
      if s[i]==s_2:
        s[i].replace(' ','')
      kol+=1
    print('В словосочетании:{} {} буквы'.format(s,kol))
count_word(s)
</code>

Вы неправильно применяете replace.

Метод str.replace возвращает копию строки, в которой заменены все
  вхождения указанной строки указанным значением.

<code>
s = 'НУЖНО ЛЮБИТЬ МАТЕМАТИКУ'
def count_word(s):
    s = s.replace(' ','')
    print('В словосочетании:{} {} буквы'.format(s,len(s)))
count_word(s)
</code>


Как получить значение переменной из скрипта?
К примеру у меня есть скрипт на
python который выполняет роль конфигурационного файла. То бишь в нем объявлены некоторые переменные, для инициализации некоторых из них вызываются функции. Так вот: как можно получить значение одной из переменных не редактируя сам конфиг?

Допустим структура файлов такая

app/
    config.py
    app.py

тогда в app.py переменную можно  получить

from config import peremennaya
print(peremennaya)

В поток вывода

python -c "from config import peremennaya; print(peremennaya)"


Python список,разделение элемента
В общем проблема такова,есть список с числами нужно сделать так,что бы при поступление такого же нового списка каждый элемент этого списка писался без цифры 0 в начале.Помогите пожалуйста,нужно срочно.
<code>
[0775993438',
 0769020467',
 0762555454',
 0768838495',
 0777293171',
 0762567904',
 0768478734',
 0771488311',
 0688623553',
 0761806097',
 0761497756',
 0770258948',
 0772632588',
 0774247799',
 0771591391']
</code>


Можно ли в QPalette передать rgb?
Допустим у меня есть конструкция, которая меняет цвет основной формы :
<code>
self.color = QtWidgets.QColorDialog.getColor(QtCore.Qt.green, self)
self.setPalette(QtGui.QPalette(self.color))
</code>
Могу ли я как-нибудь вместо используемого В Qt цвета, передать rgb ?

Один из способов, - при помощи конструктора
QColor(r, g, b, alpha) реф
Как результат:

self.setPalette(QtGui.QPalette(QColor(255,0,0,255)))


Работа со строками, обработка статистических данных
Моя задача выглядит следующим образом:

Даны результаты забегов в формате
"h|m|s, h|m|s, h|m|s" (h – часы, m – минуты, s – секунды).
  Написать функцию
stat, которая возвращает строку в формате:

"Range: hh|mm|ss Average: hh|mm|ss"
  (
range – разница между максимальным и минимальным значением,
average – среднее значение)
  Пример:

stat("01|15|59, 1|47|6, 01|17|20, 1|32|34, 2|3|17") ==>
"Range: 00|47|18  Average: 01|35|15"

import traceback

def stat(s):
    # Тело функции
    return "

# Тесты
try:
    assert stat("01|15|59, 1|47|16,
                01|17|20, 1|32|34,
                2|17|17") == "Range: 01|01|18
                             Average: 01|38|05"

    assert stat("02|15|59, 2|47|16,
                 02|17|20, 2|32|34,
                  2|17|17, 2|22|00,
                  2|31|41") == "Range: 00|31|17
                              Average: 02|26|18"
except AssertionError:
    print("TEST ERROR")
    traceback.print_exc()
else:
    print("TEST PASSED")

Я пробую решить эту задачу так:

hs = ['02',2,'02',2,2,2,2]
ms = [15,47,17,32,17,22,31]
ss = [59,16,20,34,17,'00',41]

tmp = []
avg = []
rng = []

def myStat(x,y,y1):
    IntX = []
    for i in range(len(x)):
        IntX.append(int(x[i]))
    print("Массив целых на входе:%s\n" % IntX)
    M = max(IntX)
    m = min(IntX)
    ran0 = M-m
    avg0 = round( sum(IntX)/len(IntX) )
    y.append(ran0)
    y1.append(avg0)
    return y,y1

print(myStat(hs,tmp,avg))
print(myStat(ms,tmp,avg))
print(myStat(ss,tmp,avg))

На данный момент без форматирования, так как тренировался с преобразованием строк в массив целых и с функцией  format( ).
Я не понимаю от чего в этой строке такой вывод, ведь по условию задачи Range - это разница между минимальным и максимальным, а Average - это среднее, хочу разобраться где ошибка, в моих вычилсениях или в описании задания ? И возможно ли заменить нагромождения на анонимную фукцию ?

assert stat("02|15|59, 2|47|16,
             02|17|20, 2|32|34,
             2|17|17, 2|22|00,
             2|31|41") == "Range: 00|31|17
                           Average: 02|26|18"

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

res = "01|15|59, 1|47|6, \
       01|17|20, 1|32|34, \
       2|3|17"

def myStat(res):
    results = [[int(i) for i in r.strip().split('|')] for r in res.split(',')] # привели данные к списку кортежей [(h, m, s), (h, m, s), ...]
    results = [r[0]*3600 + r[1]*60 + r[2] for r in results] # перевели все результаты в секунды

    average = sum(results) / len(results) # посчитали средний результат в секундах
    average = average//3600, average%3600//60, average%60 # перевели в кортеж (h, m, s). Если значение секунд нужно целым, Range%60 заменяем на round(Range%60)
    average = '|'.join(str(e) for e in average) # если нужно - привели к виду 'h|m|s'. Если не нужно - строку убрать/закомментировать

    Range = max(results) - min(results) # посчитали разницу в секундах
    Range = Range//3600, Range%3600//60, Range%60 # перевели в кортеж (h, m, s). Если значение секунд нужно целым, Range%60 заменяем на round(Range%60)
    Range = '|'.join(str(e) for e in Range) # если нужно - привели к виду 'h|m|s'. Если не нужно - строку убрать/закомментировать

    return Range, average

print('Range: {} Average: {}'.format(*myStat(res)))

Алтернативный вариант с результатом сразу в виде строки:

...
    return 'Range: {} Average: {}'.format(Range, average)

print(myStat(res))

Результат:

Range: 0|47|18 Average: 1.0|35.0|15.199999999999818


Работа со словарями в текстовом файле
У меня текстовый файл, состоящий из множества словарей. Они не разделены запятыми. Выглядит примерно так:
<code>
{"op":"mcm","clk":"890423429","pt":1578998015095,"mc":[{"id":"1.167393008","marketDefinition":{"bspMarket":false}}]}
{"op":"mcm","clk":"890422329","pt":1578998015034,"mc":[{"id":"1.167393008","marketDefinition":{"bspMarket":false}}]}
{"op":"mcm","clk":"890461129","pt":1578998015021,"mc":[{"id":"1.167393008","marketDefinition":{"bspMarket":true}}]}
</code>
Вопрос в том, как с ним работать. Я хочу работать со словарями, искать там нужную мне информацию, делать на ее основе расчеты. На данный момент все содержимое файла - строка.

Вы можете работать с каждой строкой, как с JSON-объектом:
text.txt

{"op":"mcm","clk":"890423429","pt":1578998015095,"mc":[{"id":"1.167393008","marketDefinition":{"bspMarket":false}}]}
{"op":"mcm","clk":"890422329","pt":1578998015034,"mc":[{"id":"1.167393008","marketDefinition":{"bspMarket":false}}]}
{"op":"mcm","clk":"890461129","pt":1578998015021,"mc":[{"id":"1.167393008","marketDefinition":{"bspMarket":true}}]}

main.py

import json

# читаем словари из text.txt
a = list(map(lambda line: json.loads(line), open('text.txt')))

"""
a - список, содержащий в себе 3 словаря из файла
Здесь находится работа со словарями

Чтобы убедиться, что здесь находятся именно словари, а не строки, можно добавить:

for elem in a:
    print(type(elem))
"""

# записываем отредактированные словари в text2.txt
f = open('text2.txt', 'w')
f.write('\n'.join(map(lambda elem: json.dumps(elem), a)))

Работает с любыми словарями в файле, если каждый записан с новой строчки (содержимое словарей не имеет значения)


Ошибка Invalid Syntax [закрыт]

Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

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

Закрыт 2 года назад.

                        Улучшить вопрос

Пишет, что ошибка во второй строке
<code>
age = int(input("Сколько тебе лет? ")
weight = int(input("Сколько ты весишь килограммов? "))
moon_weight = weight / 6
print("\nЗнаете ли вы, что на луне вы бы весили всего", moon_weight, "кг?")
  sun_weight = weight * 27.1
print("А вот находясь на Солнце, вы бы весили", sun_weight, "кг")
input("\n\nНажмите Enter, чтобы выйти")
</code>

В первой строке скобка не закрыта. И проверь пятую строку, там ненужные отступы, которые приведут к ошибке. Ниже исправленный вариант
<code>
age = int(input("Сколько тебе лет? "))
weight = int(input("Сколько ты весишь килограммов? "))
moon_weight = weight / 6
print("\nЗнаете ли вы, что на луне вы бы весили всего", moon_weight, "кг?")
sun_weight = weight * 27.1
print("А вот находясь на Солнце, вы бы весили", sun_weight, "кг")
input("\n\nНажмите Enter, чтобы выйти")
</code>


setStyleSheet не видит относительный путь к файлу
<code>
self.background.setStyleSheet("border-image: url(background.png);")
</code>
работает отлично, а вот в  "url(images\background.png)" уже не видит файла. По всякому пытался, и с сырой строкой, и с полным указанием пути.

Проблему решил повернув слэш в другую сторону. Но почему это сработало? Везде путь указывал именно обратным слешем.