Ошибка с Pipe() в multiprocessing
Main.py

from Test import *
if __name__=="__main__":
    import multiprocessing
    p_out, p_in = multiprocessing.Pipe()
    p1 = multiprocessing.Process(target=test1, args=(p_in,))
    p2 = multiprocessing.Process(target=test2, args=(p_out,))
    p2.start()
    p1.start()

    def test1bind():
        print("F pressed")
        global p1
        if p1.is_alive():
            p1.terminate()
        else:
            p1 = multiprocessing.Process(target=test1, args=(p_in,))
            p1.start()

    def test2bind():
        print("G pressed")
        global p2
        p2.terminate()
        p2 = multiprocessing.Process(target=test2, args=(p_out,))
        p2.start()

    import keyboard
    keyboard.add_hotkey("F", test1bind)
    keyboard.add_hotkey("G", test2bind)

Test.py

from time import sleep

def test1(p_in):
    test = 0
    while True:
        sleep(0.012)
        test = test + 1
        p_in.send(test)

def test2(p_out):
    while True:
        img = p_out.recv()
        print(img)

Я получаю ошибку, если нажимаю сперва F а потом G:

F pressed
G pressed

Process returned 0 (0x0)        execution time : 0.875 s
Для продолжения нажмите любую клавишу . . . Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Users\andre\AppData\Local\Programs\Python\Python38-32\lib\multiprocessing\spawn.py", line 102, in spawn_main
    source_process = _winapi.OpenProcess(
OSError: [WinError 87] Параметр задан неверно

Но если я нажму сперва G а потом F, то получаю другую ошибку:

F pressed

Process returned 0 (0x0)        execution time : 1.058 s
Process Process-3:
Traceback (most recent call last):
  File "C:\Users\andre\AppData\Local\Programs\Python\Python38-32\lib\multiprocessing\connection.py", line 312, in _recv_bytes
    nread, err = ov.GetOverlappedResult(True)
BrokenPipeError: [WinError 109] Канал был закрыт

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\andre\AppData\Local\Programs\Python\Python38-32\lib\multiprocessing\process.py", line 315, in _bootstrap
    self.run()
  File "C:\Users\andre\AppData\Local\Programs\Python\Python38-32\lib\multiprocessing\process.py", line 108, in run
    self._target(*self._args, **self._kwargs)
  File "E:\1NAIM\NAIM\HELP\Test.py", line 12, in test2
    img = p_out.recv()
  File "C:\Users\andre\AppData\Local\Programs\Python\Python38-32\lib\multiprocessing\connection.py", line 250, in recv
    buf = self._recv_bytes()
  File "C:\Users\andre\AppData\Local\Programs\Python\Python38-32\lib\multiprocessing\connection.py", line 321, in _recv_bytes
    raise EOFError
EOFError

Я не понимаю, почему она появляется. Я могу много раз закрывать например p1, и ошибок не будет, стоит мне закрыть их, в любом порядке, как возникает ошибка.

Я сделал "Костыль", но всё ещё жду более лучшего ответа:
Main.py

from Test import *
if __name__=="__main__":
    import multiprocessing
    p_out, p_in = multiprocessing.Pipe()
    p1 = multiprocessing.Process(target=test1, args=(p_in,))
    p2 = multiprocessing.Process(target=test2, args=(p_out,))
    p3 = multiprocessing.Process(target=menu)
    p2.start()
    p1.start()
    p3.start()
    def test1bind():
        print("F pressed")
        global p1
        global p2
        if p1.is_alive():
            p1.terminate()
            p2.terminate()
        else:
            p1 = multiprocessing.Process(target=test1, args=(p_in,))
            p2 = multiprocessing.Process(target=test2, args=(p_out,))
            p1.start()
            p2.start()

    def test2bind():
        print("G pressed")
        global p1
        global p2
        p1.terminate()
        p2.terminate()
        p1 = multiprocessing.Process(target=test1, args=(p_in,))
        p2 = multiprocessing.Process(target=test2, args=(p_out,))
        p1.start()
        p2.start()

    import keyboard
    keyboard.add_hotkey("F", test1bind)
    keyboard.add_hotkey("G", test2bind)

Test.py

from time import sleep

def test1(p_in):
    test = 0
    while True:
        sleep(0.1)
        test = test + 1
        p_in.send(test)

def test2(p_out):
    while True:
        img = p_out.recv()
        print(img)

def menu():
    sleep(99999)

p.s. нужен фоновый процесс, иначе программа будет закрываться.


Классы и математические операции в них
Задача Создайте класс «Дробь». Необходимо хранить в полях класса: числитель и знаменатель. Реализуйте методы класса для ввода данных, вывода данных, реализуйте доступ к отдельным полям через методы класса. Также создайте методы класса для выполнения арифметических операций (сложение, вычитание, умножение, деление, и т.д.).
Попытка написать код (гарантированно не правильная). Как правильно не понимаю
<code>
class Fraction():
    def __init__(self, a, b, c):
        self.numerator = a
        self.denominator = b
        self.result = c

    def fraction(a, b):
        if 0 < b:
            print(a / b)
        else:
            print("Erorr")

    def addition(a, b, i, c):
        if 0 < i:
            c = (a/b) + i
            return c

AB = Fraction (15, 7, 4)
print(AB.addition())
</code>

class Fraction():
    def __init__(self, numerator, denominator):
        self.numerator = numerator
        self.denominator = denominator
        self.canonize()

    @staticmethod
    def fromstr(string):
        return Fraction( * (int(i.strip()) for i in string.split('/')))

    def canonize(self):
        def gcd(a,b):
            while a != 0 and b != 0:
                if a > b:
                    a %= b
                else:
                    b %= a
            return a+b

        g = gcd(self.numerator, self.denominator)
        self.numerator //= g
        self.denominator //= g

    def __float__(self):
        return self.numerator / self.denominator

    def __trunc__(self):
        return self.numerator // self.denominator

    def __int__(self):
        return self.__trunc__()

    def __str__(self):
        return f"{self.numerator}/{self.denominator}"

    def __repr__(self):
        return f"Fraction({str(self)})"

    def __round__(self, ndigits=None, /):
        return round(float(self), ndigits)

    def __add__(self, value):
        return Fraction(
            self.numerator*value.denominator + value.numerator*self.denominator,
            self.denominator*value.denominator
            )

    def __mul__(self, value):
        return Fraction(
            self.numerator*value.numerator,
            self.denominator*value.denominator
            )

    def __neg__(self):
        return Fraction(
            -self.numerator,
            self.denominator
            )

    def __sub__(self, value, /):
        return Fraction(
            self.numerator*value.denominator - value.numerator*self.denominator,
            self.denominator*value.denominator
            )

    def __truediv__(self, value):
        return Fraction(
            self.numerator*value.denominator,
            self.denominator*value.numerator
            )

print( Fraction(5,7)/Fraction(1,5) + Fraction(7,11)*Fraction(11,7) )

print(Fraction.fromstr(input()))


Ошибка в неопределенной переменной
Ребят, может кто посмотрит свежим взглядом. Не могу найти в чем ошибка.. Ошибка, что неопределенная переменная add_products в самом конце цикла while. Если меняю переменную на update_shop, то ошибка пропадает, в файл все равно не записываются продукты которые я ввожу.
модуль берем такой :
Модуль:

def read_file(file_name):
    file = open (file_name, 'r' , encoding='utf-8')
    message = ''
    for w in file:
        message += w
    return message

Основной код:

import os
from files.store import read_file

shop = {}

def update_shop(dir_name='shop', shop=shop):
    tree = os.walk(dir_name)
    for root, dirs,files in tree:

        for file in files:
            group = read_file('shop/' + file)
            group = group.split(' ')

            products = {}
            products.update(zip(group[1::2], group[2::2]))
            shop.update({file:products})
            return shop

def create_message(products):
    message = ''
    for prod, price in products.items():
        message += ' {0}{1} '.format(prod,price)
    return message

def write_to_file(shop=shop):

    for group,products in shop.items():
        file_name = 'shop/' + group
        file_group = open(file_name, 'w', encoding='utf-8')
        file_group.write(create_message(products))
        file_group.close()
    else:
        'ошибка'
        return file_name

def add_product(user_group,products,shop=shop):
    if user_group in shop:
        shop[user_group].update(products)
        write_to_file()
        update_shop()

    elif user_group not in shop:
        shop.update({user_group:{}})
        shop[user_group].update(products)
        write_to_file()
    else:
        print ('Error)')

update_shop()

loop = True

while loop:
    group = input('В какой раздел добавим продукты или создадим? \n')
    number = int (input('Сколько видов продуктов будет добавлено в раздел? (напишите числом) \n'))
    i = 1
    products = {}
    while i<= number:
        product = input(' Укажите название продукта, который хотите добавить: ')
        price = int(input('Укажите цену продукта {0} (напишите числом ): ' .format(product)))

        products.update({product:price})

        i+=1

        if i > number:
            add_products(group,products)
            loop = False

У Вас есть функция
add_product а вызываете вы
add_products которой у вас нет. (
s в конце).
А
update_shop в принципе не чего в файл не должна писать.
Попробуйте так

  if i > number:
            add_product(group,products)
            loop = False


CSV-файл и матрица. Python
У меня есть файл в формате csv там находится матрица(вручную)

1 2 3 4 5 6 7 8
8 7 6 5 4 3 2 1
2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2
1 3 5 7 9 7 5 3
3 1 5 3 2 6 5 7
1 7 5 9 7 3 1 5
2 6 3 5 1 7 3 2

Мне нужно что бы матрица прочитывалась из csv-файла и все значения матрицы менялись на ноль и уже преобразованная матрица записывалась в новый csv файл, я могу вывести содержимого файла и отдельно цифры матрицы заменить на ноль, но это получается 2 разных кода, как их объединить, так же я не могу понять как уже преобразованную матрицу записать в новый csv-файл. Помогите разобраться. Вот мои коды

import csv

with open('tekst.csv', newline='') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

import numpy as p

matA = p.matrix([[1,2,3,4,5,6,7,8], [8,7,6,5,4,3,2,1], [2,3,4,5,6,7,8,9], [9,8,7,6,5,4,3,2], [1,3,5,7,9,7,5,3], [3,1,5,3,2,6,5,7],[1,7,5,9,7,3,1,5],[2,6,3,5,1,7,3,2]])

print("Матрица с нулями:\n", matA * 0)

Это буквальный ответ на вопрос. Хотя вопрос странный: зачем читать матрицу если нужны только её размеры? Но что спрошено, то спрошено:
<code>
# читаем матрицу (элементы целые)
m = [[int(token) for token in line.split()] for line in open('tekst.csv')]

# делаем копию того же размера из нулей
mz = [[0] * len(row) for row in m]

# записываем нули в другой файл
with open('resultat.csv', 'w') as f:
    for row in mz:
        print(' '.join(map(repr, row)), file=f)
</code>


Программа кассир
Суть программы: у нас есть касса, которая продает билеты в кино за 25$ и каждый человек покупает один билет и у него есть 25$/50$/100$ одной купюрой. Суть в том, что вводится список с количеством денег у всех покупателей в очереди и прога сама высчитывает хватит ли ей налички, чтобы со всеми расплатиться или нет.
Проблема в том, что почему-то крутиться бесконечный цикл.

def tickets(people):
text = "YES"
length = len (people)
i = 0

cash_count = {25 : 0, 50 : 0, 100 : 0}

while i < length and text == "YES":

    banknote = people [i]

    for key in cash_count.keys():

        if banknote == key:
            cash = cash_count [key]
            cash_count [key] = cash + 1

    if banknote == 25:

        if cash_count [25] > 0:
            cash = cash_count [25]
            cash_count [25] = cash - 0

        else:
            text = "NO"

    elif banknote == 50:

        if cash_count [25] > 0:
            cash = cash_count [25]
            cash_count [25] = cash - 1

        else:
            text = "NO"

    elif banknote == 100:

        if cash_count [50] > 0 and cash_count [25] > 0:
            cash = cash_count [50]
            cash_count [50] = cash - 1

            cash = cash_count [25]
            cash_count [25] = cash - 1

        elif cash_count [25] > 2:
            cash = cash_count [25]
            cash_count [25] = cash - 3

        else:
            text = "NO"
    else:
        print ("В массиве введенно неверное значение купюры.")

return count

Тестил вот, так:

print (tickets([25, 25, 50]), "YES")
print (tickets([25, 100]), "NO")

Ну как бы проблема очевидна. Ни
i, ни
length не изменяют своего значения, поэтому программа все время работает с элементом
people [0], не переходя к следующим.


Как продублировать строки по разным id из одного столбца?
Работаю с файлом, загруженным в Jupyter Notebook.
Исходная таблица вида:

df = pd.DataFrame({'id':['1','2,3','4,5,6','7'],
    'name':['Ann','Alex','Mark','John'],
    'city':['M','L','R','M']})

Нужно из нее получить таблицу вида:

df2 = pd.DataFrame({'id':['1','2','3','4','5','6','7'],
    'name':['Ann','Alex','Alex','Mark','Mark','Mark','John'],
    'city':['M','L','L','R','R','R','M']})

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

Воспользуйтесь DataFrame.explode():

res = df.assign(id=df["id"].str.split(",")).explode("id")

результат:

In [350]: res
Out[350]:
  id  name city
0  1   Ann    M
1  2  Alex    L
1  3  Alex    L
2  4  Mark    R
2  5  Mark    R
2  6  Mark    R
3  7  John    M

UPDATE: метод DataFrame.explode() появился в Pandas 0.25.0, для более старых вырсий можно воспользоваться функцией explode(df, lst_cols, fill_value='', preserve_index=False)

def explode(df, lst_cols, fill_value='', preserve_index=False):
    # make sure `lst_cols` is list-alike
    if (lst_cols is not None
        and len(lst_cols) > 0
        and not isinstance(lst_cols, (list, tuple, np.ndarray, pd.Series))):
        lst_cols = [lst_cols]
    # all columns except `lst_cols`
    idx_cols = df.columns.difference(lst_cols)
    # calculate lengths of lists
    lens = df[lst_cols[0]].str.len()
    # preserve original index values
    idx = np.repeat(df.index.values, lens)
    # create "exploded" DF
    res = (pd.DataFrame({
                col:np.repeat(df[col].values, lens)
                for col in idx_cols},
                index=idx)
             .assign(**{col:np.concatenate(df.loc[lens>0, col].values)
                            for col in lst_cols}))
    # append those rows that have empty lists
    if (lens == 0).any():
        # at least one list in cells is empty
        res = (res.append(df.loc[lens==0, idx_cols], sort=False)
                  .fillna(fill_value))
    # revert the original index order
    res = res.sort_index()
    # reset index if requested
    if not preserve_index:
        res = res.reset_index(drop=True)
    return res

PS по ссылке выше на оригинальный пост можно найти примеры использования данной функции...


Как сделать чтоб после блока try/except выводилось только одно исключение?
Есть такой вот "итератор":

class MyIterator():
    def __init__(self, lst):
        self.lst = lst
        self.counter = 0

    def __next__(self):
        try:
            z = self.lst[self.counter]
            self.counter += 2
            return z
        except:
            raise StopIteration

После ошибки он выводит это:

Traceback (most recent call last):
  File "C:/BookBot/test.py", line 10, in __next__
    z = self.lst[self.counter]
IndexError: list index out of range

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:/BookBot/test.py", line 22, in <module>
    print(next(x))
  File "C:/BookBot/test.py", line 14, in __next__
    raise StopIteration
StopIteration

Вопрос: как сделать чтоб при ошибке выводилось только
StopIteration, и можно ли вообще так сделать?

А вы поймайте выше это исключение и выводите там, что хотите. А как именно "очистить" текущее состояние
Exception в
Python я что-то пока не нашёл:

import sys
try:
    x = MyIterator(list(range(10)))
    while True:
        print(next(x))
except:
    print("Unexpected error:", sys.exc_info()[0])

Вывод:

0
2
4
6
8
Unexpected error: <class 'StopIteration'>

Сама среда исполнения выводит по умолчанию всю трассировку исключений по цепочке, если вы не поймали исключение.


Python. Как "нарисовать" степень числа, используя функцию print
Как нарисовать степень числа при выводе числа на экран?
Например,
<code>
a = 4
print('a = ', 2, '^2')
</code>
Как вместо галочки поставить степенной регистр?

Вот так, но универсального решения нет, это для конкретно степени
2 символ UTF-8:

a = 4
print('a = 2\u00B2')

Вывод:

a = 2²

Ссылка на таблицы кодов для степеней
Ссылка на таблицы кодов для остальных математических символов


Вопрос по парсингу файла, configargparse
Мне нужно парсить данные из командной строки и из файла. Командную строку парсит как нужно(а нужно парсить команды по флагу и объекты, к кот надо применить эти флаги), а вот файл нет.
Пример,
-x tests/ docs/, парсер распознает флаг и две папки(по отдельности, будут строками в списке). Но когда он парсит данные из файла(в файле напишу две папки через пробел tests/ docs/ ), то он распознает это как единый элемент (в списке будет одна строка).
Я знаю, что в библиотеке argparse есть
fromfile_prefix_chars  и
convert_arg_line_to_args, но  я пользуюсь надстройкой над этой библиотекой
configargparse, вроде они там должны работать, но либо не работают, либо я не понял как это корректно сделать.
Собственно, мне нужно, чтобы данные из файла парсили корректно (если есть пробел, то это один аргумент).

class ArgumentationTool:
    """
    Инструмент для добавления аргументов.

    Набор аргументов описан в модуле parameters_parse.
    """

    PARAMETERS_FILE_NAME = f'.{__package__}.cfg'
    USER_PARAMETERS_PATH = Path(PARAMETERS_FILE_NAME).expanduser().absolute()
    IN_CWD_PARAMETERS_PATH = Path.cwd().absolute() / PARAMETERS_FILE_NAME
    DEFAULT_CONFIG_FILES: Tuple[str, ...] = (str(USER_PARAMETERS_PATH),
                                             str(IN_CWD_PARAMETERS_PATH))

    def __init__(self):
        """Подготовка инструмента для работы с параметрами."""
        self.__argument_parser = ArgumentParser(
            add_env_var_help=False,
            default_config_files=self.DEFAULT_CONFIG_FILES,
            prog=application_name,
            description=application_description)

        self.__define_parameters()
        self.parameters_storage, _ = self.__argument_parser.parse_known_args(
            namespace=ParametersStorage())

    def __define_parameters(self):
        """Добавление параметров."""
        for arguments, options in PARAMETERS:
            self.__argument_parser.add_argument(*arguments, **options)`

Аргументы из PARAMETERS

('-x', '--exclude'),{'dest': 'exclude','metavar': '<globbing шаблон>','help': 'Исключить по указанному globbing шаблону','nargs': '+', 'default': (),},

Надо было в конструктор парсера передать
config_file_parser_class=DefaultConfigFileParser


Объясните Python код
Число 20 выходит из листа, но я не понимаю как код после return-а работает

[value for value in sampleList if value != val]

почему до for пишется value, и как эта  строка работает и что делает? Объясните ребята, пожалуйста.
Знаю много других решений на эту задачу, но эту нашел и не могу понять, как он работает.

list1 = [5, 20, 15, 20, 25, 50, 20]

def removeValue(sampleList, val):
   return [value for value in sampleList if value != val]
resList = removeValue(list1, 20)
print(resList)

Данное выражение является генератором списка. С его помощью можно удобно создавать листы, опуская многострочное заполнение во внешнем цикле.
Генератор
[value for value in list] перебирает все элементы списка
list и добавляет их в возвращаемый список. А, например, генератор
[3 * value for value in list[::2]] возвратит список состоящий из каждого второго элемента изначального списка, умноженного на три. Это просто базовый синтаксис генератора.
В конкретно вашем случае еще добавляется условие внутри цикла:
[value for value in list if condition(value)], где
condition - либо какая-то логическая функция или операция сравнения. Простейшим примером такого генератора будет что-то такое:
[i for i in range(10) if i % 2 == 0] - данный генератор возвращает список, состоящих из четных чисел в промежутке [0; 10), так как он перебирает все числа из данного промежутка и добавляет только те, которые кратны двум.
В вашем случае условие
condition это
value != val. То есть в возвращаемый список добавятся все элементы исходного списка, кроме тех, которые равны
val.


Вывод нового значения переменной из другого файла python
У меня есть два файла main.py и enemy_stat.py
Как вывести новое значение переменной
enhp из файла enemy_stat после оператора
if в файле main?
Код файла main:

from enemy_stat import *

print(enemy)
print(enhp)

room = 'room1'
if room == 'room1':
    enemy = 'slime'

print(enemy)
print(enhp)

Код файла enemy_stat:

enemy = "sex"
enhp = 0

if enemy == "slime":
    enhp = 10

Как вывести новое значение переменной enhp из файла enemy_stat

Что для этого нужно?

Что бы в файле enemy_stat имелся опреатор печати, например - print()
Что бы этот оператор каким-то образом выполнялся в процессе выполнения всей программы.

Ни того, ни другого у Вас нет. Ну, первое условие выполнить не сложно - вставьте оператор печати и всё. А вот выполнить второе условие значительно сложнее,
Существует только два метода передачи управления из одного файла программы в другой:

Вызов функции из второго файла
Вызов метода класса из второго файла или присвоение переменной экземпляра объекта.

Есть ещё более хитрые способы с обработкой прерываний, но о них говорить не будем.
Первый способ довольно очевидный. В файле enemy_stat организуем функцию

def print_enhp():
    if enemy == "slime":
        enhp = 10
    print(enhp)
    return

А в первый файл вставляем вызов этой функции, заменив оператор print(enhp) на вызов этой функции:

print_enhp()

Про использование классов говорить не буду, т.к. это очень обширная тема.


Каким образом по условию не NaN можно складывать столбцы в DataFrame?
Есть DataFrame:

      koef  stavka  money  total
0    3.89x    0.25   0.97   0.72
1    3.06x    0.30   0.92   0.62
2    3.02x    2.29   6.92   4.63
3    3.00x    0.25   0.75   0.50
4    3.00x    0.25   0.75   0.50
..     ...     ...    ...    ...
189  4.34x   35.75    NaN    NaN
190  4.34x    0.59    NaN    NaN
191  4.34x    0.33    NaN    NaN
192  4.34x    0.29    NaN    NaN
193  4.34x    0.25    NaN    NaN

Колонка
total была создана с помощью строки:

d['total'] = d['money']-d['stavka']

Но мне нужна проверка: если
money == NaN, то по этой строчке
total должно считаться как:

d['total'] = -d['stavka']

Попробовал это решить таким образом:

d['total'] = -d['stavka'] if pd.isnull(d['money']) else d['money']-d['stavka']

И таким:

d['total'] = -d['stavka'] if d['money'] == "NaN" else d['money']-d['stavka']

Не получилось.
Как можно такое реализовать?

Воспользуйтесь Series.fillna():
<code>
d['total'] = d['money'].fillna(0) - d['stavka']
</code>


Не наследуется класс в python-docx бибиотеке
Почему-то выбивает ошибку при наследовании класса Document.
Код:

from docx import Document

class MyDoc(Document):

    def __init__(self):
        super().__init__()

        self.save("WTF.docx")

if __name__=="__main__":
   dc = MyDoc()

Ошибка:

TypeError: function() argument 'code' must be code, not str

Указывает на строку "class MyDoc(Document):"
Как будто Document - это строка.
Но ведь при использовании в библиотеке можно убедиться, что это класс. Пример использования Document:

from docx import Document

if __name__=="__main__":

    dc = Document()
    dc.save("WTF.docx")

И этот код работает.
В чем проблема???

Document это функция которая возвращает экземпляр класса.
Мы должны получить экземпляр класса, а потом с помощью
type узнать экземпляром какого класса он является

class MyDoc(type(Document())):


ошибка bound method

class Country():
    def __init__(self, country_name, continent_name, country_population, country_area_code, country_capital, city_list):
        self._country_name = country_name
        self._continent_name = continent_name
        self.country_population = country_population
        self._country_area_code = country_area_code
        self._country_capital = country_capital
        self.city_list = city_list

    def print_country_inf(self):
        general_information = str(self.country_population) + " " + self.city_list
        return str(self.country_population) + " " + self.city_list

    def print_continent_country_and_capital(self):
        country_and_capital = str(self._country_name) + " " + str(self._continent_name) + " " +  \
        self._country_area_code + " " + str(self._country_capital)
        return str(self._country_name) + " " + str(self._continent_name) + " " + self._country_area_code \
        + " " + str(self._country_capital)

    def print_city_list(self):
        print_city_list = self.city_list
        return listself.city_list

Ukraine = Country ("Україна", "Европа", 42000000, 380, "Київ", ["Вінниця", "Луцьк", "Дніпро", "Донецьк", "Житомир","Ужгород", "Запоріжжя", "Івано-Франківськ", "Київ","Кропивницький", "Луганськ", "Львів", "Миколаїв", "Одеса", "Полтава", "Рівне", "Суми", "Тернопіль", "Харків", "Херсон", "Хмельницький", "Черкаси", "Чернігів", "Чернівці"])

После запуска:

print(Ukraine.print_city_list)

получаю:

<bound method Country.print_city_list of <main.Country object at 0x0000028A639CEFD0>>
Process finished with exit code 0

после запуска:

Ukraine.print_city_list()

получаю:

Process finished with exit code 0

Помогите разобраться что делаю не так?

Вы вызываете вот этот метод:

    def print_city_list(self):
        print_city_list = self.city_list
        return listself.city_list

Я удивляюсь, почему оно вообще работает. У данного метода всего 2 инструкции. Первая: присвоение локальной переменной
print_city_list значения свойства объекта
self.city_list. И вторая: возврат свойства
city_list какого-то объекта
listself (в приведенном куску кода данная переменная не описана).
Какое вообще поведение ожидалось от этого кода - не понятно. Но, судя по названиям методов, предположу, что оно должно печатать список городов, а не возвращать его.

    def print_city_list(self):
        print(self.city_list)

Если же задача стоит именно в возврате списка городов, то не вижу смысл оборачивать это в какой-то метод. Список прекрасно будет доступен и по самому свойству:

print(Ukraine.city_list)

Да и в целом у вас достаточно странный и непонятный код. Если я правильно понял все то, что вы хотели сделать, то у меня получилось вот так:

class Country():
    def __init__(self, country_name, continent_name, country_population, country_area_code, country_capital, city_list):
        self._country_name = country_name
        self._continent_name = continent_name
        self.country_population = country_population
        self._country_area_code = country_area_code
        self._country_capital = country_capital
        self.city_list = city_list

    # здесь указан декоратор @property для того, что бы вызывать метод,
    # как свойство (то есть без скобок и аргументов) - это полезно,
    # когда метод возвращает простую комбинацию данных, как в вашем случае
    @property
    def country_inf(self):
        return f'{self.country_population} {self.city_list}'

    @property
    def continent_country_and_capital(self):
        return f'{self._country_name} {self._continent_name} {self._country_area_code} {self._country_capital}'

Ukraine = Country ("Україна", "Европа", 42000000, 380, "Київ", ["Вінниця", "Луцьк", "Дніпро", "Донецьк", "Житомир","Ужгород", "Запоріжжя", "Івано-Франківськ", "Київ","Кропивницький", "Луганськ", "Львів", "Миколаїв", "Одеса", "Полтава", "Рівне", "Суми", "Тернопіль", "Харків", "Херсон", "Хмельницький", "Черкаси", "Чернігів", "Чернівці"])

print("=>", Ukraine.city_list)
print("=>", Ukraine.country_inf)
print("=>", Ukraine.continent_country_and_capital)

Возврат данного кода:

=> ['Вінниця', 'Луцьк', 'Дніпро', 'Донецьк', 'Житомир', 'Ужгород', 'Запоріжжя', 'Івано-Франківськ', 'Київ', 'Кропивницький', 'Луганськ', 'Львів', 'Миколаїв', 'Одеса', 'Полтава', 'Рівне', 'Суми', 'Тернопіль', 'Харків', 'Херсон', 'Хмельницький', 'Черкаси', 'Чернігів', 'Чернівці']
=> 42000000 ['Вінниця', 'Луцьк', 'Дніпро', 'Донецьк', 'Житомир', 'Ужгород', 'Запоріжжя', 'Івано-Франківськ', 'Київ', 'Кропивницький', 'Луганськ', 'Львів', 'Миколаїв', 'Одеса', 'Полтава', 'Рівне', 'Суми', 'Тернопіль', 'Харків', 'Херсон', 'Хмельницький', 'Черкаси', 'Чернігів', 'Чернівці']
=> Україна Европа 380 Київ


Как сравнить данные в CSV файлах и удалить не повторяющиеся строки из первого?
1.csv

1,spain,323
3,russia,3243
4,japan,3232
5,italy,3234
6,russia,3235
7,france,3233
67,russia,3233
49,spain,543635

2.csv

spain,
russia,
japan,
Pakistan

Kак сравнить столбец два 1.сsv = 9000 строк и столбец один 2.csv 20 строк и удалить из файла 1.сsv стороки котрые не были найдены из столбца 2.csv? Дубли строк должны остаться в файле 1.сsv.
Вывод после обработки примера:

1,spain,323
3,russia,3243
4,japan,3232
6,russia,3235
67,russia,3233
49,spain,543635

Попробуйте так:
<code>
import pandas as pd

d1 = pd.read_csv("1.csv", header=None, names=["id","name","val"])
d2 = pd.read_csv("2.csv", header=None, names=["name"])
res = d1.merge(d2)
</code>


Необходимо написать функцию на Python, просматривающую содержание словаря и возвращающую ключи тех элементов, которые являются массивами Numpy
Вернее, что-то уже написано:

def smth(t, **kwargs):
for i in enumerate(kwargs):
    if type(kwargs.get(i[1]))=="<class 'numpy.ndarray'>": print(i[1])

просто не работает нормально: при вводе

smth('Name', time=0, x=np.array([0, 1, 2, 3]), y=34, z=np.array([34, 57, 81]))

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

def smth(t, **kwargs):
for i in enumerate(kwargs):
    print(type(kwargs.get(i[1])))

на тех же входных данных выдает:

<class 'int'>
<class 'numpy.ndarray'>
<class 'int'>
<class 'numpy.ndarray'>

Было бы здорово, если подскажете решение проблемы

чтобы проверит тип надо писать так

if type(kwargs.get(i[1])) == np.ndarray:

enumerate можно убрать

def smth(t, **kwargs):
    for key in kwargs:
        if type(kwargs[key] )==np.ndarray:
            print(key)


Ввод данных в переменную и их вывод в модуле Discord.py
Я совсем недавно начал работать с модулем для Python 'Discord.py' и у меня появилась необходимость создания функции которая работает так: пользователь вводит текст, а бот этот текст переотправляет. Пожалуйста, помогите мне разобраться в том как это сделать.
Вот мой код:
<code>
import discord
from discord.ext import commands

bot = discord.ext.commands.Bot(command_prefix = "!");

client = discord.Client()

@client.event
async def on_ready():
    print('We have logged in as {0.user}'.format(client))

@client.event
async def on_message(message):
    if message.author == client.user:
        return

    if message.content.startswith('!привет'):
        await message.channel.send(f' { message.author.mention }, Привет!')

    if message.content.startswith('!хелп'):
        await message.channel.send('Я бот, да ты и сам знаешь.\n**Мои команды:**\n```!привет - Вывод сообщения с приветом.``` ```!хелп - эта команда.```')

    if message.content.startswith('!print '): #После команды !print пользователь должен ввести текст который как-то нужно указать, возможно в переменной.
        await message.channel.send('') #Бот его должен вывести.

client.run('TOKEN')
</code>
Мой Python 3.7.0

Есть 2 типа ботов -
discord.Client() и
commands.Bot()
В коде вы объявляете обоих, но используете только первого -
client:

bot
= discord.ext.commands.Bot(command_prefix = "!")

client
= discord.Client()
Объект
bot отличается тем, что умеет обрабатывать поступающие команды вместе с отдельными аргументами. Такие команды объявляются строкой
@bot.command(), которая ставится перед асинхронной функцией команды. Объект
client такую команду обработать не сможет. А вот
bot, может помимо команды отлавливать также события, помеченные как
@bot.event. К таким событиям относятся:
on_ready() - вызывается когда бот загрузился и готов к работе,
on_message() - вызывается при получении ботом любого сообщения, и др.
У вас в коде как раз таки присутствует обработка получения сообщения
on_message(), в которой вы пытаетесь имитировать выполнение команд, путем сравнения поступающих слов. Это неправильно. Во всяком случае, это не то что вам нужно. Если вы хотите обрабатывать команды, с передачей в них различных аргументов, то использовать нужно именно объект
commands.Bot(), который вы объявили в коде под именем
bot. Далее к нему.

При определении объекта, в скобках вы указываете параметр
command_prefix, равный значению
"!". Параметр "префикс" является обязательным и нужен для того, чтобы при его использовании бот определял, что в чате была использована именно команда. Сама команда выглядит следующим образом:

@bot.command() # указываем боту на то, что это его команда
async def command(ctx, *, text):
    await ctx.send(f'Получен текст: {text}')

Вызывается команда при написании в чат такой конструкции:
[префикс][имя команды] [аргументы]
Для вызова этой команды нужно написать в чат "!command текст, который нужно вернуть", на что бот ответит: "Получен текст: текст, который нужно вернуть"
Здесь
command - название команды; Аргумент
ctx - контекст, обязательный аргумент, грубо говоря, это текстовый канал, в котором была вызвана команда. Аргумент
text будет содержать в себе весь текст после "!command". Звездочка нужна для того, чтобы бот получил в качестве аргумента весь текст после пробела, а не только первое слово. То есть, если вам, например, нужно получить от пользователя 2 числовых значения, разделенные пробелом, обработка аргументов будет выглядеть так:
async def command(ctx, arg1: int, arg2: int)
Из контекста
ctx можно получить объект автора -
author = ctx.message.author и еще много чего полезного. Подробнее о работе с аргументами обязательно ознакомьтесь в документации!

Что касается вашего кода; Первым делом, предлагаю полностью убрать из него объект
discord.Client, заменив его на
commands.Bot. Чтобы не переписывать весь код, просто поменяем
bot на
client в строке
bot = discord.ext.commands.Bot(command_prefix = "!")
Затем, объявим в коде полноценные команды и получим результат:

import discord
from discord.ext import commands

client = discord.ext.commands.Bot(command_prefix = "!")

@client.event
async def on_ready():
    print('We have logged in as {0.user}'.format(client))

@client.command()
async def привет(ctx):
    await ctx.send(f'{ctx.message.author.mention}, Привет!')

@client.command()
async def хелп(ctx):
    await ctx.send('Я бот, да ты и сам знаешь.\n**Мои команды:**\n```!привет - Вывод сообщения с приветом.``` ```!хелп - эта команда.```')

@client.command()
async def print(ctx, *, text):
    await ctx.send(f'{text}')

client.run('TOKEN')

А в конструкции
on_message() нужно обрабатывать именно те сообщения, которые не являются командой и при обработке которых не нужны аргументы. Например, через это событие можно отлавливать мат, после чего бот будет выдавать предупреждение участнику. Удачи :)


Команды с аргументами telebot
Я пишу своего первого бота на pytelebotapi и я хочу сделать текст команду с аргументами, чтобы когда я написал "привет, (имя бота)" и он отреагировал на мое сообщения и приветствовал меня, а если я не угадывал имя, он говорил что его не так зовут, но есть проблема, у меня условие не работает потому что "привет," и "имя бота" идёт как один текст и не имеет аргумента, можете решить проблему?
Прилагаю код:
<code>
import telebot
import config
from script import *

bot = telebot.TeleBot(config.TOKEN)

def argument(arg):
    return arg.split()[1:]

@bot.message_handler(content_types=["text"])
def start_save(message):
     if message.text.lower() == "привет,":
        namebot = argument(message.text)
        if namebot[1] == "Телебот":
            bot.send_message(message.chat.id, "Привет мой хозяин!")
        else:
            bot.send_message(message.chat.id, "Прости, если забыл, то меня не" + message_text + ", попробуй мое имя спомнить")

if __name__ == "__main__":
    bot.polling(none_stop=True)
</code>

@bot.message_handler(content_types=["text"])
def welcome(message):
    if 'привет,' in message.text.lower():
        if message.text.split(',')[1].replace(' ', '') == 'телебот':
            bot.send_message(message.chat.id, 'Привет бро!')
        else:
            bot.send_message(message.chat.id, 'Меня зовут не так')

но мне кажется, что проще сделать "нужное" приветствие через id пользователя:

def welcome(message):
    adm = [123]  # id пользователей
    if 'привет' in message.text.lower() and message.chat.id in adm:
        bot.send_message(message.chat.id, 'Привет бро!')
    else:
        bot.send_message(message.chat.id, 'Мы знакомы?')


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

long_term = [{1:-20, 2: 10, 3: 25},
             {1:15, 2: 14, 3: 33},
             {1:8, 2: -2, 3: 16}]

Нужно создать словарь:

new = {1:[-20, 15, 8]
       2:[10, 14, -2]
       3:[25, 33, 16]}

Есть варианты, как это сделать?

from itertools import chain

long_term = [{1:-20, 2: 10, 3: 25},  # Входные данные
             {1:15, 2: 14, 3: 33},
             {1:8, 2: -2, 3: 16}]

new = {}  # Словарь для формирования

for key, value in chain.from_iterable(map(dict.items, long_term)):  # Пробегаемся по парам ключ: значение каждого словаря
    new.setdefault(key, []).append(value)  # Если по ключу нет списка, то создаём его, добавляем в список значение


Как перевести строковые данные во множество без разбиения на символы?
Даны два столбца фрейма данных, один числовой, второй в виде строки записанных через пробел чисел.
Необходимо сформировать третий столбец булевых значений, в котором 1 - число
col1 входит в множество числе из
col2, а 0 - не входит.
Пытаюсь через
np.where(), но метод
.apply(str) дробит двузначные числа в строке на множество из двух элементов.
Как создавать множества из строки без разбиения?
Ниже пример для воспроизведения кейса:

import pandas as pd
import numpy as np

df = pd.DataFrame([[10,'20 10 3'],[20,'1 45 60'],[30,'46 32 9']],columns=['col1','col2'])
df.col1 = df.col1.apply(str)
print(df.col1.apply(set))
np.where((df.col1.apply(set)) & (df.col2.str.split(' ').apply(set)),1,0)

Результат:

0    {0, 1}
1    {2, 0}
2    {0, 3}

array([0, 0, 0])

А должно быть:

array([1, 0, 0])

попробуйте так:

df["col3"] = (df["col2"]
              .str.split("[\s\,]", expand=True)
              .isin(df["col1"])
              .any(axis=1)
              .astype("int8"))

результат:

In [330]: df
Out[330]:
  col1     col2  col3
0   10  20 10 3     1
1   20  1 45 60     0
2   30  46 32 9     0


нужно установить библиотеки типа numpy и др. используя pip install
Я установил Python 3.9 64-bit version и мне нужно добавить разные библиотеки. Я так понимаю у меня проблема с path. Если ввести в панели

C:\Users\пк>pip install numpy
выходит

"pip" не является внутренней или внешней командой, исполняемой
программой или пакетным файлом.

Не понимаю, как это можно решить. Пожалуйста подскажите.

В Windows похоже нужно запускать "py -m pip".
Попробуйте:
py -m pip install numpy.
Если не сработатет:
С достаточно новым питоном pip по идее не нужно устанавливать отдельно.
Проверить наличие pip:
py -m pip --version
Если нет, то попробуйте установить через ensurepip:
python -m ensurepip --upgrade


Как найти текст по маске - числа с разделителями?
Как найти текст по маске -
**.**.****, где
*-это цифры?

воспользуйтесь регулярными выражениями:

import re

s = "01.01.2021 мы будем традиционно праздновать Новый Год, а 07.01.2021 Рождество!"
res = re.findall(r"(\d{2}\.\d{2}\.\d{4})", s)
print(res)

вывод:

['01.01.2021', '07.01.2021']


При обращении к словарю по ключу он думает что обращение идет по индексу [закрыт]

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

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

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

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

<code>
VIP_BONUS = {1: (40000, 200),
             2: (30000, 150),
             3: (20000, 100),
             4: (10000, 50),
             5: (4000, 30)},

BONUS_DATA = VIP_BONUS[5]
</code>
OUT:

IndexError: tuple index out of range

Вопрос, как обратиться по ключу к указанному словарю?

замените:

VIP_BONUS = {1: (40000, 200),
             2: (30000, 150),
             3: (20000, 100),
             4: (10000, 50),
             5: (4000, 30)},  # <-- запятая после "}" превращает VIP_BONUS в кортеж с единственным элементом - словарем

на:

VIP_BONUS = {1: (40000, 200),
             2: (30000, 150),
             3: (20000, 100),
             4: (10000, 50),
             5: (4000, 30)}

Пояснение: если после переменной поставить запятую, то вместо скалярного значения получится кортеж:

a = 1,
print(type(a))
>>> <class 'tuple'>


Не могу понять как записать модуль в основной файл
Есть 2 файла. Основной и файл с модулями. В файле с модулями записаны функции добавления товара и удаления товара. Не могу понять как записать эти модули в основной файл. Почти всегда выводит ошибку:

AttributeError: '_io.TextIOWrapper' object has no attribute 'add_product'

Вот пример кода: Основной файл:

import store
shop = {
    'мучное' :{
        'пряники':100
    },
    'молочное': { 'сыр': 200}
}

store = open('store', 'w', encoding='utf-8')

store.add_product()

файл с модулями:

def add_product(group, product, price,shop):
    if group in shop:
        if product not in shop[group]:
            shop[group].update({product:price})
        else:
            print('Такой продукт есть')
    else:
        print('Группы нет')

def del_product(group, product,shop):
    if group in shop:
        if product in shop[group]:
            return shop[group].pop(product)
        else:
            print('Такого продукта нету')
    else:
        print('Такого раздела в магазине нету')

import store
# ...
store = open('store', 'w', encoding='utf-8')
store.add_product()

Не делайте так. Вы тут вызываете метод
add_product объекта
file, а не своего модуля
store.
Старайтесь не называть свои переменные так же, как называются ваши модули, встроенные модули, функции и объекты питона. Это очень частая причина "странных" ошибок.


преобразование кода из многопоточного в многопроцессорный
Есть код, который сейчас проходится по папкам и анализирует информацию. Он работает в многопоточном стиле. Мне нужно его в многопроцессорном сделать. И с этим проблема. Не пойму, где именно в коде это реализовать. Метод open открывает файлы по ссылке и проходится построчно по ним, метод calculate рассчитывает по формуле значения из файлов. Мне в функции майн нужно сделать цикл while True и ловить ошибки пустоту, я попробовал сделать с условием if not empty, не не пойму что внутрь поместить. Также где-то нужно применить метод put. Я на всякий случай закомментировал уже сделанные изменения, чтобы было проще понять как код работал в многопоточном стиле. Помогите разобраться с этой задачей:
<code>
from utilites import show_result, generate_filenames

#import threading
import multiprocessing

#class Ticker(threading.Thread):
class Ticker(multiprocessing.process):

    def __init__(self, ticket_folder, collector, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.ticket_folder = ticket_folder
        self.name_ticket = ''
        self.volatility = 0
        self.collector = collector#?

    def run(self):
        self.calculate(self.open())

    def open(self):
        price_scope = []
        with open(self.ticket_folder, mode='r') as open_ticker:
            for element in open_ticker:
                scattered_element = element.split(',')
                self.name_ticket = scattered_element[0]
                if scattered_element[2] != 'PRICE':
                    price_scope.append(float(scattered_element[2]))
            return price_scope

    def calculate(self, unsorted):
        unsorted.sort()
        half_sum = (unsorted[0] + unsorted[-1]) / 2
        self.volatility = ((unsorted[-1] - unsorted[0]) / half_sum) * 100

def main(folder):
    collector = multiprocessing.Queue()#?
    zero_tickers = []
    value_key = {}
    sorted_place = []
    tickers = []

    for last_folder in generate_filenames(folder):
        tickers.append(Ticker(last_folder))

    for ticker in tickers:
        ticker.start()
    for ticker in tickers:
        ticker.join()
    while not collector.empty():#?
      pass#

    for ran_ticker in tickers:
        if ran_ticker.volatility == 0:
            zero_tickers.append(ran_ticker.name_ticket)
        else:
            value_key[ran_ticker.volatility] = ran_ticker.name_ticket
            sorted_place.append(ran_ticker.volatility)
            sorted_place.sort()

    show_result(sorted_place, value_key, zero_tickers)

path = "trades/"
if __name__ == '__main__':
    main(folder=path)
</code>

map для этой задачи лучше подходит чем процесс. Тут я протащил name_ticket через ретурн чтоб не усложнять с классом. Лучше через замыкание, но лень
<code>
from utilites import show_result, generate_filenames
import multiprocessing

def run(ticket_folder):
    return self.calculate(*self.open(ticket_folder))

def open(ticket_folder):
    price_scope = []
    with open(self.ticket_folder, mode='r') as open_ticker:
        for element in open_ticker:
            scattered_element = element.split(',')
            name_ticket = scattered_element[0]
            if scattered_element[2] != 'PRICE':
                price_scope.append(float(scattered_element[2]))
        return price_scope, name_ticket

def calculate(unsorted, name_ticket):
    unsorted.sort()
    half_sum = (unsorted[0] + unsorted[-1]) / 2
    return ((unsorted[-1] - unsorted[0]) / half_sum) * 100, name_ticket

def main(folder):
    zero_tickers = []
    value_key = {}
    sorted_place = []
    tickers = []

    with multiprocessing.Pool() as pool:
        for volatility, name_ticket in pool.imap_unordered(run, generate_filenames(folder)):
        if volatility == 0:
            zero_tickers.append(name_ticket)
        else:
            value_key[volatility] = name_ticket
            sorted_place.append(volatility)
            sorted_place.sort()

    show_result(sorted_place, value_key, zero_tickers)

path = "trades/"
if __name__ == '__main__':
    main(folder=path)
</code>
Не проверял, так что если где чтото не так написал: пишите - поправим


Ошибка при загрузки файла на ПК в телеграмм боте
Это возникает при отправки файла(например .jpg)
Почему-то не распознаёт тип файла

   fileID = message.photo[-1].file_id
TypeError: 'NoneType' object is not subscriptable

Вот весь код из-за чего возникает эта ошибка

@bot.message_handler(content_types=['photo','document'])
def photo(message):
    print ('message.photo =', message.photo)
    fileID = message.photo[-1].file_id

    print('fileID =', fileID)
    file_info = bot.get_file(fileID)
    print('file.file_path =', file_info.file_path)
    downloaded_file = bot.download_file(file_info.file_path)

    with open("photos/image.jpg", 'wb') as new_file:
        new_file.write(downloaded_file)

photo = open('photos/image.jpg', 'rb')
    bot.send_document(message.chat.id, photo)

Замечу что при отправке фото(в сжатом формате) всё работает отлично а если отправлю файл то вот та ошибка выдаёт
Если кто-то знает где можно загрузить документ(именно чтобы было в виде файла так-как в формате фото картинка ухудшается)  с бота на пк скиньте ссылку на ресурс

при отправке боту файла
message.content_type = document, соответственно
message.photo[-1].file_id будет
None.
для сохранения
document:

@bot.message_handler(content_types=['document'])
def get_docs(message):
    file_info = bot.get_file(message.document.file_id)
    downloaded_file = bot.download_file(file_info.file_path)

    src = 'files/received/' + message.document.file_name
    with open(src, 'wb') as new_file:
        new_file.write(downloaded_file)

    bot.reply_to(message, "Пожалуй, я сохраню это")


Пытаюсь вевести значения в шаблоне из переданного словаря
Моя задача:

Прорендерить перенданный словарь в html, выведя тем самым менюшку (заголовки которой и хранятся в словаре)

Мой код (части):
views.py:

d = {}
for l1 in lavel.objects.all().filter(lvl=2):
    d[l1.id] = dict()
    d[l1.id]['id'] = l1.id
    d[l1.id]['alias'] = l1.alias
    d[l1.id]['title'] = l1.title
...
context = {
    ...
    'd': d,
}
return render(request, "blog/index.html", context=context)

index.html:

{% for k in d %}
<li class="menu-category">
    <span>{{ k }}: {{ d.k.title }} <a href="edit.html">edit</a> <i class="icon icon-plus"></i></span>
.........

Логический смысл: Вывести меню из словаря
Техническая проблема: Фактически вывелось только 'k' (это временный вывод, показывает просто id записи из БД)
'd.k.title' - как будто его и нет
Физически он существует (проверялся во вьюехе выводом в консоль)
Если обрачаться так: d[k]['title'], то django на меня ругается, и мне становится грустно(
В общем, помогите пожалуйста, в чем проблема? Сроки проекта горят уже (курсач скоро сдавать), а я уже 5е сутки сижу с меню... Не одно так другое

не знаю зачем вам такой словарь. Но перебор по словарю ничем не отличается от того как это делается в
python.

{% for k,v in d.items %}
     {{k}}:{{v.title}}
{%endfor%}


Как узнать размер окна приложения (В том числе и полноэкранного) в python
Предположим, я хочу найти размер окна приложения (Не python!).
Как я могу это сделать, и отличается ли способ нахождения окна, от нахождения размера полноэкранного приложения?
p.s. гугл прям совсем пустой, выдаёт только "как узнать размер окна tkinter'а"

Вы можете получить координаты окна, используя функцию GetWindowRect. Для этого вам понадобится дескриптор окна, который вы можете получить с помощью FindWindow, если вы знаете что-то об окне (например, его заголовок).
Предполагая, что вы работаете в Windows, попробуйте использовать модуль pywin32 win32gui с его функциями EnumWindows и GetWindowRect.
Если вы используете Mac OS X, вы можете попробовать использовать appscript.
Для Linux вы можете попробовать один из множества интерфейсов к X11.

import win32gui

def callback(hwnd, extra):
    rect = win32gui.GetWindowRect(hwnd)
    x = rect[0]
    y = rect[1]
    w = rect[2] - x
    h = rect[3] - y
    print("Window %s:" % win32gui.GetWindowText(hwnd))
    print("\tLocation: (%d, %d)" % (x, y))
    print("\t    Size: (%d, %d)" % (w, h))

def main():
    win32gui.EnumWindows(callback, None)

if __name__ == '__main__':
    main()

UPDATE Конкретно для блокнота:

import win32gui

hwnd = win32gui.FindWindow("notepad", None)
rect = win32gui.GetWindowRect(hwnd)
w = rect[2] - rect[0]
h = rect[3] - rect[1]
print("Window %s:" % win32gui.GetWindowText(hwnd))
print("\t    Size: (%d, %d)" % (w, h))


Перевести генерируемый список в строку
Всем привет!

    for i in range(len(state)):
    if 'Сейчас играет' in state[i]:
        for nname in range(len(name)):
            for rrang in range(len(rang)):
                local_column.append(f'{i} {name[i]} {rang[i]}')

        print(local_column[-1])

Вывод:

2 Asan 3
7 Ocean 3

При
print(type(local_column)) - list, при
print(type(local_column[-1])) -- str соответственно
Вопрос, как перевести это "чудо" в нормальный рабочий код? При
print(local_column) забивает консоль всем списком несколько раз, то есть "2 asan 3 2 asan 3  2 asan 3  2 asan 3  2 asan 3 "

В вашем коде два последних цикла
for лишние

for i in range(len(state)):
    if 'Сейчас играет' in state[i]:
        local_column.append(f'{i} {name[i]} {rang[i]}')

print(local_column)


Реализация в многопоточном стиле
Есть код, который сейчас проходится по папкам и анализирует информацию. Он работает в однопоточном стиле. Мне нужно его в многопоточном сделать. Я так понимаю, решение будет примерно таким:
thread = threading.Thread(target=функция), и в конце добавлять

for ticker in tickers:
    ticker.start()
for ticker in tickers:
    ticker.join()

Но я не пойму, где именно в коде это применить, что передавать в таргет. Метод open открывает файлы по ссылке и проходится построчно по ним, метод calculate рассчитывает по формуле значения из файлов.

from utilites import show_result, generate_filenames

import threading

class Ticker(threading.Thread):

    def __init__(self, ticket_folder, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.ticket_folder = ticket_folder
        self.name_ticket = ''
        self.volatility = 0

    def run(self):
        self.calculate(self.open())

    def open(self):
        price_scope = []
        with open(self.ticket_folder, mode='r') as open_ticker:
            for element in open_ticker:
                scattered_element = element.split(',')
                self.name_ticket = scattered_element[0]
                if scattered_element[2] != 'PRICE':
                    price_scope.append(float(scattered_element[2]))
            return price_scope

    def calculate(self, unsorted):
        unsorted.sort()
        half_sum = (unsorted[0] + unsorted[-1]) / 2
        self.volatility = ((unsorted[-1] - unsorted[0]) / half_sum) * 100

def main(folder):
    zero_tickers = []
    value_key = {}
    sorted_place = []
    tickers = []

    for last_folder in generate_filenames(folder):
        tickers.append(Ticker(last_folder))

    for ticker in tickers:
        ticker.start()
    for ticker in tickers:
        ticker.join()

    for ran_ticker in tickers:
        if ran_ticker.volatility == 0:
            zero_tickers.append(ran_ticker.name_ticket)
        else:
            value_key[ran_ticker.volatility] = ran_ticker.name_ticket
            sorted_place.append(ran_ticker.volatility)
            sorted_place.sort()

    show_result(sorted_place, value_key, zero_tickers)

path = "trades/"
if __name__ == '__main__':
    main(folder=path)

Как правильно этот код реализовать в многопоточном стиле?

def run(self) это и есть target по умолчанию. Уже применен в описании класса.
Если вынести функции run, open, calculate из класса, то функцию run передавайте как target в класс Thread, а папку там в параметр функции вместо прилипания атрибутом к экземпляру через self.
Что в вашем коде вам не нравится?
Но Ваш код создает довольно много потоков, если папок много. И так как тут расчёты то лучше все переорганизовать на
multiprocessing.Pool().imap_unordered(... )


Как вывести предложение с каждым словом в обратном порядке?
не знаю как правильно написать код

def backwards(sentence: str) -> str:

backwards('hello python')
совсем запутался, не понимаю как вывести правильно, выход должен быть таким:

'olleh nohtyp'
буду благодарен за любую помощь

вариант 1:

' '.join(i[::-1] for i in text.split())

вариант 2:

' '.join(map(lambda i: i[::-1], text.split()))

вариант 3:

' '.join(map(''.join, map(reversed, text.split())))

вариант 4 (самый короткий):

' '.join(reversed(text[::-1].split()))

вариант 5:

' '.join(reversed(''.join(reversed(text)).split()))


Как вывести самое повторяющееся число с помощью mode?
новичок в питоне, не понимаю как можно осуществить следующую задачу: нужно вывести самое часто повторяющееся число

def mode(elements: List[object]) -> object:

mode([1, 2, 3, 3, 4, 4, 1, 2, 5, 5, 3, 2, 1, 2])
функция должна вывести число 2
объясните пожалуйста, как это сделать?

Ну, например, вот так:
<code>
import statistics as st
a=[1, 2, 3, 3, 4, 4, 1, 2, 5, 5, 3, 2, 1, 2]
st.mode(a)
</code>


Оптимизация. Количество возможных решений Python
Имеется задание, найти количество решений, нужно оптимизировать , чтобы этот код выполнялся используя не 4 цикла , а 3 (но лучше 2 цикла). Нужно понизить сложность кода.
Формула:

xa^2 + yb^2 = xc^2 + yd^2

n , x , y = map(int,input().split())

counter = 0
for a in range(n+1):
    for b in range(n+1):
        for c in range(n+1):
            for d in range(n+1):
                if (x*(a**2))+(y*(b**2)) == (x*(c**2)) +(y*(d**2)):
                    counter += 1
print(counter)

У @Danis получилось очень хорошее и очень быстрое решение, но его можно сделать еще быстрее (ориентировочно где-то в 5-10 раз - проверял на
n = 200, x = 10, y = 20):

list_ = [x * a * a + y * b * b
          for a in range(n + 1)
          for b in range(n + 1)]

list_.sort()
list_.append(list_[-1] + 1)

counter = 0
local = 1
for i in range(1, len(list_)):
    if list_[i - 1] == list_[i]:
        local += 1
    else:
        counter += local**2
        local = 1

print(counter)

Вот еще более быстрый (где-то на 5%) вариант:

list_ = [x * a * a + y * b * b
          for a in range(n + 1)
          for b in range(n + 1)]

list_.sort()
list_.append(list_[-1] + 1)

counter = 0
pos = 0
for i in range(1, len(list_)):
    if list_[i - 1] != list_[i]:
        counter += (i - pos)**2
        pos = i

print(counter)

Проверял на
x = 10, y = 20, n = 2000, время выполнения 1,92сек
Вот этот код работает еще на 5% быстрее:

list_ = [x * a * a + y * b * b
          for a in range(n + 1)
          for b in range(n + 1)]

list_.sort()
list_.append(list_[-1] + 1)

counter = 0
pos = 0
value = list_[0]
for i in range(1, len(list_)):
    if list_[i] != value:
        counter += (i - pos)**2
        pos = i
        value = list_[i]

print(counter)

Вот этот код работает еще на 18% быстрее:

list_ = []

for a in range(n + 1):
    value = x * a * a
    for b in range(n + 1):
        list_.append(value + y * b * b)

list_.sort()
list_.append(list_[-1] + 1)

counter = 0
pos = 0
value = list_[0]

for i in range(1, len(list_)):
    if list_[i] != value:
        counter += (i - pos)**2
        pos = i
        value = list_[i]

print(counter)

Вот этот код работает еще на 13% быстрее:

abx = []
aby = []

for i in range(n + 1):
    abx.append(x * i * i)
    aby.append(y * i * i)

list_ = []

for a in abx:
    for b in aby:
        list_.append(a + b)

list_.sort()
list_.append(list_[-1] + 1)

counter = 0
pos = 0
value = list_[0]

for i in range(1, len(list_)):
    if list_[i] != value:
        counter += (i - pos)**2
        pos = i
        value = list_[i]

print(counter)

Вот этот код работает ещё на 22% быстрее (спасибо @Danis за идею уйти от степеней):

abx = []
aby = []

for i in range(n + 1):
    abx.append(x * i * i)
    aby.append(y * i * i)

list_ = []

for a in abx:
    for b in aby:
        list_.append(a + b)

list_.sort()
list_.append(list_[-1] + 1)

counter = 0
pos = 0
value = list_[0]

for i in range(1, len(list_)):
    if list_[i] != value:
        counter += (i - pos) * (i - pos)
        pos = i
        value = list_[i]

print(counter)

Вот этот код работает еще на 9% быстрее:

abx = []
aby = []

for i in range(n + 1):
    abx.append(x * i * i)
    aby.append(y * i * i)

list_ = [a + b for a in abx for b in aby]

list_.sort()
list_.append(list_[-1] + 1)

counter = 0
pos = 0
value = list_[0]

for i in range(1, len(list_)):
    if list_[i] != value:
        counter += (i - pos) * (i - pos)
        pos = i
        value = list_[i]

print(counter)


TypeError: unsupported operand type(s) for ** or pow(): 'tuple' and 'int'
я новичок в питоне, задали найти дистанцию между точками. Вот что у меня получилось:

from typing import Tuple

import math

def distance(pointA: Tuple[float, float], pointB: Tuple[float, float]) -> float:

return math.sqrt((pointA)**2 + (pointB)**2)

Далее вставляю значения:

distance((1, 1), (5, 4))

И программа выдает ошибку:

TypeError: unsupported operand type(s) for ** or pow(): 'tuple' and 'int'

Объясните пожалуйста, где ошибка

вообще-то формула для расстояния:

d^2 = dx^2 + dy^2

а ваша формула

math.sqrt((pointA)**2 + (pointB)**2)

что считать должна?
ну и конечно вы пытаетесь выполнить
(pointA)**2, т.е. повести в квадрат совокупность из двух чисел - это как? что это должно значить?
правильнее было бы

dx = pointA[0] - pointB[0]
dy = pointA[1] - pointB[1]

d = (dx**2 + dy**2)**0.5

P.S.
для многомерного евклидово пространства функция должна быть такой:

def distance(pointA, pointB) -> float:
    return sum((point[0] - point[1])**2 for point in zip(pointA, pointB))**0.5


Как создать меню с выбором функций на Python?
Мне нужно, чтобы после выбор каждой функции, у меня заново открывалось меню, и только при выборе нуля в меню, он выходил из неё.
Пример:
<code>
print("1. выбор действия один")
print("2. выбор действия два")
print("3. выбор действия три")
print("0. выйти из программы")
default = input("Выберите пункт: ")
</code>

while True:
    print("1. выбор действия один")
    print("2. выбор действия два")
    print("3. выбор действия три")
    print("0. выйти из программы")
    cmd = input("Выберите пункт: ")

    if cmd == "1":
        # действие 1
    elif cmd == "2":
        # действие 2
    elif cmd == "3":
        # действие 3
    elif cmd == "0":
        break
    else:
        print("Вы ввели не правильное значение"


Как отправить сообщение вне команды в дискорд боте?(python)
Вот положим есть такой код:
<code>
from discord.ext import commands

settings = {
    # ...
}

bot = commands.Bot(command_prefix = settings['prefix'])

@bot.command()
async def hello(ctx):
    await ctx.send('Hello')

bot.run(settings['token'])
</code>
Как вне команды послать сообщение?

Импортируем
asyncio

Создаем асинхронную функцию для отправки сообщения. Например -
send_message()

Вызываем функцию через
asyncio, передавая нужные аргументы:

asyncio.run_coroutine_threadsafe(send_message(762470056040330836, 'test'), bot.loop)

В данном случае
760470076070690836 - id текстового канала, а
'test' - сообщение.
Используя эту строку можно в любой момент вызвать функцию для отправки сообщения.
Пример кода:

import discord
from discord.ext import commands
import asyncio

bot = commands.Bot(command_prefix = settings['prefix'])

async def send_message(channel_id: int, msg):
    channel = bot.get_channel(channel_id)
    await channel.send(msg)

@bot.event
async def on_ready():
    asyncio.run_coroutine_threadsafe(send_message(760470076070690836, 'test'), bot.loop)

bot.run(settings['token'])

Как только бот будет готов к работе (функция
on_ready()), в канал будет отправлено сообщение 'test'


Почему бот не удаляет приватный канал после его создания?
Я написал это для себя чтобы был бот который создаёт канал не в самом конце а после какого-то канала.
В итоге канал создаётся но не удаляется после выхода
Код:
<code>
@bot.event
async def on_voice_state_update(member, before, after):
    if after.channel != None:
        if after.channel.id == 778594516969586720:
            for guild in bot.guilds:
                maincategory = discord.utils.get(guild.categories, id=778594516856733696) #категория создания канала
                channel2 = await guild.create_voice_channel(
                    f'╠╣{member.display_name}', #название канала
                    position=3, #позиция созданного канала (для теста просто уберите этот пункт)
                    category=maincategory, #категория  в которой создастся канал
                    bitrate=96000 # установить битрейт 96
                )
                await channel2.set_permissions(member, connect=True, mute_members=True, move_members=True, manage_channels=True) # установить права на канал его создателю
                await member.move_to(channel2) # переместить пользователя в этот канал
#часть кода которая должна удалять канал после выхода но этого не делает
                def check(x, y):
                    return len(channel2.members) == 0
                await bot.wait_for('voice_channel_update', check = check)
                await channel2.delete()
</code>
Хз зачем но вот: документация по discord.py

def check(x, y, z):
    return len(channel2.members) == 0

await bot.wait_for('voice_state_update', check=check)
await channel2.delete()


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

matrix = np.array([
    [3, 2, -5],
    [3, 0, 0],
    [0, 1, 0]])

На выходе нужно получить:

[[ -5.  3. 2.]
[ 0.  3.  0.]
[ 0.  0.  1.]]

попробуйте так:

res = matrix[:, ((matrix==0) * np.power(10, range(len(matrix)))
                                 .reshape(-1, 1))
                .sum(axis=0)
                .argsort()
                [::-1]
]

результат:

In [219]: res
Out[219]:
array([[-5,  3,  2],
       [ 0,  3,  0],
       [ 0,  0,  1]])

PS если у вас есть значения стремящиеся к нулю, тогда лучше воспользоваться
np.isclose(matrix, 0, atol=1e-07) вместо строгого сравнения
matrix==0.


Как отсортировать двухмерный массив в коде по количеству нулей в строке?
Есть массив, некоторые элементы которого равны нулю. Нужно отсортировать его по количеству нулей в строках, кроме последнего столбца. Где строка с наибольшим количеством нулей будет последней, а с наименьшим или без - первой.
Вообще, это решение нужно для перестановки строк матрицы в привычный вид для решения СЛАУ.
Код:

import copy
import numpy as np

def maxArr(arr):
    max = abs(arr[0][0])
    for i in range(len(arr)):
        for j in range(len(arr)):
            if max < abs(arr[i][j]):
                max = abs(arr[i][j])
                row = i
                col = j
    return max, row, col

def printArr(arr):
    for i in range(len(arr)):
        for j in range(len(arr[i])):
            print("%2.4f" % (arr[i][j]), end = ' ')
        print(" ")
    print(" ")

arrM = np.array([[3.81, 0.25, 1.28, 1.75, 4.21],
        [2.25, 1.32, 5.58, 0.49, 7.47],
        [5.31, 7.28, 0.98, 1.04, 2.38],
        [10.39, 2.45, 3.35, 2.28, 11.48]]);

arrR = copy.copy(arrM)

arrY = np.array([[0.0] * len(arrM[0])] * len(arrM))

x = [0] * len(arrM)
r = [0] * len(arrM)

for k in range(len(arrM)):
    print("Матрица M[" + str(k) + "]: ")
    printArr(arrM)
    max, p, q = maxArr(arrM)
    m = [0] * len(arrM)

    for i in range(len(arrM)):
        if i != p:
            # подсчет коеф. м
            m[i] = -(arrM[i][q]/arrM[p][q])
            for j in range(len(arrM[i])):
                # умножаем элементы неглавных строк на коеф. м
                arrM[i][j] += arrM[p][j]*m[i]

    #"вычеркиваем" элементы главной строчки
    for i in range(len(arrM[0])):
        arrY[p][i] = arrM[p][i]
        arrM[p][i] = 0

print("Результат прямого хода: ")
printArr(arrY)

Конкретно в моем коде нужно преобразить массив
arrY из такого

0.0000 -0.0000 0.0000 0.9005 -0.3449
0.0000 -0.0000 4.9504 0.0127 5.4406
0.0000 6.0279 -0.7321 -0.1252 -3.4871
10.3900 2.4500 3.3500 2.2800 11.4800

в такой

10.3900 2.4500 3.3500 2.2800 11.4800
0.0000 6.0279 -0.7321 -0.1252 -3.4871
0.0000 -0.0000 4.9504 0.0127 5.4406
0.0000 -0.0000 0.0000 0.9005 -0.3449

Мне подсказали такое решение, но оно не работает с моим кодом.

printArr(arrY[(arrY==0).sum(axis=1).argsort()])


Как отсортировать двухмерный массив по количеству нулей в строке?
Есть массив, некоторые элементы которого, могут быть равны нулю. Нужно отсортировать его по количеству нулей в строках, где строка с наибольшим количеством нулей будет последней, а с наименьшим (или без) - первой.

arr = np.array([[0.00, 0.00, 0.00, 0.13, 0.38],
                [2.25, 10.32, 0.00, 0.49, 7.47],
                [3.81, 0.00, 0.00, 1.75, 4.21],
                [0.00, 0.00, 3.22, 0.00, 0.00]]);

В результате должно получиться:

[[2.25, 1.32, 0.0, 0.49, 7.47],
[3.81, 0.0, 0.0, 1.75, 4.21],
[0.0, 0.0, 0.0, 0.1, 0.38],
[0.0, 0.0, 3.22, 0.0, 0.0]]


Как сгенерировать несколько последовательных одинковых combinations со своим уникальным id и сохранить полученный результат в df?
Как с помощью однострочного выражения можно сгенерировать несколько последовательных одинковых
combinations со своим уникальным
id и сохранить полученный результат в
df?
Пример рабочего кода, который хотелось бы упростить и увеличить скорость выполнения
Столбец col5 содержит уникальных идентификатор сгенерированного набора
gc

import itertools as iter
import pandas as pd

gc = iter.combinations(range(1, 7), 4)
df = pd.DataFrame(gc, columns=['col1', 'col2', 'col3', 'col4'])

dfr = pd.DataFrame()
for i in range(1,4):
    dfi = df.copy()
    dfi['col5'] = i
    dfr = pd.concat([dfr, dfi])

dfr = dfr.reset_index().drop(columns='index')
print(dfr)

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

      col1  col2  col3  col4  col5
0      1     2     3     4     1
1      1     2     3     5     1
2      1     2     3     6     1
3      1     2     4     5     1
4      1     2     4     6     1
5      1     2     5     6     1
6      1     3     4     5     1
7      1     3     4     6     1
8      1     3     5     6     1
9      1     4     5     6     1
10     2     3     4     5     1
11     2     3     4     6     1
12     2     3     5     6     1
13     2     4     5     6     1
14     3     4     5     6     1
15     1     2     3     4     2
16     1     2     3     5     2
17     1     2     3     6     2
18     1     2     4     5     2
19     1     2     4     6     2
20     1     2     5     6     2
21     1     3     4     5     2
22     1     3     4     6     2
23     1     3     5     6     2
24     1     4     5     6     2
25     2     3     4     5     2
26     2     3     4     6     2
27     2     3     5     6     2
28     2     4     5     6     2
29     3     4     5     6     2
30     1     2     3     4     3
31     1     2     3     5     3
32     1     2     3     6     3
33     1     2     4     5     3
34     1     2     4     6     3
35     1     2     5     6     3
36     1     3     4     5     3
37     1     3     4     6     3
38     1     3     5     6     3
39     1     4     5     6     3
40     2     3     4     5     3
41     2     3     4     6     3
42     2     3     5     6     3
43     2     4     5     6     3
44     3     4     5     6     3

Ну вот так вроде будет быстрее, хотя разница в скорости всего в 2 раза что ли на вашем примере. На более крупных таблицах, возможно, разница будет существеннее:

import itertools as iter
import pandas as pd

gc = iter.combinations(range(1, 7), 4)
df = pd.DataFrame(gc, columns=['col1', 'col2', 'col3', 'col4'])

dfr = pd.concat([df for _ in range(1,4)]).reset_index().drop(columns='index')
dfr['col5'] = [i for i in range(1,4) for _ in range(df.shape[0])]
print(dfr)

Пояснения:

Объединение датафреймов лучше вынести за цикл. Когда датафрейм всё время растёт внутри цикла, это сильно замедляет процесс. Гораздо быстрее будет, если делать
concat сразу всех накопленных датафреймов разом. А поскольку они у вас одинаковые (за исключением последнего столбца), отпадает также надобность в их копировании, можно датафрейм сам с собой сконкатенировать нужное число раз
Последнюю колонку можно заполнить также разово и уже после конкатенации, это опять должно быть быстрее и проще, чем вписывать её отдельно в каждый датафрейм и потом это всё конкатенировать.

Update: Ещё быстрее будет, если делать через
Numpy, а в
DataFrame превращать в самом конце (если это вообще нужно). Примерно так:

import itertools as iter
import numpy as np
import pandas as pd

gc = np.array([list(t) for t in iter.combinations(range(1, 7), 4)])
col5 = np.array([i for i in range(1,4) for _ in range(gc.shape[0])]).reshape(-1,1)
dfm = np.hstack((np.vstack(tuple(gc for _ in range(1,4))),col5))
dfr = pd.DataFrame(dfm, columns=['col1', 'col2', 'col3', 'col4','col5'])
print(dfr)

Тут можно (и нужно) оптимизировать и дальше, например, создать сразу матрицу
Numpy нужного размера и делать не
vstack и
hstack, а вписывать матрицы внутрь готовой уже матрицы. Хотя надо смотреть, как будет быстрее, но так не нужно будет делать много копий матрицы с комбинациями.


Реализуйте методы класса для ввода данных, вывода данных, реализуйте доступ к отдельным полям через методы класса
Задача: Реализуйте класс «Человек». Необходимо хранить в полях класса: ФИО, дату рождения, контактный телефон, город, страну, домашний адрес. Реализуйте методы класса для ввода данных, вывода данных, реализуйте доступ к  отдельным полям через методы класса
При отработке последнего принта получаю:

None
Process finished with exit code 0

<code>
class Homo():
    """метод введення даних"""

    def __init__(self, name_surname_patronymic, bithtday, telephone_num, city, country, adress):
        self.name_surname_patronymic = name_surname_patronymic
        self._bithtday = bithtday
        self._telephone_num = telephone_num
        self.city = city
        self.country = country
        self._adress = adress

    def print_pablic_inf(self):
        show_pablic_inf = str(self.name_surname_patronymic) + self.city + " " + self.country
        return (self.name_surname_patronymic, self.city, self.country)

    def print_privat_inf(self):
        show_privat_inf = str(self.name_surname_patronymic) + " " + self._bithtday + " " + self._telephone_num \
                          + " " + self.city + " " + self.country + " " + self._adress
        return (
        self.name_surname_patronymic, self._bithtday, self._telephone_num, self.city, self.country, self._adress)

    def print_pablic_inf_1(self):
        return self.print_privat_inf()

homo_sapiens = Homo(
    "Ке́нни Макко́рмик",
    "24 of april",
    "0937225256",
    "Саус-парк",
    "USA",
    "South Park"
)

# print(homo_sapiens.print_pablic_inf())
print(homo_sapiens.print_pablic_inf_1())
</code>

я отметил для вас, где надо внести исправления:
<code>
class Homo():
    """метод введення даних"""
    def __init__(self, name_surname_patronymic, bithtday, telephone_num, city, country, adress):
        self.name_surname_patronymic = name_surname_patronymic

#        self._bithtdaybithtday = bithtday
        self._bithtday = bithtday

#        self._telephone_numtelephone_num = telephone_num
        self._telephone_num = telephone_num

        self.city = city
        self.country = country
        self._adress = adress

    def print_pablic_inf(self):
        show_pablic_inf = str(self.name_surname_patronymic) + self.city + " " + self.country
        return (self.name_surname_patronymic, self.city, self.country)

    def print_privat_inf(self):
        show_privat_inf = str(self.name_surname_patronymic) + " " + self._bithtday + " " + self._telephone_num \
                          + " " + self.city + " " + self.country + " " + self._adress
        return (self.name_surname_patronymic, self._bithtday, self._telephone_num, self.city, self.country, self._adress)

    def print_pablic_inf_1(self):
#        self.print_privat_inf()
        return self.print_privat_inf()

homo_sapiens = Homo(
    "Ке́нни Макко́рмик",
    "24 of april",
    "0937225256",
    "Саус-парк",
    "USA",
    "South Park"
)

print(homo_sapiens.print_pablic_inf())
print(homo_sapiens.print_pablic_inf_1())
</code>


Как достать два минимальных из множества в python?
Задача такая: нужна достать буквы, которые встречаются в тексте только 1 раз. Я пробовал использовать min, но он достает только одно значение и больше вариантов нет.
<code>
b = 'moonmens'
s = {}
m = ''
for i in b:
if i in s:
    s[i] += 1
if i not in s:
    s.setdefault(i, 1)
</code>

код для вывода букв которые встречаются минимальное число раз (даже если их больше 1):

text = "moonmens"

# получить уникальные буквы
letters = set(text)

# подсчитать кол-во уникальных букв в тексте
counts = [(letter, text.count(letter)) for letter in letters]

# отсортировать список
counts.sort(key=lambda obj: obj[1])

# вывести буквы с минимальным кол-вом повторений
count = counts[0][1]
res = [obj[0] for obj in counts if obj[1] == count]

print(*res)

код для ситуации с единократным встречанием буквы в тексте:

res = [letter for letter in text if text.count(letter) == 1]

print(*res)


Вывести переменную парсера через бота Discord на Python
Пытаюсь вывести переменную items через команду бота, но она не определяется. Как решить?
<code>
import requests
from bs4 import BeautifulSoup
import discord
from discord.ext import commands
from discord.ext.commands import Bot

Bot = commands.Bot(command_prefix= '!')
client = discord.Client()

URL = 'site'
HEADERS = {'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36', 'accept': '*/*'}

def get_html(url, params=None):
    r = requests.get(url, headers=HEADERS, params=params)
    return r

def get_content(html):
    soup = BeautifulSoup(html, 'html.parser')
    items = soup.find_all('div', class_='player-name')

    print(items)

def parse():
    html = get_html(URL)
    if html.status_code == 200:
        get_content(html.text)

parse()

@Bot.command(pass_context = True)
async def code(ctx):
    html = get_html(URL)
    await ctx.send(html)

Bot.run('--------------')
</code>

Подправил код из вопроса и теперь
items будет передано в
ctx.send. Места, где изменил, выделил
Но есть вопрос: понимает ли
ctx.send значение из
items? А это результат выполнения
soup.find_all, что, является списком элементов
Tag из
bs4. Возможно, нужно будет обработать
items, чтобы, например, получить строку.
Код:

import requests
from bs4 import BeautifulSoup
import discord
from discord.ext import commands
from discord.ext.commands import Bot

Bot = commands.Bot(command_prefix= '!')
client = discord.Client()

URL = 'site'
HEADERS = {'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36', 'accept': '*/*'}

def get_html(url, params=None):
    r = requests.get(url, headers=HEADERS, params=params)
    return r

def get_content(html):
    soup = BeautifulSoup(html, 'html.parser')
    items = soup.find_all('div', class_='player-name')
    return items
    # ^^^^^^^^^^^^^^^^^

def parse():
    r = get_html(URL)
    r.raise_for_status()
    return get_content(r.content)
    # ^^^^^^^^^^^^^^^^^

@Bot.command(pass_context = True)
async def code(ctx):
    items = parse()
    await ctx.send(items)
    # ^^^^^^^^^^^^^^^^^

Bot.run('--------------')


Как забиндить пробел в tkinter? [закрыт]

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

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

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

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

Как забиндить пробел в tkinter? Ну например левая кнопка это
canvas.bind("<Button-1>", OnClick),а движение с зажатой левой кнопкой это
canvas.bind("<B1-Motion>", OnClick). Как сделать тоже самое, но на пробел?

<code>
from tkinter import *
from random import *

root=Tk()
canvas=Canvas(root,width=400,height=300,bg='white')
def draw(event=None):
    canvas.delete(ALL)# clear canvas first
    canvas.create_oval(randint(0,399),randint(0,299),15,15,fill='red')
draw()
canvas.pack()

root.bind("<space>", draw)
root.mainloop()
</code>
Источник:  How to bind spacebar key to a certain method in tkinter (python) от участника  @twasbrillig.


Выполнение действия при завершении обратного отсчета [закрыт]

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

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

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

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

Код не мой, и мне надо его доработать, чтобы выполнялось определенное действие (открывалась консоль), когда таймер обратного отчета закончит работу
<code>
import tkinter as tk
import datetime as dt

class CountdownLabel(tk.Label):
    """ A Label in the format of HH:MM:SS, that displays counting down from given
    seconds.
    """

    def __init__(self, master, seconds_left):
        super().__init__(master)
        self._seconds_left = seconds_left
        self._timer_on = False
        self._countdown() # Start counting down immediately

    def _start_countdown(self):
        self._stop_countdown()
        self._countdown()

    def _stop_countdown(self):
        if self._timer_on:
            self.after_cancel(self._timer_on)
            self._timer_on = False

    def _countdown(self):
        self['text'] = self._get_timedelta_from_seconds(self._seconds_left)
        if self._seconds_left:
            self._seconds_left -= 1
            self._timer_on = self.after(1000, self._countdown)

    @staticmethod
    def _get_timedelta_from_seconds(seconds):
        return dt.timedelta(seconds=seconds)

if __name__ == '__main__':
    root = tk.Tk()

    countdown = CountdownLabel(root, 3)
    countdown.pack()
    root.wm_attributes("-topmost", 1)
    root.resizable(width=False, height=False)
    root.overrideredirect(1)
    root.geometry("300x420+500+200")

    root.mainloop()
</code>

За таймер тут отвечает метод
_countdown. Он "крутится", пока выполняется условие
if self._seconds_left: (пока в поле
self._seconds_left не ноль). Чтобы выполнить действие, когда таймер заканчиваться, нужно к этому
if добавить блок
else, пример:

def _countdown(self):
    self['text'] = self._get_timedelta_from_seconds(self._seconds_left)
    if self._seconds_left:
        self._seconds_left -= 1
        self._timer_on = self.after(1000, self._countdown)
    else:
        ...  # Сюда пишите действие, которое должно выполниться, когда таймер закончит работу


Как удалить строку и столбец по индексу в матрице?
Нужно удалить весь столбец/строку по индексу из матрицы (искал минимальный элемент главной диагонали). Теперь нужно удалить всю строку и столбец по индексу (индексом назвал
minindex).
Искал в интернете как делать что-то подобное, но везде через
numpy.
Должно получиться как-то так:

in:
[7, 9, 5]
[0, 6, 1]
[9, 6, 1]
out:
[7, 9]
[0, 6]

Решение с испольованием list.pop, для того чтобы удалять элементы "на месте" (
in place), т.е. не создавая копии матрицы / строк / столбцов:

idx_row, idx_col = 2, 2

# удаляем строку
_ = matrix.pop(idx_row)

# удаляем столбец
rows = len(matrix)
for i in range(rows):
    _ = matrix[i].pop(idx_col)

результат:

print(matrix)
>>> [[7, 9], [0, 6]]


Как быстро расчитать среднее арифметическое, геометрическое и гармоническое для разности остортированных элементов каждой строки в таблице?
Как быстро и эффективно расчитать среднее арифметическое, геометрическое и гармоническое для разности остортированных элементов каждой строки в таблице с 100 миллионами строк?
В случае если разность двух элементов одной строки равна нулю, то ноль нужно заменить на 1 для подсчета среднего.
Ниже приведен код. Работает только подсчет
ndf['r1'] но и он очень медленный из-за
apply. Не знаю, как также быстро подсчитать среднее геомитрическое и гармоническое.

import pandas as pd
import math

lst = [[1,23,45],[20,30,10],[60,15,2]]

df = pd.DataFrame(lst, columns = ['col1', 'col2', 'col3'])
print(df)
ndf = pd.DataFrame()

ndf['r1'] = df.apply(lambda x: pd.Series(list(x.sort_values())),axis=1).diff(axis=1).iloc[:,1:].mean(axis=1)
#ndf['r2'] = (10 ** df.apply(lambda x: x.sort_values(),axis=1).diff(axis=1).iloc[:,1:].applymap(math.log10).sum(axis=1)) ** (1/len(columns))
#ndf['r3'] = len(df.columns)/( (1/df.diff(axis=1).iloc[:,1:]).sum(axis=1) )

print(ndf)

Пример данных:

from scipy.stats import gmean, hmean

df = pd.DataFrame([[1,23,45],[20,30,10],[60,15,2],[45,1,1]])

In [91]: df
Out[91]:
    0   1   2
0   1  23  45
1  20  30  10
2  60  15   2
3  45   1   1  # <--- пример строки, где разность двух элементов одной строки равна нулю

векторизированное решение с использованием
Numpy и
SciPy:

# матрица разностей остортированных элементов каждой строки в таблице
a = np.diff(np.sort(df, axis=1), axis=1)
# замена 0 --> 1
a[a==0] = 1
res = pd.DataFrame({
    "mean": np.mean(a, axis=1),
    "gmean": gmean(a, axis=1),
    "hmean": hmean(a, axis=1)
}, index=df.index)

результат:

In [92]: res
Out[92]:
   mean      gmean      hmean
0  22.0  22.000000  22.000000
1  10.0  10.000000  10.000000
2  29.0  24.186773  20.172414
3  22.5   6.633250   1.955556


sqlite3.cursor.execute не выполняет запорос на вставку из другой таблицы
В БД есть таблица(1), в которую надо записать значение из другой таблицы(2) этой же БД. В программе пользователь выбирает из
listbox
id записи которую надо занести из 2 в 1.
Часть кода который я написал и, как вы могли догадаться, он не работает. Ошибок не выдает, просто не выполняется запрос:

tir = #число, просто число
query1 = f'Insert Into toto Select *,{tir} From matches where match_id= {lis.get(lis.curselection())[0]}'
cur.execute(query1)

cur.execute(query1) - выполняет запрос, но не читает возвращенные записи автоматически.
SQL команда
INSERT ничего не возвращает - она просто вставляет записи в таблицу.
я переписал запрос с использованием параметризированных значений дабы избежать рисков, связанных с SQL Injections
Не забывайте зафиксировать DML при помощи команды
COMMIT
Чтобы просмотреть результат вставки можно вычитать записи из таблицы
toto
Если вы все еще не видите новых записей в таблице
toto, значит подзапрос
Select *, ? From matches where match_id= ? не вернул ни одной записи и вставлять соответственно было нечего.

conn = sqlite3.connect('example.db')

cur = conn.cursor()
# ...

tir = #число, просто число
query1 = f'Insert Into toto Select *, ? From matches where match_id= ?'
params = [tir, lis.get(lis.curselection())[0]]
cur.execute(query1, params)
conn.commit()

# читаем из `toto`
cur.execute("select * from toto")
records = list(cur.fetchall())


Как сделать чтоб после обратного отчета таймера в tkinter открывалось 100 cmd
Я недавно начал изучать python и решил в ознакомительных целях написать на нем вирус. Нашел в интернете код для таймера, немного его доработал, чтоб у вируса пропал крестик и скрыть/раскрыть, чтоб его нельзя было менять в размерах и чтоб он всегда был поверх других окон, но я не знаю как в коде сделать так, чтобы после окончания таймера открывалось 100 cmd,еще было бы неплохо чтоб windows после этого уходил в перезагрузку, если это вообще можно сделать в python.
Пишу я в IDEA на версии 3.9.
<code>
import tkinter as tk
import datetime as dt

class CountdownLabel(tk.Label):
""" A Label in the format of HH:MM:SS, that displays counting down from given
seconds.
"""

def __init__(self, master, seconds_left):
    super().__init__(master)
    self._seconds_left = seconds_left
    self._timer_on = False
    self._countdown()                   # Start counting down immediately

def _start_countdown(self):
    self._stop_countdown()
    self._countdown()

def _stop_countdown(self):
    if self._timer_on:
        self.after_cancel(self._timer_on)
        self._timer_on = False

def _countdown(self):
    self['text'] = self._get_timedelta_from_seconds(self._seconds_left)
    if self._seconds_left:
        self._seconds_left -= 1
        self._timer_on = self.after(1000, self._countdown)

@staticmethod
def _get_timedelta_from_seconds(seconds):
    return dt.timedelta(seconds=seconds)

if __name__ == '__main__':
    root = tk.Tk()

countdown = CountdownLabel(root, 300)
countdown.pack()
root.wm_attributes("-topmost", 1)
root.resizable(width=False, height=False)
root.overrideredirect(1)
root.geometry("300x420+500+200")

root.mainloop()
</code>

Вот этот код открывает
cmd:

import os
os.startfile(r'c:\Windows\system32\cmd.exe')

Чтобы открыть 100
cmd, сделайте цикл и в нём открывайте
cmd


Разница между двумя массивами
Есть 2 массива

a = ['dd','qq','aa']
b = ['qq']

как сравнить их и получить не уникальные значения?
к примеру
c = ['dd', 'aa']

способ 1:

a = ['dd','qq','aa']
b = ['qq', 'xx']

res = [obj for obj in a if obj not in b] + [obj for obj in b if obj not in a]

print(res)

способ 2:

res = list(set(a).difference(b)) + list(set(b).difference(a))

способ 3:

res = list(set(a + b).difference(set(a).intersection(b)))

способ 4:

res = list(set(a) ^ set(b))


Преобразовать json to base64
Не могу преобразовать json в base64

jsonSend  = {"pres": {
        "file": i,
        "data": data
        }

b =  json.loads(s1)
base = base64.b64encode(b)

Ошибка the JSON object must be str, bytes or bytearray, not dict
Пробовал так

s1 = json.dumps(jsonSend)

b =  json.loads(jsonSend)
base = base64.b64encode(b)

Ошибка Object of type bytes is not JSON serializable

<code>
import json
import base64

jsonSend = {"pres": {"file": 'i', "data": 'data'}}
s = json.dumps(jsonSend)
base = base64.b64encode(s.encode('utf-8'))

print(base)
</code>
Источник: Похожий вопрос


Как работает "^" в питоне?
Увидел, что человек в коде вместо
10**3 писал
10^3.
Как бы ошибка очевидна, но я решил проверить, а вообще
10^3 работает ли в коде.
И это работает, но выводит довольно интересные значения.
Поискав в интернете не нашел ничего об этом. Но очень стало интересно, что это такое?

In [1]: 10^1
Out[1]: 11
In [2]: 10^2
Out[2]: 8
In [3]: 10^3
Out[3]: 9
In [4]: 10^4
Out[4]: 14
In [5]: 10^10
Out[5]: 0
In [6]: 10^9
Out[6]: 3

Указанная Вами операция называется "Исключающее ИЛИ". Ещё его называют "Побитовое исключающее ИЛИ" и применяется для манипуляции битами.
Возвращает 1 в каждый бит, где только один из двух сравнимых битов имел значение 1.
Пример:

1010 ^ 0100 = 1110

В приведённых Вами примерах указаны числа в десятичной системе. Поэтому при вычислении возвращается десятичное представление.


Использовать exec или избегать?
Пишу discord бота на питоне. Хотелось бы вынести каждую команду в отдельный файл.
Единственное что я придумал - читать содержимое файла и использовать функцию exec.
Использовать import не получится, так как в коде команд используются глобальные переменные.
Уместно ли такое решение, или есть варианты получше?
Недаром ведь говорят "eval is evil" :)
(код подаю в сокращенном и обрезанном виде, оставил только элементы по сути вопроса)
<code>
bot=Bot()

@bot.command()
async def command1(ctx):
    await ctx.send("command1 invoked")

@bot.command()
async def command2(ctx):
    await ctx.send("bot is on %s guilds"%len(bot.guilds))
</code>

Вариант №1, если хочется чтобы декораторы выглядели именно как декораторы
В отдельных файлах заворачиваете ваши функции так:

def make_command1(bot):

    @bot.command()
    async def command1(ctx):
        await ctx.send("command1 invoked")

В главном файле используете их так:

from command1_file import make_command1

bot = Bot()

command1 = make_command1(bot)

Вариант №2
В отдельных файлах пишите только функции без декораторов:

async def command1(ctx):
    await ctx.send("command1 invoked")

А в главном файле привязываете их к боту так:

from command1_file import command1

bot = Bot()

command1 = bot.command()(command1)

Вариант 3, модификация варианта 1. Если вам так уж хочется иметь доступ к глобальным переменным не передавая их явно.
Вот так в отдельном файле:

def make_command1():

    bot = globals()['bot']

    @bot.command()
    async def command1(ctx):
        await ctx.send("command1 invoked")

Вот так в главном:

from command1_file import make_command1

bot = Bot()

command1 = make_command1()

Но я крайне не рекомендую так делать, лучше все переменные передавать явно. В данном варианте вам самостоятельно придётся следить за тем, чтобы все нужные глобальные переменные были объявлены строго до строчек
command1 = make_command1()


Как не показывать консоль при выполнении os.system()?
Я пробовал изменить расширение файла с .py на .pyw но это не помогло.
Как не показывать консоль при выполнении os.system()?

Вывод с консоли?
Самый простой вариант это перенаправить поток вывода в
/dev/null.
То-есть:
echo "kek" 1>/dev/null
Ну или вторым вариантом можно использовать библиотеку
subprocess, которая делает тоже самое:

import subprocess
subprocess.call(["ls", "-l"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)  # No any output


Как выполнить принт read файла в открытом уже файле ? Python
Почему я не могу принтовать то что написал в
directionOpen сразу после открытия.
Если сразу после строки
directionOpen.write(fileOpen.read()) добавить

print(directionOpen.read()) то выпадает ошибка:

io.UnsupportedOperation: not readable.

# Copy the first file in another file and read it

fileName = input("What file do you want to copy ? ")
direction = input("Where you want to copy that ? ")

fileOpen = open(fileName, 'r')
directionOpen = open(direction, 'w')

directionOpen.write(fileOpen.read())

fileOpen.close()
directionOpen.close()

forRead = open(direction, 'r')
print(forRead.read())

forRead.close()

Очевидно вы не можете читать что-то из потока открытого на запись.
Флаг
'w' (write) не подразумевает чтение. Измените его на
'w+' (write + read).
Подробнее


TCP отправка нескольких файлов

path = os.path.join("C:\\Users", os.environ["username"],"cloud")
HOST = '127.0.0.1' # Get local machine name
PORT = 12345 # Reserve a port for your service.
ADDR = (HOST, PORT)
bufsize = 1024
tcpCliSock = socket(AF_INET, SOCK_STREAM)
tcpCliSock.connect(ADDR)
data = ''
f = open(i, 'rb')
print("start while")
while data != b'':
   print(i)
   data = f.read(bufsize)
   tcpCliSock.send(data)

Примерно так я отправляю файл на ТСП сервер

while True:
    body = tcpCliSock.recv(bufsize).decode()
    print(body)
    if not body:
        print("end")
        break
    bb = bb+body

В таком вот цикле я получаю передаваемый файл в переменную
bb.
Возник вопрос, если я хочу передать несколько файлов, например file = ['file.png', 'file.txt']
я попытался сделать цикл в котором отправлял бы файлы,
условно так

fir i in file:
  file=open(i,"")
  data = file.read()
  tcpCliSock.send(data)

Но после передачи первого файла ТСП сервер закрывает соединение
отрабатывает условие
if not body:
Что я делаю не правильно?

такая же проблема, первый файл передается а второй нет

Рабочий код, попробуйте:
client.py

import socket
from common import send_msg, recv_msg

HOST, PORT = "localhost", 9090

for file_name in ['img.png', 'img2.png']:
    with socket.socket() as sock:
        sock.connect((HOST, PORT))

        with open(file_name, 'rb') as f:
            data = f.read()

        print('Sending ({}): {}'.format(len(data), data))
        print()

        send_msg(sock, data)

        print('Receiving')

        response_data = recv_msg(sock)
        print('Response ({}): {}'.format(len(response_data), response_data))

        print('Close\n')

server.py

import socket
from common import send_msg, recv_msg

PORT = 9090

with socket.socket() as sock:
    sock.bind(('', PORT))
    sock.listen()

    print('Server: {}'.format(sock.getsockname()))

    while True:
        conn, addr = sock.accept()
        print('Connected:', addr)

        data = recv_msg(conn)
        print('Receiving ({}): {}'.format(len(data), data))

        text = 'Ok! Message size: {}'.format(len(data))
        print('Sending: {}'.format(text))

        rs = bytes(text, 'utf-8')
        send_msg(conn, rs)

        print('Close\n')

common.py:

import struct
from typing import Optional

def send_msg(sock, msg):
    # Prefix each message with a 8-byte length (network byte order)
    msg = struct.pack('>Q', len(msg)) + msg
    sock.sendall(msg)

def recv_msg(sock) -> Optional[bytes]:
    # 8-byte
    payload_size = struct.calcsize(">Q")

    # Read message length and unpack it into an integer
    raw_msg_len = recv_all(sock, payload_size)
    if not raw_msg_len:
        return None

    msg_len = struct.unpack('>Q', raw_msg_len)[0]

    # Read the message data
    return recv_all(sock, msg_len)

def recv_all(sock, n) -> Optional[bytes]:
    # Helper function to recv n bytes or return None if EOF is hit
    data = bytearray()

    while len(data) < n:
        packet = sock.recv(n - len(data))
        if not packet:
            return None

        data += packet

    return bytes(data)


WIFI BSSID/MAC Геолокация
Год назад я нашел api от yandex'а с помощью которого можно было узнать местоположение по mac адресу точки доступа WIFI,но сейчас оно не работает,существуют ли РАБОЧИЕ,ПРОВЕРЕННЫЕ аналоги?

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


Дано натуральное n, строка с n чисел. Заменить нулевые елементы на сумму двух соседниз элементов(нуль не может быть крайним элементом)
Код на котором я остановился, ничего не получается
<code>
x = input()
for i in x.split():

     s = int(i)
        if i == 0:
            y = x[i-1] + [i+1]
        x = x.replace("0", y)
        print(x)
</code>
По возможности простой код. Спасибо заранее.

скажите, а что это за код?

y = x[i-1] + [i+1]

[i+1] - это что, где название списка?

x - это строка, вы ее разбили на слова только в цикле
for, поэтому обращаясь по индексу к строке вы обращаетесь к букве строки

и складываете вы буквы (а лучшем случае, если бы не было ошибки 2)) вы бы складывали слова, а не числа, поскольку в целые числа вы не переводите

далее задание не очень чёткое, например что делать с последовательностью
1 0 0 0 2, что должно получиться
1 1 0 2 2? или надо избавиться вообще от нулей и получить
1 1 3 2 2
В остальном код правильный (правда и кода то не осталось, если убрать ошибки :))

arr = list(map(int, input().split()))

for i in range(1, len(arr) - 1):
    if arr[i] == 0:
        arr[i] = arr[i - 1] + arr[i + 1]

print(*arr)

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

arr = list(map(int, input().split()))

res = arr[:1] + [arr[i - 1] + arr[i + 1] if arr[i] == 0 else arr[i] for i in range(1, len(arr) - 1)] + arr[-1:]

print(*res)

Ну и первоначальный код можно немного поджать:

for i in range(1, len(arr) - 1):
    arr[i] = arr[i - 1] + arr[i + 1] if arr[i] == 0 else arr[i]