При создании столбца на основании других столбцов, возникает ошибка: "ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(),..."
У меня есть DataFrame
Пример:

    y   s   step_vol
0   1   10  90
1   0   20  87
2   1   15  1
3   2   80  7
4   3   90  90
5   4   1   54
6   0   10  12
7   3   90  12
8   1   65  90
9   0   12  143

Я хочу создать еще один столбец
y_f, который будет иметь значение
1, если
(data['y']>0) & (data['s']>limit) & (data['step_vol']>limit), где
limit - определенное значение
Для этого пишу функцию:

def get_y(data, limit=50):
    if (data['y']>0) & (data['s']>limit) & (data['step_vol']>limit):
        data['y_f'] = 1
    else:
        data['y_f'] = 0
    return data['y_f']

Применяю функцию:

get_y(df, limit=50)

Возникает ошибка:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Как ее исправить?

Простой и быстрый (векторизированный) вариант решения - преобразовать результат условия из булевого в целый (8-битный
int) столбец:

data['y_f'] = (  (data['y']>0)
               & (data['s']>limit)
               & (data['step_vol']>limit)).astype('int8')

или более короткий вариант:

data['y_f'] = data.eval("y > 0 and s > @limit and step_vol > @limit").astype('int8')

результат:

In [84]: data
Out[84]:
   y   s  step_vol  y_f
0  1  10        90    0
1  0  20        87    0
2  1  15         1    0
3  2  80         7    0
4  3  90        90    1
5  4   1        54    0
6  0  10        12    0
7  3  90        12    0
8  1  65        90    1
9  0  12       143    0

PS
df.apply(..., axis=1) - один из самых медленных вариантов решения - "под капотом" это завуалированный
for цикл. Его стоит использовать если других, более быстрых вариантов, нет


Загрузка изображений в БД из интернета
В ходе проекта возникла необходимость загрузки изображений, полученных из интернета, в базу данных mysql. Разобрался с тем, как загрузить его, предварительно скачав на компьютер:
<code>
def insert_photo(url):
    download_photo(url)
    con = pymysql.connect('localhost', 'root', '****', 'vk_users_photo')
    with con:
        cur = con.cursor()
        data = read_file('C:/Users/ilsha/DataSet/input.jpg')
        query = "INSERT photos(photo) VALUES (%s)"
        cur.execute(query, data)
        con.commit()
    os.remove('C:/Users/ilsha/DataSet/input.jpg')
</code>
Однако такой подход не очень удобен. Хотелось бы загружать картинки в базу на лету, не скачивая их сначала на компьютер. Не могу придумать, как реализовать подобное, не смог найти ничего похожего в сети. Буду очень благодарен, если поможете.

Попробуйте:
<code>
import requests
...

def insert_photo(url):
    con = pymysql.connect('localhost', 'root', '****', 'vk_users_photo')
    with con:
        cur = con.cursor()
        rs = request.get(url)
        query = "INSERT photos(photo) VALUES (%s)"
        cur.execute(query, rs.content)
        con.commit()
</code>


Отрисовка объекта из Класса (и его последующего движения) Python 3 модуля - Pygame
Изучаю python c недавнего времени и модуль Pygame.
  Есть объект (в данном примере Линия). Нужно создать из определенное количество, после чего двигать каждый объект по отдельности куда бы то ни было. В данном случае "от центра".
  Хочу сделать чтобы Класс создавал объект который двигался от центра, а следовательно изменял свои координаты.
  Создать некое количество объектов не проблема, но с их движением все иначе.
Как я это вижу. Идет закрашивание экрана (для обновления и удаления старых рисунков), далее отрисовка объектов с их позициями, но при следующем обновлении (кадре) идет прорисовка заново (Черный экран, и каждый объект создается заново не зная свою позицию, а беря ее из списка). Это то как, получилось пока.

import pygame
from random import*

top, side = (0, 0)
FPS = 144
run = True
clock = pygame.time.Clock()
width = 640
height = 360
amount = 100
num = []
conditions = [(-10, -10), (width + 10, height + 10),
              (width + 10, -10), (-10, height + 10)]
c = conditions
for i in range(amount):
    num.append((randint(0, width), randint(0, height)))

def check(num):
    global top, side
    x, y = num
    minus, plus = (-1, 1)
    if   x <= width / 2 and y <= height / 2:
        side, top = (minus, minus)
    elif x >= width / 2 and y <= height / 2:
        side, top = (plus, minus)
    elif x <= width / 2 and y >= height / 2:
        side, top = (minus, plus)
    elif x >= width / 2 and y >= height / 2:
        side, top = (plus, plus)
    elif x == width / 2 and y == height / 2:
        side, top = (plus, plus)

class star:
    def __init__(self, num):
        self.x, self.y = num
        self.check()
        pygame.draw.aaline(win, (255, 0, 0),
             [self.x, self.y], [self.x + self.sx, self.y + self.sy])

    def check(self):
        self.minus, self.plus = (-1, 1)
        if self.x <= width / 2:
            self.sx = -10
            self.side = self.minus
        else:
            self.sx = 10
            self.side = self.plus
        if self.y <= height / 2:
            self.sy = -10
            self.top = self.minus
        else:
            self.sy = 10
            self.top = self.plus

#pygame.draw.aaline(win, (255, 0, 0), [10, 70], [290, 55])

pygame.init()
win = pygame.display.set_mode((width, height))
while run:
    clock.tick(FPS)
    win.fill((0, 0, 0))
    for event in pygame.event.get():
        if event.type == pygame.QUIT: run = False
#------Draw----------------
    for i in range(amount):
        check(num[i])
        num[i] = (num[i][0] + (side), num[i][1] + (top))
    for i in range(amount):
        n = num[i]
        star(n)
        if n <= c[0] or n >= c[1] or n >= c[2] or n <= c[3] or n == (width / 2, height / 2):
            num[i] = (randint(0, width), randint(0, height))

#------------------------

    pygame.display.flip()
pygame.quit()

Хотелось бы чтобы объект(Класс) сам помнил свою позицию и двигался от центра.
  Есть ли возможность это написать, как то компактнее и понятнее?
Как то непонятно описал. Если добавлю несколько объектов в область --Draw--

#------Draw----------------
        for i in range(amount):
            check(num[i])
            num[i] = (num[i][0] + (side), num[i][1] + (top))
        for i in range(amount):
            n = num[i]
            star(n)
            if n <= c[0] or n >= c[1] or n >= c[2] or n <= c[3] or n == (width / 2, height / 2):
                num[i] = (randint(0, width), randint(0, height))

    #------------------------

        pygame.display.flip()
    pygame.quit()

То они нарисуются в разных местах и как надо, а если захочу до черного экрана, чтобы присвоить их к чему-то и как хранить?
@virvaldium, спасибо за помощь. На основе ваших примеров сделал такой код:

import pygame
from random import*

FPS = 60
run = True
clock = pygame.time.Clock()
width = 640
height = 360
amount = 100

class GameManager:
    def __init__(self, game_window, array):
        self.game_window = game_window
        self.array = array

    def redraw(self):
        self.game_window.fill((0, 0, 0))
        for star in self.array:
            star.set_new_position()

class Star:
    def __init__(self, game_window, start_x, start_y):
        self.x = start_x
        self.y = start_y
        self.game_window = game_window
        self.draw()

    def draw(self):
        pygame.draw.circle(self.game_window, (255, 0, 0),
                          [self.x, self.y], 3)

    def set_new_position(self):
        self.x += 1
        self.y += 1
        self.draw()

pygame.init()
win = pygame.display.set_mode((width, height))

array = [Star(win, randint(0, width),
                        randint(0, height)) for i in range(amount)]

manager = GameManager(win, array)
while run:
    clock.tick(FPS)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
    manager.redraw()
    pygame.display.flip()
pygame.quit()

Разбирался долго, зато понял). Создать количество теперь можно и задать им действия тоже не проблема, дело за малым)

Ничего не понятно, но очень интересно...
Если я правильно понял суть написанного, то необходимо сделать как-то так, что бы объекты порожденные от класса Star самостоятельно двигались от центра к краям экрана? То есть звездочки у Вас будут летать по экрану.
На мой взгляд в Вашем коде проблема в большей степени архитектурная. Я бы на вашем месте придумал бы какой-нибудь менеджер, который бы управлял перерисовкой игрового поля. Предупреждаю сразу - я с pygame работал очень давно, так что на истинность кода не претендую, тут я показываю только концепцию.
Выглядело бы это примерно так:

class GameManager:
    def __init__(self, game_window, star_array):
        self.game_window = game_window  # содержит ссылку на игровое поле
        self.star_array = star_array    # список всех звезд, которыми нужно управлять

    def redraw(self):
        self.game_window.fill((0, 0, 0))  # закрашиваем поле в черный цвет
        for star in self.star_array:
            star.set_new_position()   # перерисовываем позиции звезд

класс Star выглядел бы при этом как-то так:

class Star:
    def __init__(self, game_window, start_x, start_y):
            self.x = start_x
        self.y = start_y
        self.game_window = game_window
        self.draw()

    def draw(self):
        # тут логика отрисовки объекта на self.game_window по координатам self.x и self.y
        pass

    def set_new_position(self):
        # тут будут задаваться новые координаты и после вызываться метод self.draw()
        pass

Старт программы бы выглядел как-то так:

if __name__ == "__main__":
    pygame.init()
    win = pygame.display.set_mode((width, height))

    start_array = [star for star in Star(win, randint(0, 10), randint(0, 10))]

    manager = GameManager(win, star_array)
    while True:
        manager.redraw()

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

for i in range(amount):
        win = pygame.display.set_mode((width, height))  # <<<<< добавить какую-то такую строчку, или как там в pygame задается цвет игрового поля...
        n = num[i]
        star(n)
        if n <= c[0] or n >= c[1] or n >= c[2] or n <= c[3] or n == (width / 2, height / 2):
            num[i] = (randint(0, width), randint(0, height))

но такой подход, когда пересоздаются объекты класса Star, выглядит, на мой взгляд, несколько не оптимальным и запутанным. Инициализация объекта достаточно долгая операция, плюс каждый раз будет заниматься дополнительная область в памяти (когда там ее сборщик мусора обработает...). А если потребуется изменить механизм полета звезд? А если потребуется, что бы одни звезды летали по кругу, а не от центра к краю? А когда дело дойдет до взаимодействия с игроком? - тут перерисовку звезд придется учитывать с тем объектом, которым управляет игрок.
Повторюсь еще раз, с библиотекой pygame я работал мало и давно. В своем ответе показываю только концептуальный подход к поставленной задаче
P.S.
Ну и плюсом... Я бы настоятельно рекомендовал:

перестать использовать глобальные переменные для обмена данными -
это зло во плоти.
почитать PEP8
почитать как работает типизация в питоне и чем отличаются изменяемы
и не изменяемы типы данных друг от друга:

conditions = [(-10, -10), (width + 10, height + 10), (width + 10, -10), (-10, height + 10)]
c = conditions
Зачем Вы делаете две ссылки на один и тот же массив? с и conditions будут оперировать одним и тем же списком и изменять его мешая работе друг друга. Такие баги очень сложно отыскивать. Если хотите, скопировать один list в другой, то почитайте про функции copy и deepcopy из стандартного модуля copy


Использование str.replace (либо другого способа) для замены отдельных значений в DataFrame Pandas
Каким образом заменить в обрабатываемом массиве данных пробельный символ?
Имею большой массив данных (больше 500 тыс строк) в .txt.
Читаю массив:

df = pd.read_csv(file, encoding=ENCODING, sep='\t',decimal=',')

Ловлю предупреждение:

DtypeWarning: Columns (7,13) have mixed types. Specify dtype option on import or set low_memory=False.
  interactivity=interactivity, compiler=compiler, result=result)

Итоговый DataFrame состоит из:

calculation                 object
period              datetime64[ns]
status                      object
baket                       object
remainder                    int64
nil                        float64
pdz                        float64
ead                         object
recovery                   float64
lgd                        float64
pd_month                   float64
rezervation_rate           float64
pd_lgd_ead                 float64
reserve                     object

Нахожу вхождения в столбце
ead, в которых содержится пробельный символ:

non_numeric = df.ead.str.contains('\s', na=False)
df.loc[non_numeric].ead.size # 1

Проблема в том, чтобы заменить эти вхождения на нечто, позволяющее в итоге конвертировать в числовой тип.
Метод
df.ead.str.replace('\s', '') возвращает копию df.ead, удаляя пробельный символ, но при этом все остальные значения устанавливаются в NaN (что, в общем-то понятно).
Метод
df.loc[non_numeric].ead.str.replace('\s', '') возвращает одну строку с нужным значением. Не могу придумать как одну строку исходного массива заменить на полученный результат.
Прямой способ не срабатывает:

df.loc[non_numeric].ead = df.copy().loc[non_numeric].ead.str.replace('\s', '')
non_numeric = df.ead.str.contains('\s', na=False)
df.loc[non_numeric].ead.size # 1

В итоге вопрос: как заменить одно значение ячейки массива данных на другое?

можно попробовать так:
<code>
cols = ['ead', 'reserve']
df[cols] = df[cols].replace(r'\D', '', regex=True).apply(pd.to_numeric, errors='coerce')
</code>


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

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

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

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

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

<code>
import random

dots = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'a', 'b', 'c', 'd', 'e']

my_ticket = [2, 3, 8, 'd']

while True:
    my_ticket != random.sample(dots, 4)
    if my_ticket == random.sample(dots, 4):
        print("you win")
        break
</code>
из данного цикла надо узнать сколько комбинации понадобилось пока не вышла выбранная комбинация. спасибо большое!

import random

dots = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'a', 'b', 'c', 'd', 'e']

my_ticket = [2, 3, 8, 'd']
number_combinations = 0
while True:
    my_ticket != random.sample(dots, 4)
    number_combinations += 1
    if my_ticket == random.sample(dots, 4):
        print("you win")
        print("The winning combination was: {}".format(number_combinations))
        break


Преобразование объекта класса к list и dict
Захотелось мне поизучать графы, и вот написал я простой класс
Graph, в нём есть переменная g_map, которая хранит сам граф в виде словаря примерно так:

class Graph:
    g_map = dict()
    ...
    Не очень важно сейчас
    ...
    def __init__(self, g):
        self.g_map = g

a = Graph({'a': {'a': 1, 'b': 1, 'c':12, 'd': 31, 'e': 19},
          'b': {'a': 1, 'b': 32, 'c':2, 'd': 31, 'e': 19},
          'c': {'a': 12, 'b': 2, 'c':0, 'd': 12, 'e': 19},
          'd': {'a': 31, 'b': 31, 'c':12, 'd': 0, 'e': 31},
          'e': {'a': 19, 'b': 19, 'c':19, 'd': 31, 'e': 0}
          })

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

print(a['a']['c'])

# вернет 12

для этого в классе
Graph я реализовал методы:

def __getitem__(self, item):
    else:
        return self.g_map[item]

def __setitem__(self, key,  value):
    self.g_map[key] = value

def __len__(self):
    return len(self.g)

этот код прекрасно работает, но я хочу иметь возможность такого:
dict(a) который бы возвращал по сути
g_map
и
list(a) который бы работал так же как
list(dict(какой-то словарь)) то есть возвращал список всех ключей. то есть чтобы list(a) в данном примере возвращал
['a', 'b', 'c', 'd', 'e']
я думал для этого есть методы типа
__list__,
__dict__, но как оказалось их нет, и я прошу вашей помощи:
Как реализовать нужное мне поведение?

Для того чтобы cрабатывал метод dict и list на вашем объекте вам необходимо реализовать методы
__iter__,
__getitem__ и
keys. И в простом варианте это можно сделать так:

class A():

    def __init__(self, a):
        self.a = a

    def __iter__(self):
        return self.a.__iter__()

    def __getitem__(self, *args):
        return self.a.__getitem__(*args)

    def keys(self):
        return self.a.keys()

obj = A({"x": 1, "y": 2, "z": 3})

print(dict(obj))

print(list(obj))

Можно попробовать сделать тоже самое при помощи наследования.


Python как создать и вызвать метод который будет парсить список
<code>
    import pypyodbc

    class MagSQL ():
        mybd = 'test'
        fuckname = ''

        connection = pypyodbc.connect('Driver={SQL Server};'
                                      'Server=DESKTOP-LSIALCG\SQLEXPRESS;'
                                      'Database=' + mybd + ';')
        cursor = connection.cursor()

        mySQLQuery = ("SELECT First, Name, password FROM dbo.Test01")
        cursor.execute(mySQLQuery)
        fuckname = cursor.fetchall()
        cursor.close()

        for row in fuckname:
            first = row[0]
            name = row[1]
            passwordbd = row[2]
            print(passwordbd)

        def check_password(pask):
            for row in fuckname:
                if str(row[2]) == pask:
                    print('yes')

        print(fuckname)
        check_password('1234')
        print(fuckname)

Что я получаю --------------------------------------------

    1234
    3333
    2222
    [('алекссев', 'вова', 1234), ('Лемешкин', 'андрей', 3333), ('Вигаев', 'данил', 2222)]
        Traceback (most recent call last):
      File "C:/Users/Keeplod/PycharmProjects/testbd2/venv/connectSQL.py", line 3, in <module>
        class MagSQL ():
      File "C:/Users/Keeplod/PycharmProjects/testbd2/venv/connectSQL.py", line 30, in MagSQL
        check_password('1234')
      File "C:/Users/Keeplod/PycharmProjects/testbd2/venv/connectSQL.py", line 25, in check_password
        for row in fuckname:
    NameError: name 'fuckname' is not defined
    Process finished with exit code 1
</code>
Доброго времени суток, подскажите не опотному,
почему вызывая метод check_password('1234') выходятне не понятные ошибки за место 'yes'

выходят не понятные ошибки

Что же непонятного в сообщении:

NameError: name 'fuckname' is not defined

? А вот почему имя 'fuckname' не определено - это отдельный вопрос. Очевидно, что проблемы с областью видимости. Скажите, а зачем Вы определяет class MagSQL? И почему в Вашей программе нигде не определяется ни одного объекта этого класса?
Короче говоря: очень сложно понять, что Вы имели в виду во время написания кода. Я предлагаю Вам просто выбросить строчку заголовка класса и сдвинуть весь текст на один "таб" влево.
По поводу Вашего коммента:

стоит только сделать все так же но только в методе check_password так
  сразу появляются ошибки

Посмотрите внимательно на свой код:

def check_password(pask):
            for row in fuckname:
                if str(row[2]) == pask:
                    print('yes')

Что такое тут fuckname ? Это не параметр и не локальная переменная метода check_password... Это глобальная переменная из объемлющего метода? Но тогда она должна быть описана так:

def check_password(pask):
            global fuckname
            for row in fuckname:
                if str(row[2]) == pask:
                    print('yes')


Как перевести строку в дату и время python?
Дана строка
'25.01.2020  23:00:00', подскажите, пожалуйста, как ее можно перевести в дату и время и прибавить 2 часа? Чтобы на выходе получилась строка
'26.01.2020  01:00:00'

from datetime import datetime as DT, timedelta

dt_s = '25.01.2020  23:00:00'
dt_fmt = '%d.%m.%Y %H:%M:%S'

res = (DT.strptime(dt_s, dt_fmt) + timedelta(hours=2)).strftime(dt_fmt)
print(res)
>>> 26.01.2020 01:00:00


Программа Turtle выполняется корректно, но редактор пишет об ошибке (не понимаю их сути)
Начинаю кодить в Python'е и решил изучить Turtle:
<code>
import turtle
from turtle import *
t=Turtle()
t.reset()
t.screen.setup(1000,1000)
t.up()
t.speed(1)
t.goto(-400,0)
t.down()
def Cube():
    for i in range (3):
        t.forward(100)
        t.right(90)
        t.forward (100)
        t.right(90)
        t.forward(100)
        t.right(90)
        t.forward(100)
        t.up()
        t.right(90)
        t.forward(200)
        t.down()
Cube()
t.up()
t.goto(-300,100)
t.down()
Cube()
t.screen.exitonclick()
t.screen.mainloop()
</code>
Выполняется корректно, однако в редакторе выдается 3 ошибки, не пойму их сути, есть о чем волноваться?

Undefined variable 'Turtle' pylint(undefined-variable)[3, 3]
Function already defined line 2 pylint(function-redefined) [10, 1]
Unused variable 'i'pylint(unused-variable) [11-9]

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

import turtle
from turtle import *

Думаю, ни к чему хорошему это не приведёт. Дело в том, что если оставить только первый оператор, то надо писать так:

t=turtle.Turtle()

А если оставить только вторую строчку, то надо писать так, как Вы написали:

t=Turtle()

но тогда есть шанс конфликта имён. Рекомендую выбрать что-то одно.
Для проверки я выбрал первый вариант и Ваша программа нарисовала вполне адекватные "шашечки для такси".


Вывести элементы массива с четными индексами
Задача:
Дан массив, состоящий из целых чисел. Нумерация элементов начинается с 0. Напишите программу, которая выведет элементы массива, номера которых четны (0, 2, 4...).
Входные данные
Сначала задано число N — количество элементов в массиве. Далее через пробел записаны N чисел — элементы массива. Массив состоит из целых чисел.
Выходные данные
Необходимо вывести все элементы массива с чётными номерами.
<code>
n = int(input())
mass = list(map(int, input().split()))
for i in range(0, n-1):
    elem = mass[i]
    index = i
    if index % 2 == 0:
        print(mass[index], end = ' ')
</code>
Программа выдает не те элементы. Помогите пожалуйста найти ошибку

Для того чтобы обратиться к элементам списка через N элементов (через два в вашем случае), удобнее всего воспользоваться срезом (
slice):
Пример:

In [52]: mass = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

печатаем четные элементы:

In [53]: print(*mass[::2])
10 12 14 16 18

нечетные элементы:

In [54]: print(*mass[1::2])
11 13 15 17 19

каждый третий элемент, начиная с нулевого:

In [55]: print(*mass[::3])
10 13 16 19

каждый третий элемент, начиная с третьего:

In [56]: print(*mass[2::3])
12 15 18


pygame не устанавливается из-за того что pip 19.2.3 и проблема в том что pip никак не хочет обн
Hа macOS пытаюсь установить Pygame через
pip install pygame выдает ошибку:

WARNING: You are using pip version 19.2.3, however version 20.0.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command

Я пробую эту команду и многие другие обращаясь через python3 но pip всё равно не обновляется! Помогите пожалуйста.

Вам нужно ввести
python -m pip install --upgrade pip, я тоже устанавливал, всё работает


Почему при замене символа я получаю NaN

import pandas as pd
data = {'kol_click':[1, 8, 4, 2, 1, '', 18, '', 3, 10]}
df1 = pd.DataFrame(data)
df1['kol_click_1'] = df1['kol_click'].str.replace('', '0')
print(df1.head(10))

  kol_click kol_click_1
0         1         NaN
1         8         NaN
2         4         NaN
3         2         NaN
4         1         NaN
5                     0
6        18         NaN
7                     0
8         3         NaN
9        10         NaN

Почему числа поменялись на NaN ? Как заменить пустые строки на нулевые значения?

Проблема вызвана смешением целых чисел и строк в одном столбце. Pandas воспринимает тип такого столбеца как
object:

In [17]: df1.dtypes
Out[17]:
kol_click    object
dtype: object

Но комфортно работать c таким столбцом как с обычным строковым столбцом не получится:

In [25]: df1['kol_click'].str[:10]
Out[25]:
0    NaN
1    NaN
2    NaN
3    NaN
4    NaN
5
6    NaN
7
8    NaN
9    NaN
Name: kol_click, dtype: object

In [26]: df1['kol_click'].astype(str).str[:10]
Out[26]:
0     1
1     8
2     4
3     2
4     1
5
6    18
7
8     3
9    10
Name: kol_click, dtype: object

Решение - попробуйте так:

In [22]: df1['kol_click_1'] = pd.to_numeric(df1['kol_click'], errors='coerce').fillna(0)

In [23]: df1
Out[23]:
  kol_click  kol_click_1
0         1          1.0
1         8          8.0
2         4          4.0
3         2          2.0
4         1          1.0
5                    0.0
6        18         18.0
7                    0.0
8         3          3.0
9        10         10.0

In [24]: df1.dtypes
Out[24]:
kol_click       object
kol_click_1    float64
dtype: object


Mbus protocol date format type G
Обращаюсь к  датчику  по технологии LoraWan, высылаю набор байтов(M-bus протокол) для запроса показаний. И необходимо передать два байта, содержащие информацию о сегодняшней дате, например hex 8323 соответствует 03.03.2020. В документации написано, что это формат Type G:Compound CP16:Date. Подскажите, кто-нибудь работал с указанным протоколом. Как преобразовать текущую дату  03.03.2020 в требуемый формат hex 8323?

<code>
void make_date(
    int year,     // years from 1900
    int month,    // 1-12
    int day,      // 1-31
    unsigned char* packet)   // [out], contains 2 bytes
{
    packet[0] = (unsigned char)( (day & 0x1F) | (((year - 100) & 7) << 5) );
    packet[1] = (unsigned char)( (month & 0xF) | ((((year - 100) & 0xF0) >> 3) << 4) );

    //packet[0] = (unsigned char)(day & 0x1F);
    //unsigned char tmp = (((year - 100) & 7) << 5);
    //packet[0] |= tmp;

    //packet[1] = (unsigned char)(month & 0xF);
    //unsigned char tmp1 = (unsigned char)((((year - 100) & 0xF0) >> 3) << 4);
    //packet[1] |= tmp1;
}

int main()
{
    unsigned char packet[2];

    make_date(2020 - 1900, 3, 3, packet);

    printf("%x %x\n", (int)packet[0], (int)packet[1]);   // 83, 23

    return 0;
}
</code>
Закомментированный код делает то же самое по этапам, чтобы было понятно.


Передача аргументов в subprocess
Как передать команду с |
<code>
import subprocess

command_listen = ('ps','-A','|','grep','message')
print (command_listen)
process = subprocess.Popen(command_listen, stdout=subprocess.PIPE)
data = process.communicate(timeout=10)
print(data[0].decode('utf-8'))
</code>
таким образом пишет error: garbage option
если выполнять ps -A то все впорядке но вот передать | никак не могу

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

command_listen = '''ps -A | grep message'''
print(command_listen)
process = subprocess.Popen(command_listen, stdout=subprocess.PIPE, shell=True)
print(process.communicate())

или так:

sub_process = subprocess.Popen(['ps','-A'], stdout=subprocess.PIPE)
process = subprocess.Popen(['grep','message'], stdin=sub_process.stdout, stdout=subprocess.PIPE)
print(process.communicate())


Оптимизация кода map, reduce, pandas
Ниже приведен рабочий код, который требуется оптимизировать с точки зрения производительности.
Описание задачи:
В списке сгенерированных сочетаний (df), требуется найти такие комбинации для которых выполянется условия:
1) Для каждой комбинация из listNumbers - должно совпадать от 2 до 3 элементов в строке в df.
2) Для каждой строки из df должно выполниться условие 1) хотя бы для одной комбинации из listNumbers

import pandas as pd
import numpy as np
import itertools as iter
import math as mt
import timeit
from functools import reduce

listNumbers = [[1,2,3,4,5], [2,3,5,6,7]]

df = pd.DataFrame(iter.combinations(range(1, 8), 5))
print(df)

containsMap = list(map(lambda x: df.isin(x).sum(1).between(2,3), listNumbers))

containsReduce = reduce(lambda f, x: f | x, containsMap)

print(df[containsReduce])

Исходный сгенерированный список

    0  1  2  3  4
0   1  2  3  4  5
1   1  2  3  4  6
2   1  2  3  4  7
3   1  2  3  5  6
4   1  2  3  5  7
5   1  2  3  6  7
6   1  2  4  5  6
7   1  2  4  5  7
8   1  2  4  6  7
9   1  2  5  6  7
10  1  3  4  5  6
11  1  3  4  5  7
12  1  3  4  6  7
13  1  3  5  6  7
14  1  4  5  6  7
15  2  3  4  5  6
16  2  3  4  5  7
17  2  3  4  6  7
18  2  3  5  6  7
19  2  4  5  6  7
20  3  4  5  6  7

Конечный отфильтрованный список

    0  1  2  3  4
0   1  2  3  4  5
1   1  2  3  4  6
2   1  2  3  4  7
5   1  2  3  6  7
6   1  2  4  5  6
7   1  2  4  5  7
8   1  2  4  6  7
9   1  2  5  6  7
10  1  3  4  5  6
11  1  3  4  5  7
12  1  3  4  6  7
13  1  3  5  6  7
14  1  4  5  6  7
17  2  3  4  6  7
18  2  3  5  6  7
19  2  4  5  6  7
20  3  4  5  6  7

В реальной задаче кол-во комбинаций в df - range (1, 101), а кол-во записей в listNumbers порядка 20.

Pandas вообще очень тормозит по жизни. И, учитывая, что у вас числа не повторяются в комбинациях, оптимально будет использовать set-ы для хранения и сравнения наборов чисел. С ними скорость на несколько порядков больше стала, по моим подсчётам.
<code>
import pandas as pd
import numpy as np
import itertools as iter
import math as mt
import timeit
from functools import reduce

listNumbers = list(map(set,[[1,2,3,4,5], [2,3,5,6,7]]))

df = list(map(set, iter.combinations(range(1, 8), 5)))
print(df)

containsMap = (any((2 <= len(x & y) <= 3 for x in listNumbers)) for y in df)
print(list(iter.compress(df, containsMap)))
</code>
Для range(1,8) timeit показало уменьшение с 5.14 ms до 30.3 µs, т.е. более чем в 100 раз.
P.S. Попробовал для больших range - что-то там улучшения вообще нет, там уже сам combination начинает времени есть гораздо больше, чем остальные части кода. Возможно, где-то у меня тут ещё перевод в list лишний, но, похоже, тут особо ничего не исправить уже. Разве что многопоточность сделать.


Две одинаковые цифры [закрыт]

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

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

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

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

Определите, верно ли, что в заданном четырехзначном числе ровно две одинаковые цифры.
Входные данные:
На вход подается целое число k (1000≤k≤9999).
Выходные данные:
Выведите 1 при положительном ответе на вопрос задачи и любое другое целое число в противном случае.
Примечание:
Запрещается использовать if, for, while, abs, round.
Можно использовать массивы и функции.

Учись строить алгоритмы!
<code>
number = list(input())
print(int((len(set(number)) == 3)))
</code>


Вывод определённого количества статей на страницу
Уже обращался по поводу этой темы, вопрос решили, (Вывод нескольких классов на 1 url адрес). Но для меня осталось непонятным как вывести только определённое количество статей.
Мне нужно сделать так, что бы выводилось только 3 самых новых модели первого типа (rig) и 1 самая новая модель другого типа (article). Знаю, что нужно делать через paginator, но ума не приложу как. Надеюсь на вашу помощь)
Вот views.py файл:

from django.shortcuts import render
from rigs.models import Rig
from news.models import Article
from django.core.paginator import Paginator

def main_page(request):
    articles = Article.objects.all().order_by('-date')
    article = Paginator(articles, 1)
    rigs = Rig.objects.all().order_by('-date')
    rig = Paginator(articles, 3)

    response_data = {
        'articles': articles,
        'rigs': rigs,
    }

    return render(request, 'main_page/main_page.html', response_data)

Вот html файл с шаблоном:

<div class="container">
  <div class="row">
    {% for post in rigs %}
          <div class="col-xs-1 col-md-6 col-lg-4">
              <div class="card">
                <div class="card-img-top"><a href="{% url 'rig_detail' post.id %}"><img src="{{ post.image.url }}"></a></div>
                <div class="card-body">{{ post.title }}</div>
                <div class="card-footer">
                  <div class="card-footer-1 float-left">
                    <div class="layer-1"></div>
                    {% if post.price > 0 %}
                      <p class="mx-auto font-weight-bold font-italic">${{ post.price }}</p>
                    {% else %}
                      <p class="mx-auto font-weight-bold font-italic">Бесплатно</p>
                    {% endif %}
                  </div>
                  <div class="float-right">
                    {% if post.price > 0 %}
                      <a href="#" class="btn btn-success float-right align-middle ml-2 shadow-sm"><img src="media\rigs\shopping-cart.png" width="20px" height="20px"></a>
                      <a href="#" class="btn btn-warning float-left align-middle shadow-sm">Купить</a>
                    {% else %}
                      <a href="#" class="btn btn-info float-right align-middle shadow-sm">Скачать</a>
                    {% endif %}
                  </div>
                </div>
              </div>
          </div>
    {% endfor %}
  </div>

  <div class="container">
      {% for post in articles %}
        <div class="alert mx-auto article">
          <a href="{% url 'news_detail' post.id %}"><img src="{{ post.image.url }}"></a>
          <h4 class="display-4">{{ post.title }}</h4>
          <h4>{{ post.text }}</h4>
          <span>{{ post.date|date:"d E Y в H:i" }}</span>
        </div>
      {% endfor %}
  </div>

Так же, кто может, порекомендуйте книги или видеокурсы, которые стоит изучить для понимания и использования Django. Буду благодарен!

rigs = Rig.objects.all().order_by('-date')[:3]
Со вторым думаю разберётесь


Помогите, не могу разобраться. Начинающий)
Не знаю как правильно написать код, чтобы допустим выводились книги, для одной это нормально, а если 100(книг) то как?
<code>
class Book:
    def __init__(self, name, author):
        self.name = name
        self.author = author

    def prnt(self):
        return '%s %s' % (self.name, self.author)

if __name__ == "__main__":
    book = Book('Золотая рыбка', 'А.С.Пушкин')
    print(book.prnt())

    book1 = Book('Кавкзаский пленник', 'А.С.Пушкин')
    print(book1.prnt())
</code>

class Book:
    def __init__(self, name, author):
        self.name = name
        self.author = author

        self.info = '%s %s' % (self.name, self.author)

if __name__ == "__main__":

    library = [('Золотая рыбка', 'А.С.Пушкин',), ('Кавкзаский пленник', 'А.С.Пушкин',)]

    for book in library:
        item = Book(*book)
        print(item.info)


Чат-бот ВК отвечает только один раз
<code>
r_id = datetime.timestamp(datetime.now())
    def write_msg(user_id, message):
        vk_session.method('messages.send', {'user_id': user_id, 'message': message, 'random_id': r_id}) # r_id - всегда разный
    def get_msg(user_id):
        msg = vk_session.method('messages.getHistory', {'out': 0, 'count': 1, 'time_offset': 0, 'user_id': user_id})
        return msg

vk_session = vk_api.VkApi(token=api_key)
vk = vk_session.get_api()
lp = VkLongPoll(vk_session)

for event in lp.listen():
    if event.to_me:
        msg_values = get_msg(event.user_id)
        print(msg_values)
        msg_user = msg_values['items'][0]['text']
        print(msg_user)
        if msg_user == '1':
            write_msg(event.user_id, 'hello')
        elif msg_user == '2':
            write_msg(event.user_id, 'bye')
</code>
Бот отвечает на сообщение только 1 раз, то есть если я напишу в диалог "1", он ответит, после этого я пишу "2" и он не отвечает, хотя в дебаге отображается что сообщение пришло.
UPD: изобрел велосипед напрямую с апи вконтакте, проблема в методе messages.send, почему то он срабатывает только 1 раз. Может что-то нужно передать ему еще, подскажите пожалуйста.

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

from vk_api.utils import get_random_id

def write_msg(user_id, message):
    vk_session.method('messages.send', {'user_id': user_id, 'message': message, 'random_id': get_random_id()})


Правила хорошего тона в Python
В один момент написания кода, на 400-ой строке, я понял, что держать все классы и функции в одном файле, возможно, является плохим тоном, и нужно делить это всё на другие файлы, импортируя друг в друга. Ближе к вопросу: где можно почитать про "хороший тон" в Python, и оформления кода в нескольких файлах (если требуется)? Буду благодарен за ссылки!

Из-за вопросов лаконичности и качества кода был составлен специальный свод правил PEP8. Прочитать его можно здесь здесь.


numpy. Питон не изменяет элемент списка. (не модифицирует) Алгоритм Гаусса для СЛАУ
Моя программа должна решать СЛАУ c квадратными матрицами без ФСР алгоритмом Гаусса. СЛАУ представлено в виде Ax = f.

import numpy as np

n = 5
A = np.random.rand(n, n)
f = np.random.rand(n)

В программе я написал алгоритм Гаусса (без выбора главного элемента) для приведения к верхнему треугольному виду.

for k in range(n):
    A[k] = A[k] / A[k][k]
    f[k] = f[k] / A[k][k]#Элемент f[k] не меняется!
    for i in range(k + 1, n):
        A[i] = A[i] - A[k] * A[i][k]
        f[i] = f[i] - f[k] * A[i][k]#Аналогично! Тоже не меняется
        A[i][k] = 0

Так же присутствует код обратного хода для нахождения решения СЛАУ

for i in range(n - 1, -1, -1):
    x[i] = f[i]
    for j in range(i + 1, n):
        x[i] = x[i] - A[i][j] * x[j]

Самое интересно, что алгоритм прямого и обратного хода (кроме изменения вектора f, разумеется) выполнено правильно, так как выполнение обратного хода дает точно такое же решение что и решение с помощью метода
numpy.linalg.solve(A,f)
Основная проблема в том что когда я выполняю алгоритм Гаусса элементы вектора f не меняются, и не могу понять почему. Из-за этого я получаю совершенно другое решение СЛАУ. У меня даже нет предположений почему питон не хочет работать с элементами вектора f.
Для удобства ниже я приведу полный код своей программы:

import numpy as np

n = 5
A = np.random.rand(n, n)
f = np.random.rand(n)
x = [0] * n

print('MATRIX A:\n',A)
print('VECTOR f:\n',f,'\n\n')

#ПРИВЕДЕНИЕ К ВЕРХНЕЙ ТРЕУГОЛЬНОЙ МАТРИЦЕ
for k in range(n):
    A[k] = A[k] / A[k][k]
    f[k] = f[k] / A[k][k]#Элемент f[k] не меняется!
    for i in range(k + 1, n):
        A[i] = A[i] - A[k] * A[i][k]
        f[i] = f[i] - f[k] * A[i][k]#Аналогично! Тоже не меняется
        A[i][k] = 0
#////////////////////////////////////////////////////////////////////////#

#РЕШЕНИЕ СЛАУ
for i in range(n - 1, -1, -1):
    x[i] = f[i]
    for j in range(i + 1, n):
        x[i] = x[i] - A[i][j] * x[j]

#///////////////////////////////////////////#

print('MATRIX A:\n',A)
print('VECTOR f:\n',f,'\n\n')

AA = A
ff = f
xx = np.linalg.solve(AA, ff)

print('My solution:\n',x)
print('Numpy solution\n',xx)

При выполнении деления A[k] на A[k][k], в блоке приведения к верхней треугольной матрице, вы получаете по диагонале 1, т.е. A[k][k] == 1, потом вы делите на 1, что и приводит к тому, что матрица f не меняется при выполнении действия.
Просто добавьте print в функцию и вы сами увидите:

#ПРИВЕДЕНИЕ К ВЕРХНЕЙ ТРЕУГОЛЬНОЙ МАТРИЦЕ
for k in range(n):
    print("A[k] = ", A[k], "A[k][k] = ", A[k][k])
    A[k] = A[k] / A[k][k]
    print("A[k] = ", A[k], "A[k][k] = ", A[k][k])
    print("f = ", f[k], "A[k][k] = ", A[k][k])
    f[k] = f[k] / A[k][k]#Элемент f[k] не меняется!
    print("f = ", f[k], "A[k][k] = ", A[k][k])
    for i in range(k + 1, n):
        A[i] = A[i] - A[k] * A[i][k]
        f[i] = f[i] - f[k] * A[i][k]#Аналогично! Тоже не меняется
        A[i][k] = 0
#////////////////////////////////////////////////////////////////////////#

Как вариант решения, можете сделать так (выдает ответ как у numpy):

#ПРИВЕДЕНИЕ К ВЕРХНЕЙ ТРЕУГОЛЬНОЙ МАТРИЦЕ
for k in range(n):
    f[k] = f[k] / A[k][k]  # Элемент f[k] не меняется!
    A[k] = A[k] / A[k][k]
    for i in range(k + 1, n):
        f[i] = f[i] - f[k] * A[i][k]  # Аналогично! Тоже не меняется
        A[i] = A[i] - A[k] * A[i][k]
        A[i][k] = 0
#////////////////////////////////////////////////////////////////////////#


Как обработать все файлы определенного расширения в директории? Python
В задании требуется считать содержимое всех файлов расширения
.csv в директории которая задается пользователем.
Как это реализовать?

Для получения путей к файлам существуют 2 самых распространенных варианта:

С использованием функции walk модуля
os. В данном случае происходит опрос и вложенных директорий. Вариант использования:

files_list = [os.path.join(root, fname) for root, sub, files in os.walk(r"c:\in") for fname in files]

Использование функции
glob модуля
glob Данная функция часто используется в задач анализа данных и ML.

from glob import glob files_lst = glob(fr"c:\*.csv")
p.s Что то мне подсказывает, что Вам надо считать несколько csv и объединить их в один df - если это так, тогда вам сюда


Как изменить и сохранить переменную при запуске
Как изменить переменную а объявленную вначале, закрыть идл и если запустить чтоб в а сохранилось переданное значение, такое возможно?
<code>
a = ()
def start():
    b = 1 + 2
    a = b
</code>

Сохранение/восстановление данных в разных сеансах работы
Для этого существует специальный пакет pickle у которого два метода:

dump()
load()

Пример использования:

import pickle

data = {
    'a': [1, 2.0, 3, 4+6j],
    'b': ("character string", b"byte string"),
    'c': {None, True, False}
}

with open('data.pickle', 'wb') as f:
    pickle.dump(data, f)

with open('data.pickle', 'rb') as f:
    data_new = pickle.load(f)
    print(data_new)

Для Вашего случая это может выглядеть так:

import pickle

a = ()

def start():
    global a

    b = 1 + 2
    a = b

start()

print("До", a)
with open('data.pickle', 'wb') as f:
    pickle.dump(a, f)

a = ()

with open('data.pickle', 'rb') as f:
    a = pickle.load(f)
    print("После", a)


Как удалить второй переход на новую строку?
Как можно удалить
\n из строки символов на определённой позиции, то-есть так чтобы не исчезли остальные
\n?

mystr = 'Привет \nмир\n!'

Использовал метод
re.sub(r'\n','',mystr) , но он не подходит т.к. удаляет все
\n  из строки
Как добиться вывода

Привет
мир!

наиболее простым способом?

Help on built-in function rpartition:

rpartition(sep, /) method of builtins.str instance
    Partition the string into three parts using the given separator.

    This will search for the separator in the string, starting at the end. If
    the separator is found, returns a 3-tuple containing the part before the
    separator, the separator itself, and the part after it.

    If the separator is not found, returns a 3-tuple containing two empty strings
    and the original string.

mystr = 'Привет \nмир\n!'
partition = mystr.rpartition("\n")
new_mystr = partition[0] + partition[2]
print(repr(new_mystr))

Или короче:

mystr = 'Привет \nмир\n!'
new_mystr = "".join(mystr.rpartition("\n")[::2])
print(repr(new_mystr))

Вывод:

'Привет \nмир!'

На основе ответа на en SO.


Запуск функции и класса одновременно python
Подскажите пожалуйста как запустить функцию и класс одновременно, пробовал вот так:
<code>
from kivy.app import App
from kivy.uix.button import Button
from multiprocessing import Process

def test2():
    while 1:
        print('Hello world')

class Test1(App):
    def click(self, args):
        if self.button.text == "Вкл":
            self.button.background_color = [1,0,0,1]
            self.button.text = "Выкл"
        elif self.button.text == "Выкл":
            self.button.text = "Вкл"
            self.button.background_color = [.15, .70, .24, 1]

    def build(self):
        self.button = Button (
            text = "Вкл",
            font_size = 20,
            background_color = [.15, .70, .24, 1],
            pos_hint= {'x': .65,'top': .15},
            size_hint = (.21,.11),
            background_normal = '',
            on_press = self.click
        )
        return self.button

if __name__ == "__main__":
    p1 = Process(target=Test1)
    p1.start()
    p2 = Process(target=Test2())
    p2.start()
</code>

Что в Вашем варианте неправильно:

p1 = Process(target=Test1) - тут Вы в качестве
target передаёте класс (даже не экземпляр!!). Т.е. предполагается, что в процессе будет запущено
Test1() (или, то же самое,
Test1.__call__()) - звучит странно, согласитесь.

p2 = Process(target=Test2()) - тут Вы в качестве
target передаёте результат выполнения функции
Test2. Но в функции
Test2 бесконечный цикл, так что результат оттуда не вернётся. Но если даже функция что-то вернёт, это значение должно быть вызываемым (например, другая функция).

Как правильно:

p1 = Process(target=Test1().run) - создаётся экземпляр (
()) класса
Test1, затем в процессе будет вызван метод
run экземпляра (ошибка
self из Вашего комментария).

p2 = Process(target=Test2) - в отдельном процессе будет "крутиться" функция
Test2 (а не результат из неё, как в Вашем варианте).


Python взаимодействие двух процессов в фоновом режиме
<code>
#!/usr/bin/python3
# -*- coding: utf-8 -*-

import subprocess
cmd = ["python3", "/home/user/python/python0.py"]
cmd1 = ["python3", "/home/user/python/pytho2.py"]

p1 = subprocess.Popen(cmd, stdout=subprocess.PIPE)
p2 = subprocess.Popen(cmd1, stdout=p1.stdin, stdin=subprocess.PIPE)

data = p1.communicate()
</code>
В данном примере я передаю поток вывода одной программы другой но взаимодействие не происходит

Не совсем понятно, что Вы хотите сделать. Я так понял, Вы хотите
stdout от одной команды перенаправить в
stdin другой команды.
stdout.py

print(f"ohayo, ya {__file__}")

stdin.py

a = input()
print(f"Hello, im {__file__} and i got")
print(a)
print("from my stdin")

from subprocess import Popen, PIPE
a = Popen(["python", "stdout.py"], stdout=PIPE)
b = Popen(["python", "stdin.py"], stdin=a.stdout, stdout=PIPE)
print(b.stdout.read().decode().strip())

Вывод

Hello, im stdin.py and i got
ohayo, ya stdout.py
from my stdin


Перевод кода из pascal в python
Есть код на паскале и необходимо написать код, работающий также на python:

var
  a: array[1..10000] of integer; {исходные данные}
  N: integer; {количество элементов последовательности}
  max: integer; {вычисляемое контрольное значение}
  i, j: integer;
begin
  readln(N);
  max := 0;
  for i := 1 to N do read(a[i]);
  for i := 1 to N-1 do
    for j := i+1 to N do
      if (a[i]*a[j] > max) and (a[i]*a[j] mod 14 = 0) then max := a[i] * a[j];
  writeln(max);
end.

Попытка сделать такое на питоне не обвенчалась успехом:

a = [] # Исходные данные

N = int(input())
maxvalue = 0
for i in range(1, N = N - 1):
    for j in range(i = i + 1, N):
        if (a[i] * a[j] > maxvalue) and (a[i] * a[j] %14 == 0):
            maxvalue = a[i] * a[j]
print(maxvalue)

a = [4,7,3,14,6,3] # Исходные данные

N = len(a)
maxvalue = 0
for i in range(N - 1):
    for j in range(i + 1, N):
        if (a[i] * a[j] > maxvalue) and (a[i] * a[j] %14 == 0):
            maxvalue = a[i] * a[j]
print(maxvalue)

Почти прямой аналог ввода программы  на Паскале:

N = int(input())
a = []
for _ in range(N):
   a.append(int(input()))

Как чаще делают в Python: (N я не стал убирать)

a = [int(s) for s in input().split()]
N = len(a)


Как создать список с огромным количеством чисел
Существует необходимость в создании спискa, где будет хранится числа от 1 до, скажем, 10000
Также не хочется использовать цикл
Идея в том, чтобы развернуть [1, 2, 3, 4, ... 10000] в нечто типо [1-10000]
Существует ли такое в python?
Написав
<code>
a = [1:10000]
</code>
Ничего не получилось

your_list = list(range(1, 10001))

your_list = [i for i in range(1, 10001))]

your_list = [*range(1, 10001)]


Как циклом перебрать промежуток времени в днях и узнать дни недели?

import datetime
d1 = datetime.date(2020, 3, 1)
d2 = datetime.date(2020, 3, 30)
d3 = d2 - d1 # 29 days

Как проитерироваться по
d3, например, чтобы можно было узнать какой это день недели?
Чтобы получилось что-то типо такого, но работающего:

for i in d3:
    if d3[i] == d3[i].weekday:
        print(+)


только начала программировать на питоне помогите бедной девочке плиз [закрыт]

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

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

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

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

Делёж яблок — 2
n школьников делят k яблок “почти поровну”, то есть так, чтобы количество яблок, доставшихся любым двум школьникам, отличалось бы не более, чем на 1.
Программа получает на вход натуральное число n и целое неотрицательное число k, каждое в отдельной строке, и должна вывести количество школьников, которым достанется яблок меньше, чем некоторым из их товарищей.
Ввод         вывод
7              5
30
7
28             0

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

n, k = map(int, input().split())

if k % n:
    print(n - k % n)
else:
    print(0)


В списке неправильно определяется большее число
Непонятно, почему максимум неправильно определяется.
К пустому списку добавляем числа 3 раза:

1 2 3 4 5

6 7 8 9 10

11 12 13 14 15

Сам код:

sp = []  # пустой список
sp.append([i for i in input().split()]) # к нему добавляем 3 раза по 5 чисел
sp.append([i for i in input().split()])
sp.append([i for i in input().split()])

curr_max = sp[0][0] # максимальным числом вначале является первый элемент

for i in range(len(sp)):  # тут 3 (0,1,2)
    for j in range(len(sp[i])):  # тут 5 (0,1,2,3,4)
        if sp[i][j] > curr_max:
            curr_max = sp[i][j]

print(curr_max)

И ответ получится 9 а не 15. Почему?
Дебагер в Pycharm не помог, просто стоит 9 и все.
ссылка на repl.it, чтобы удобнее смотреть.

Вы сравниваете строки, а не числа. Строки сравниваются в лексикографическом порядке - т.е.
'9' > '100', т.к. сравнивается
'9' и
'1'.
Попробуйте так:

sp = []
n = 3
for _ in range(n):
    sp.extend(map(int, input().split()))
curr_max = max(sp)
print(curr_max)


Отключить логирование сторонних библиотек в мой файл лога
Использую в программе Logger и ещё одну библиотеку, которая внутри себя тоже использует логирование.
Итогом в мои файлы логирования выводит информацию и о моей программе и информацию, которую логирует библиотека. Последняя мне в файле не нужна.
Мой код (в упрощенном виде):
<code>
from mover import Mover
import logging
import vk_api

logging.basicConfig(
    filename='photo transfer.log',
    filemode='w',
    format='%(asctime)s - %(filename)s - %(levelname)s - %(message)s',
    level=logging.DEBUG
)

def main():
    """Основная логика работы скрипта"""

    vk_session = vk_auth(login, password, token)
    Mover(vk_session, group_id)  # внутри класса определен ещё один logger
    logging.debug('Перенос завершен')
</code>
Сторонняя библиотека которая используется - vk_api, но это не принципиально. Хотелось бы отключить логи от всех файлов, кроме тех, что находятся в моем проекте. Не понимаю, как это можно сделать.

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

Из основного файла (где вызываю необходимый класс) убрал
.basicConfig
Внутри класса ввел дополнительную функцию, которая настраивает
logger:

def config_logger(logger):
    logger.setLevel(logging.DEBUG)
    f_handler = logging.FileHandler(filename="photo transfer.log",
                                    mode='w')

    formatter = logging.Formatter('%(asctime)s - %(filename)s - %(levelname)s - %(message)s')
    f_handler.setFormatter(formatter)

    logger.addHandler(f_handler)

Сам
logger ввел отдельным полем внутри класса при инициализации:

class MyClass:
    def __init__(self):
        self.logger = logging.getLogger('__name__')
        config_logger(self.logger)

Итогов в файл пишется только логи с моего.
Частично помог ответ отсюда.


Цикл while. Помощь
Как сделать так что бы цикл while не выходил из цикла пока не выполнится действие. К примерy есть простая регистрация, и пока пользователь не введет почтy в виде [email protected], то программа не пycтит его на следyющий шаг.
Возможно пригодится вот мой код:
<code>
import random

random_number_id = random.uniform(1, 100)

nole = 0
running = True

b = input("Введите имя: ")
a = input("Введите фамилию: ")
mail_login = input("Введите почтy: ")

while "\u0040" is not mail_login:   #if "\u0040" is not mail_login:

        print("Ошибка, введите почтy в формате examp[email protected]")

print("Ваш yникальный ID : ", random_number_id)
</code>
Бyдy благодарен за помощь.

Вместо

mail_login = input("Введите почтy: ")

while "\u0040" is not mail_login:   #if "\u0040" is not mail_login:

        print("Ошибка, введите почтy в формате [email protected]")

используйте

while True:
    mail_login = input("Введите почтy: ")
    if  "@" not in mail_login:
        print("Ошибка, введите почтy в формате [email protected]")
    else:
        break

Объяснение:

while True: бесконечный цикл, из которого мы выйдем командой
break только тогда, когда будет выпольнено условие, что символ
@ находится в строке
mail_login.


Перебор через for in не выводит правильно значение в словаре
Я хотела создать программу "контакты" где можно будет посмотреть список контактов и добавить, также я добавила словарь в список для сортировки от А до Я, но в итоге при переборе новый контакт не отображает ключ. Прошу укажите мне на мою ошибку и что именно я сделала не так
<code>
PhoneBook = { 'Алина' : +72766137482, 'Максим' : +79926336090, 'Валерий' : +70526331234, 'Ксения' :
+79679651228, }

#Сортировка словаря
list_keys = list(PhoneBook.keys())
list_keys.sort()

#Выбор действий
print('Доступные команды:\nПосмотреть, добавить, изменить, удалить, выход\n')
Inp = input()

if Inp.lower() == 'посмотреть':
    for i in list_keys:
        print(i, ':', PhoneBook[i])

elif Inp.lower() == 'добавить':
    print('\nВведите имя контакта\n')
    InpContact = input()
    print('\nВведите номер контакта\n')
    InpPhone = input()
    PhoneBook[InpContact] = InpPhone
    #Проблема вот в этом переборе:
    for i in list_keys:
        print(i, ':', PhoneBook[i])
</code>

Вы создаёте список
list_keys в начале программы и больше нигде его не меняете. Варианта два:

Менять
list_keys после ввода пользователя.
Использовать такой цикл для вывода книги:

(Этот способ лучше тем, что экономит память.)

for key in PhoneBook:
    print(key, ':', PhoneBook [key])


Как сделать анимацию pygame
<code>
import pygame

pygame.init()

win = pygame.display.set_mode((800, 450))

pygame.display.set_caption("GAMER")

bg = pygame.image.load('bg.jpg')
playerStand = [pygame.image.load('playerStand_1.png'), pygame.image.load('playerStand_2.png'),
               pygame.image.load('playerStand_3.png')]

clock = pygame.time.Clock()

walkLeft = [pygame.image.load('playerStand_1.png')]
walkRight = [pygame.image.load('playerStand_1.png')]

x = 50
y = 305.5
weight = 64
height = 110
speed = 20
isJump = False
jumpCount = 10

left = False
right = False
animCount = 0

def drawWindow():
    global animCount

    win.blit(bg, (0, 0))
    if animCount + 1 >= 30:
        animCount = 0
    a = 30
    if left:
        win.blit(walkLeft[animCount // a], (x, y))
        animCount += 1
    elif right:
        win.blit(walkRight[animCount // a], (x, y))
        animCount += 1
    else:
        win.blit(playerStand[animCount // a], (x, y))
        animCount += 1

    pygame.display.update()

run = True
while run:

    clock.tick(60)

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

    keys = pygame.key.get_pressed()

    if keys[pygame.K_LEFT] and x > 20:
        x -= speed
        left = True
        right = False
    elif keys[pygame.K_RIGHT] and x < 800 - weight - 20:
        x += speed
    else:
        left = False
        right = False
        animCount = 0

    if not (isJump):
        if keys[pygame.K_SPACE]:
            isJump = True
    else:
        if jumpCount >= -10:
            if jumpCount < 0:
                y += (jumpCount ** 2) / 2
                jumpCount -= 1
            else:
                y -= (jumpCount ** 2) / 2
                jumpCount -= 1
        else:
            isJump = False
            jumpCount = 10
    drawWindow()

pygame.quit()
</code>
playerStand там я хотела сделать анимацию того как стоит перс, но включается только первая картинка.
Если можно то объясните, позязя (シ_ _)シ

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


Вылезает ошибка _tkinter.TclError: bad screen distance ""
Программа должна принимать 4 координаты и рисовать по ним фигуру, которую выбрал пользователь. Но при запуске вылезает ошибка
"_tkinter.TclError: bad screen distance "
<code>
from tkinter import *

root = Tk()
c = Canvas(root)

def new_window():   # создает окно со всеми нужными кнопка и полями для ввода
    win = Toplevel()

    e1x = Entry(win)
    e1x.pack()
    e1x = e1x.get() # для ввода координат начала отрезка
    e1y = Entry(win)
    e1y.pack()
    e1y = e1y.get()

    e2x = Entry(win)      # для ввода координат конца отрезка
    e2x.pack()
    e2x = e2x.get()
    e2y = Entry(win)
    e2y.pack()
    e2y = e2y.get()

    def draw():
        c.create_line(e1x, e1y, e2x, e2y)

    draw()

b = Button(text='Нарисовать', command=new_window())
root.mainloop()

</code>

Ошибки в коде:

Скобки при передаче обработчика в объект кнопки
command=new_window() - из-за этого обработчик вызывается сразу, до нажатия на кнопку. Правильная привязка функции-обработчика нажатия:

b = Button(text='Нарисовать', command=new_window)

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

Исправленный код:

from tkinter import *

root = Tk()
c = Canvas(root)
c.pack()

def new_window():   # создает окно со всеми нужными кнопка и полями для ввода
    win = Toplevel()

    # для ввода координат конца отрезка
    e1x = Entry(win)
    e1x.pack()

    e1y = Entry(win)
    e1y.pack()

    # для ввода координат начала отрезка
    e2x = Entry(win)
    e2x.pack()

    e2y = Entry(win)
    e2y.pack()

    def draw():
        x1 = int(e1x.get())
        y1 = int(e1y.get())
        x2 = int(e2x.get())
        y2 = int(e2y.get())
        c.create_line(x1, y1, x2, y2)

    Button(win, text='Нарисовать', command=draw).pack()

Button(text='Получить координаты', command=new_window).pack()
root.mainloop()


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

[INFO   ] [Logger      ] Record log in C:\Users\verto\.kivy\logs\kivy_20-02-29_4.txt
[INFO   ] [deps        ] Successfully imported "kivy_deps.gstreamer" 0.1.18
[INFO   ] [deps        ] Successfully imported "kivy_deps.angle" 0.1.10
[INFO   ] [deps        ] Successfully imported "kivy_deps.glew" 0.1.12
[INFO   ] [deps        ] Successfully imported "kivy_deps.sdl2" 0.1.23
[INFO   ] [Kivy        ] v1.11.1
[INFO   ] [Kivy        ] Installed at "C:\Users\verto\AppData\Local\Programs\Python\Python37\lib\site-packages\kivy\__init__.py"
[INFO   ] [Python      ] v3.7.6 (tags/v3.7.6:43364a7ae0, Dec 19 2019, 00:42:30) [MSC v.1916 64 bit (AMD64)]
[INFO   ] [Python      ] Interpreter at "C:\Users\verto\AppData\Local\Programs\Python\Python37\python.exe"
[INFO   ] [Factory     ] 184 symbols loaded
[INFO   ] [Image       ] Providers: img_tex, img_dds, img_sdl2, img_gif (img_pil, img_ffpyplayer ignored)
 Traceback (most recent call last):
   File "C:\Users\verto\Documents\Python_test\Test_fils\Test_yvik.py", line 2, in <module>
     from kivy.uix.ladel import Label
 ModuleNotFoundError: No module named 'kivy.uix.ladel'

Мой код:

from kivy.app import App
from kivy.uix.ladel import Label

class FirstKivy(App):
    def build(self):

        return Label(text='Hello kivy!')

FirstKivy().Run()

имя файла Test_yvik.py
версия питона: 3.7.6

from kivy.app import App
from kivy.uix.label import Label

class FirstKivy(App):
    def build(self):

        return Label(text='Hello kivy!')

FirstKivy().run()


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

Создаешь файл с именем своего модуля. (пусть будет mymodule)
Заполняешь его функциями, объектами своего модуля.
Помещаешь его в одну папку с main.py
В main.py пишешь
import mymodule
И юзаешь в своем коде его функции, объекты и т.д.:

mymodule.your_fuction() например.


Разбить файл txt на части по поиску
в общем, задача довольно-таки нестандартная. Имеется файл такого вида:

======================================== SAMPLE 1 ========================================
Большой текст...
======================================== SAMPLE 2 ========================================
Большой текст

Ну и так далее, кол-во может быть не ограничено.
Суть в том, чтобы знаки
= были как разделители и всё, что содержится в
sample 1, попадало бы в первый файл. Всё, что в
sample 2 - во второй, и т. д.
В конце нужно иметь папку, в которой отдельно хранятся файлы txt с информацией.
Т.к. готового решения нет, склоняюсь к python, но я его практически не знаю, подскажите?

Код:

from pathlib import Path
import re

# Регулярка для поиска строки с названием файла
pattern_file_name = re.compile('={40} (.+?) ={40}')

# Создание папки 'samples'
DIR = Path(__file__).resolve().parent / 'samples'
DIR.mkdir(exist_ok=True)

with open('sample.txt', encoding='utf-8') as f:
    file_name = ''
    file_obj = None
    is_file_header = True

    # Перебор строк файла
    for line in f:
        # Проверка наличия заголовка в файле
        match = pattern_file_name.search(line)
        if match:
            if file_obj:
                file_obj.close()

            # Открытие нового файла
            file_name = DIR / (match.group(1) + '.txt')
            file_obj = open(file_name, 'w', encoding='utf-8')
            is_file_header = True
            continue

        if not file_name:
            continue

        # Запись строки в файл
        if is_file_header and len(line) > 50:
            file_obj.write(line[:50] + '\n' + line[50:])
            is_file_header = False

        else:
            file_obj.write(line)

    if file_obj:
        file_obj.close()

Создал файл
sample.txt:

======================================== SAMPLE 1 ========================================
Большой текст...
======================================== SAMPLE 2 ========================================
Большой текст

Результатом будут файлы:

samples/
    SAMPLE 1.txt
    SAMPLE 2.txt

UPD.
Добавлена доработка, которая, при записи первой строки в файл, проверяет, что ее длина не больше 50 символов и в случае превышения, обрезает строку и переносит оставшуюся часть на следующую строку


Рандомное значение из JSON в переменную(python)
Есть json файл:

{
   "question": {
       "main_question": "Сколько будет 2+2?",
       'answers': {
           "correct_option": "4",
           "Optionl": "5",
           "Option2": "6",
           "Option3": "7"
       }
   }
}

, в котором есть столбец, вывод которого, нужно сделать в рандомную переменную,
Допустим, В должно быть равно =
correct_option, остальное не важно. При другом вызове JSON, допустим A = должно быть
correct_option соответственно.

В случае если мы не можем влиять на содержимое json файла и он дан нам как есть:
<code>
import json
from random import shuffle

if __name__ == '__main__':
    with open('./task.json', 'r', encoding='utf-8') as j_file:
        check = False
        js = json.load(j_file)['question']

        rnd_answ = list(js['answers'].values())

        while not check:
            shuffle(rnd_answ)

            answer_dict = {num: answ for num, answ in enumerate(rnd_answ, 1)}

            print(f'Задача : {js["main_question"]}:\n'
                  f'Вариант (1): {rnd_answ[0]}\nВариант (2): {rnd_answ[1]}\n'
                  f'Вариант (3): {rnd_answ[2]}\nВариант (4): {rnd_answ[3]}')

            users_answer = input('Введите номер варианта с правильным ответом : ')

            if int(users_answer) in answer_dict \
                    and answer_dict[int(users_answer)] == js['answers']['correct_option']:
                print('Верное решение')
                check = True
            else:
                print('Ответ не верный. Попробуйте еще раз')
</code>


Как поменять значение вывода api?
пишy простенькyю погоднyю программy, пока что все идёт впорядке, но при выводе нyжного города выводится информация в списке, а мне нyжна что бы выводилось в примере, Погода в Москве: 14° и так далее.

import requests
import json
import datetime
import pyowm

owm = pyowm.OWM("xxxx") #API

print(' Добро пожаловать в погодное приложение "Weather App" ')
forecast  = input(" Введите город для того что бы yзнать погодy в нём: ")

def city_weather(forecast):
    observation = owm.weather_at_place(forecast)
    w = observation.get_weather()
    w.get_temperature()
    return w
print(city_weather(forecast))

При выводе в терминале полyчаю  это:

{'temp': -0.86, 'temp_max': 0.0, 'temp_min': -2.0, 'temp_kf': None}

Но хотелось бы что бы выводилось:

Погода в Москве: -0,86°С

Бyдy благодарен за помощь.

print(f'Погода в Москве: {city_weather(forecast)["temp"]}\u2103')
# Погода в Москве: -0,86°С


Сохранение переменных Python
Код :

price = 0

def change_price():
   price = 1

def show_price():
   print(price)

change_price()
show_price()

show_price отдаёт 0. Мне нужно изменять и сохранять переменную, как это сделать? Почему переменная не сохраняется? Если обозначать
price = 1 в
show_price, отдаст 1.
Я не понимаю в питоне, как это работает?

В функции
change_price переменная
price является локальной, потому что Вы не сказали, что эту переменную необходимо искать в глобальной области видимости. Для этого перед изменением переменой скажите интерпретатору, что она глобальная:

def f():
    global price
    price = 1

Но использование глобальных переменных это очень плохая практика, этого стоит избегать.

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


python что делает return
Подскажите, что конкретно возвращает return и как к нему обратиться?
<code>
import ctypes

EnumWindows = ctypes.windll.user32.EnumWindows
EnumWindowsProc = ctypes.WINFUNCTYPE(ctypes.c_bool, ctypes.POINTER(ctypes.c_int), ctypes.POINTER(ctypes.c_int))
GetWindowText = ctypes.windll.user32.GetWindowTextW
GetWindowTextLength = ctypes.windll.user32.GetWindowTextLengthW
IsWindowVisible = ctypes.windll.user32.IsWindowVisible

titles = []

def foreach_window(hwnd, lParam):
    if IsWindowVisible(hwnd):
        length = GetWindowTextLength(hwnd)
        buff = ctypes.create_unicode_buffer(length + 1)
        GetWindowText(hwnd, buff, length + 1)
        titles.append(buff.value)
    return True

EnumWindows(EnumWindowsProc(foreach_window), 0)

def main():
    for t in titles:
        if t != '':
            print(t)
    return titles

if __name__ == '__main__':
    main()

</code>
Я понимаю, что принтит запущенные != пустые окна.
Но, если убираю return в
def main():
результат не меняется.

return возвращает значение из функции.
К примеру, в Вашем варианте в функции

def main():
    for t in titles:
        if t != '':
            print(t)
    return titles`

Есть указание выводить данные
print(t), если они не равны ''.
В данном случае, у Вас уже при выполнении самой функции выводятся данные. А Соответственно
return не имеет никакой смысловой нагрузки в функции.
Если же Вы хотите собрать данные в функции, а уже потом их выводить, то Вы можете использовать
return.
Предположим, что Вы хотите не вывести сразу значения, а собрать их отдельно.

titles = [1, "", 4, 5]
titles1 = []

def main():
    for t in titles:
        if t != '':
            titles1.append(t) ##Если значение не пустое, добавляем в новый массив, вместо вывода на экран
    return titles1

print(main()) ## При вызове функции вернётся значение указанное в return функции


Помогите найти ошибку. Модуль Tkinter
Есть рабочий код, его функция состоит в том, что пользователь с помощью клавиш управляет шариком:

import tkinter as tk

root = tk.Tk()

canvas = tk.Canvas(root)
canvas.pack()

circle = canvas.create_oval((150, 100, 170, 120), fill='yellow')
vx = 0
vy = 0

def on_key_press(event):
    global vx, vy
    if event.keysym == 'Left':
        vx = -10
    elif event.keysym == 'Right':
        vx = 10
    elif event.keysym == 'Up':
        vy = -10
    elif event.keysym == 'Down':
        vy = 10

def on_key_release(event):
    global vx, vy
    if event.keysym in ('Left', 'Right'):
        vx = 0
    elif event.keysym in ('Up', 'Down'):
        vy = 0

root.bind('<KeyPress>', on_key_press)
root.bind('<KeyRelease>', on_key_release)

def game_loop():
    canvas.move(circle, vx, vy)
    root.after(50, game_loop)#Эту строку я изменяю

game_loop()

root.mainloop()

Но когда я изменяю root.after(50,  game_loop) (Указано в коде) на две строчки, которые по логике должны работать:

time.sleep(0.5)
game_loop()

То программа запускает окно, рисует шарик и стопорится(Управлять нельзя), но не выдаёт ошибку. Что может быть не так?

Используя
sleep(), вы ломаете цикл.
after(), в отличии от
sleep(), запускается в фоновом процессе.


не выводится выбор через оператора "or"
Я попыталась сделать программу, которая будет определять время года по месяцу, но в итоге оператор 'or' выводит только зиму
<code>
print('Хотите узнать какое сейчас время года?\n"Да" или "Нет"?\n')
select = input()

if select.lower() == 'да':
    print('Введите месяц: ')
    select2 = input()

    if select2.lower == 'Декабрь' or 'Янаварь' or 'Февраль':
        print('Сейчас время года: Зима')

    elif select2.lower == 'Май' or 'Апрель' or 'Март':
        print('Сейчас время года: Весна')

    elif select2.lower == 'Август' or 'Июль' or 'Июнь':
        print('Сейчас время года: Лето')

    elif select2.lower == 'Сентябрь' or 'Октябрь' or 'Ноябрь':
         print('Сейчас время года: Осень')

elif select.lower() == 'нет':
    print('Хорошо')
</code>

Как правильно отметили вы не верно создали сложное условие.
Могу рекомендовать не использовать каскад условий, это затрудняет и модификацию кода и его чтение. Если у вас в простой задаче более трех вложений условий, значит что-то пошло не так)
В вашем случае четыре отдельных условных оператора ни чуть не хуже.
Можно создать словарь:
<code>
  m_to_season={ 'январь' :'зима', 'февраль' :'зима', 'март' :'весна', 'апрель' :'весна', 'май' :'весна', 'июнь' :'лето' ,'июль' :'лето', 'август' :'лето', 'сентябрь' :'осень', 'октябрь' :'осень', 'ноябрь' :'осень',  'декабрь' :'зима'}

 print('Введите месяц: ')
 select2 = input()
 if   select2.lower() in m_to_season.keys():
     print(m_to_season[select2.lower()])
 else:
     print('none')
</code>


Как изменять значения через чекбоксы в Tkinter?
Я только начал изучать библиотеку Tkinter, да и Python в целом. Хочу сделать так, чтобы при активации одного чекбокса изменялось соответствующее значение в словаре. Я не совсем понимаю, как нужно вернуть значения чекбокса... Для примера я хочу добиться типа такого результата:
<code>
from tkinter import *
root = Tk()
preset_configs = {
    "test1": "0",
    "test2": "0",

}

def on_click(toggle, key_set):
    if toggle.get() == 1:
        preset_configs[key_set] = "1"
    else:
        preset_configs[key_set] = "0"

check_var = IntVar()
check_var1 = IntVar()
check = Checkbutton(root, text='Текст1', onvalue=1, offvalue=0, variable=check_var, command=on_click(check_var, "test1"))
check1 = Checkbutton(root, text='Текст2', onvalue=1, offvalue=0, variable=check_var1, command=on_click(check_var1, "test2"))
check.pack()
check1.pack()
</code>

В параметре
command вы передали не функцию, а результат ее выполнения. Для того, чтобы таким образом вызвать функцию с параметрами нужно использовать
lambda-функцию.
Замените

check = Checkbutton(root, text='Текст1', onvalue=1, offvalue=0, variable=check_var, command=on_click(check_var, "test1"))
check1 = Checkbutton(root, text='Текст2', onvalue=1, offvalue=0, variable=check_var1, command=on_click(check_var1, "test2"))

На

check = Checkbutton(root, text='Текст1', onvalue=1, offvalue=0, variable=check_var, command=lambda: on_click(check_var, "test1"))
check1 = Checkbutton(root, text='Текст2', onvalue=1, offvalue=0, variable=check_var1, command=lambda: on_click(check_var1, "test2")


Как удалить из строки все не числовые значения
Есть строка
<code>
a = "/1.yuxвапва"
</code>
как можно оставить в строке только числовые значения?

Строки в Python неизменяемы, поэтому нужно создать новую строку.
<code>
new_a = ''.join([i for i in a if i.isdigit()])
</code>


Tkinter, элемент Text
Пользователь вводит данные в элемент
Text. Есть переменная (берётся из
Entry) которая обозначает номер строки в
Text, есть кнопка с функцией которая должна вывести текст написанный в указанной строке с помощью
print. Пробовал экспериментировать со значениями
get, но бессмысленно, не работает как хотелось бы. Жду помощи.

from tkinter import*
root = Tk()
txt = Text(root)
txt.pack()
def read_by_lines():
    text = txt.get('1.0', END).splitlines()
    for line in text:
        #do your stuff here
        pass
root.mainloop()


Как проверить запущен ли процесс без цикла
Пытаюсь сделать так, чтобы раз в 30 сек была проверка наличия процесса. Я нашел такой вот код
<code>
   for proc in psutil.process_iter():
         name = proc.name()
         #print(name)
         if name == "prog.exe":
            print('123')
</code>
Как можно сделать условие если процесс есть то True если нет то False?

Попробуйте так.
<code>
import time
from subprocess import Popen, PIPE

while True:
    prs = Popen('tasklist', stdout=PIPE).stdout.readlines()
    pr_list = [prs[i].decode('cp866', 'ignore').split()[0] for i in range(3,len(prs))]

    if 'ваш_процесс.exe' in pr_list:
        x = True
    else:
        x = False

    print(x)

    time.sleep(30)
</code>


Как во время выполнения цикла изменить target для threading
Есть следующий пример:

import threading
from queue import Queue

def myfunc():
    while True:
        num = queue.get()
        print(num / 10)
        queue.task_done()

def myfunc2():
    while True:
        num = queue.get()
        print(num * 10)
        queue.task_done()

queue = Queue()
for t in range(3):
    t = threading.Thread(target=myfunc)
    t.setDaemon(True)
    t.start()
mylist = []
for x in range(10):
    for i in range(10):
        for i in range (10):
            mylist.append(i)
    for i in mylist:
        queue.put(i)
    queue.join()

Как, в данном случае, во время выполнения цикла, изменить target для тредов на
myfunc2?

Как и в прошлом вопросе, предлагаю использовать пул потоков, а не создавать его самому.
<code>
import time
import threading
from concurrent.futures.thread import ThreadPoolExecutor

DELAY = 2
COUNT_THREAD = 3

def myfunc(value):
    time.sleep(DELAY)
    print(value, value / 10, threading.current_thread().name)

def myfunc2(value):
    time.sleep(DELAY)
    print(value, value * 10, threading.current_thread().name)

executor = ThreadPoolExecutor(COUNT_THREAD)
for x in range(10):
    for f in (myfunc, myfunc2):
        executor.submit(f, x)
</code>


Вывод нескольких классов на 1 url адрес
Обращаюсь с такой проблемой: нужно вывести несколько классов (на данный момент их 2), которые содержатся в views.py на 1 url страницу. Цель: вывод 3 постов одного типа (rig) и 1 пост другого типа (article) на главную страницу. На сайте присутствуют отдельные страницы для вывода всех rig и article
Файл views.py:

from django.shortcuts import render
from rigs.models import Rig
from news.models import Article
from django.views.generic import ListView

class ShowRigView(ListView):
    model = Rig
    template_name = 'main_page/main_page.html'
    context_object_name = 'rig'
    ordering = ['-date']
    paginate_by = 3

    def get_context_data(self, **kwards):
        ctx = super(ShowRigView, self).get_context_data(**kwards)
        return ctx

class ShowArticleView(ListView):
    model = Article
    template_name = 'main_page/main_page.html'
    context_object_name = 'article'
    ordering = ['-date']
    paginate_by = 1

    def get_context_data(self, **kwards):
        ctx = super(ShowArticleView, self).get_context_data(**kwards)
        ctx['title'] = 'MCStore'
        return ctx

class ShowMainView(ShowRigView, ShowArticleView):
    template_name = 'main_page/main_page.html'

Файл urls.py:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.ShowMainView.as_view(), name='main_page'),
]

Есть идеи, как это реализовать? У меня был более простой, но непонятный мне вариант. Можно ли добавить 2 класса в urls.py? Типо такого:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.ShowRigView.as_view(), views.ShowArticleView.as_view() name='main_page'),
]

Очень надеюсь на помощь и буду благодарен.

Примерно это будет выглядеть так:
<code>
# urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.main_page, name='main_page'),
]

# views.py
def main_page(request):
    articles = Article.objects.all().order_by('-date')
    rigs = Rig.objects.all().order_by('-date')

    response_data = {
        'articles': articles,
        'rigs': rigs,
    }

    return render(request, 'main_page/main_page.html', response_data)
</code>


Как узнать есть ли последовательная часть строки в строке Python
Допустим есть список списков
sources = [[1,3,3], [1,4,5], [2,5,6], [7,5,7]] и есть список
target = [1, 4, 8, 5],
нужно понять есть ли в списке
sources список
target, но сделать это нужно так, что при
target = [1, 4, 8, 5] выдовало
True (так как числа полностью соответствуют одному из подлистов
[1, 4, 5]), но при
target = [1, 6, 5, 7] выдовало
False (так как хоть числа
[1, 6, 5, 7] и находятся в разных подлистах, но не соответствуют полностью не одному из них)

Если порядок чисел в списке не важен, то можно вот так:
<code>
sources = [[1,3,3], [1,4,5], [2,5,6], [7,5,7]]
target = [1, 4, 8, 5]

for test_list in sources:
    check_list=[]
    for num in test_list:
        if num in target:
            check_list.append(True)
        else:
            check_list.append(False)

    if all(check_list):
        print("Список {} полностью входит в target".format(test_list))
        check = True
    else:
        print("Список {} не входит в target".format(test_list))
        check = False
</code>


Pandas найти подстроку не учитывая регистр
подскажите. Есть df, в нем столбец stolbec. Подскажите как реализвать поиск подстроки в столбце без восприимчивости к регистру.  Обычный find не работает. (вроде)

Примерный датафрейм:

import pandas as pd

df=pd.DataFrame(['aa', 'Aa', 'AA', 'bb', 'c','foaaa'], columns=['stolbec'])

Имеем:

  stolbec
0      aa
1      Aa
2      AA
3      bb
4       c
5   foaaa

выводим то, что нам нужно:

mystring = 'aa'
df[df['stolbec'].str.contains(mystring, case=False)]

Итог:

    stolbec
0   aa
1   Aa
2   AA
5   foaaa


Парсинг PDF Python. Сканнированные страницы
подскажите, есть ли разница между парсингом пдф конвертированного из ворда и парсингом пдф сделанного из сканнов страниц(даже хороших сканов). Я читал что разницы нет, так как все переводиться в рисунки, но я в этом не уверенн. И если есть разница, то можно ли получить внятный текст с помощью OpenCV(например) и ему подобных или вся надежда на ABBYY?

Если в PDF есть текст, то работают достаточно простые (а, главное,
  быстрые) конвертеры. Поищите по словам pdf to text(pdf2text). На
  неизвестном PDF просто проверьте, можно ли скопировать текст в буфер.
  Если же там картинка - надо использовать бесплатный tesseract, или
  платный abbyy. Да, для извлечения текста есть и питоновский модуль, но
  есть и засада, мне попадались PDF, в которых тест был кривоватый, хотя
  визуально они смотрелись нормально

Комментарий Alex Titov


Как возвращать файлы с русскими буквами в названии через FastAPI?
Сделал на FastAPI сервис, который возвращает файл по ссылке.
Примитивно выглядит так:

import os

from fastapi import FastAPI, HTTPException
from starlette.responses import FileResponse

app = FastAPI()
db = DataBase(config=CONFIG.mysql)

@app.get('/v1.0/get_file')
async def get_file(id_file: str):
    # ...
    file = db.get_file(id_file)
    # ...
    return FileResponse(file.path, filename=file.file_name)

Пока
file.file_name не содержит русских символов, файл успешно скачивается. Как только там появляются русские буквы, мой код падает с ошибкой:

 ...
 File
 "/home/servicemanager/services/file_service/venv/lib/python3.7/site-packages/starlette/datastructures.py",
 line 606, in setdefault
     set_value = value.encode("latin-1")
 UnicodeEncodeError: 'latin-1' codec can't encode characters in position 22-26: ordinal not in range(256)

Не понимаю, откуда вообще берется подобная ошибка. У меня все в кодировке utf-8. Я предположил, что возможно мне БД возвращает что-то не в той кодировке, но даже если я явно пишу вызов
FileResponse(file.path, filename='отчет.xlsx') мой код все равно возвращает ошибку. Помогите, пожалуйста, разобраться в происходящем.

Этого должно хватить
<code>
from urllib.parse import quote_plus

...

    return FileResponse(file.path, filename=quote_plus(file.file_name))
</code>
Но лучше ознакомиться со стандартами кодирования в HTTP.


Преобразование списка в множество без упорядочивания
На входе имеется список

my_list = [18, 19, 20, 21, 22, 23, 0]

При преобразовании в множество получаем:

my_set = set(my_list)
>>> my_set = {0, 18, 19, 20, 21, 22, 23}

Есть ли способ обойти это?

Множество по определению есть неупорядоченным, значит, это просто неправильный подход.
Не возможно полагаться на порядок элементов в множестве.
Как я понял, вы хотите просто устранить дубликаты с сохранением порядка:
<code>
new_list = []

for el in my_list:
    if el not in new_list:
        new_list.append(el)
</code>


Функция не видит переменную-список?
В результате выполнения кода возникает ошибка
NameError
не видит массив
numbers.
Пробовала через
global (как в коде), но не помогает.
Если прописать просто методы без класса - работает, но в этом случае нужен класс.

class MyWin(QtWidgets.QMainWindow):

    ...

    numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F']
    def checking(self):

        def changeEnable(firstIndex = 0, param = False):
            global numbers
            for i in range(firstIndex, len(numbers)):
                getattr(self.ui, "pb_%s" %(numbers[i])).setEnabled(param)

        changeEnable(0, True)
        ...

Попробуйте так:
<code>
class MyWin(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        ...

# ----> vvvv <---------------------------------------------------
        self.numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F']

    ...

    def checking(self):

        def changeEnable(firstIndex = 0, param = False):
            # global numbers

# ---------------------------------------> vvvv <----------------
            for i in range(firstIndex, len(self.numbers)):
                getattr(self.ui, "pb_%s" %(self.numbers[i])).setEnabled(param)

        changeEnable(0, True)
        ...
</code>


Django admin, возможность задавать простые пароли для пользователей
Вот я создаю в админке Джанго, пользователей, но там есть момент ПАРОЛЬ, там требования сложные (типа минимум 8 символ), как мне так сделать, чтобы можно было даже 1 символ поставить.

Для минимальной длины будет достаточно добавить это в файл настроек:
<code>
AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
        'OPTIONS': {
            'min_length': 1,
        }
    },
]
</code>


Join в flask-sqlalchemy
Есть два класса

class Authors(db.Model):
    __tablename__ = 'authors'
    id = db.Column('id', db.Integer, primary_key=True)
    name = db.Column('name', db.String, nullable=False)

    def __init__(self, name):
        self.name = name

class Books(db.Model):
    __tablename__ = 'books'
    id = db.Column('id', db.Integer, primary_key=True)
    isbn = db.Column('isbn', db.String, nullable=False)
    title = db.Column('title', db.String, nullable=False)
    author_id = db.Column('author_id', db.Integer,
                          db.ForeignKey('authors.id'), nullable=False)
    year = db.Column('year', db.Integer)

    def __init__(self, isbn, title, author_id, year):
        self.isbn = isbn
        self.title = title
        self.author_id = author_id
        self.year = year

Хочу сделать запрос
books=Books.query.all(), но что бы я мог достучаться до
Authors.name при обращении к элементу
books
Получить название я могу с помощью books[x].title, например, а как потом получить
Authors.name?
Понимаю, что нужен
join, но не могу разобраться в синтаксисе, много примеров видел для
sqlalchemy, но не для
flask-sqlalchemy
Не хочется синтаксиса вроде
db.session.query(Books,Authors).join()...

Ответ нашелся через
joinedload
Для этого необходимо было добавить

class Books(db.Model):
...
    authors = db.relationship('Authors',
                          backref=db.backref('books', lazy=True))

...

И сделать запрос как
Books.query.options(joinedload('authors'))


Python ООП передача экземпляра класса
<code>
class Ingredient(object):

    def __init__(self, name, weight, cost):
        self.name = name
        self.weight = weight
        self.cost = cost

class Pizza(object):

    def __init__(self, name):

        self.name = name

cream = Ingredient('Сыр', 50, 250)
</code>
Как передать экземпляр класса Ingredient(сream) в класс Pizza и работать там с ним ?

Также как и любой другой параметр, можно передать и объект пользовательского типа/класса.
Например, так:

class Pizza(object):

    def __init__(self, name):
        self.name = name
        # Массив для ингредиетов
        self._ingredients = []

    # Метод для добавления ингредиентов
    def append(self, ingredient):
        self._ingredients.append(ingredient)

Далее, где-то в другом месте мы можем создать и добавить ингредиет в Пиццу:

# Создаем пиццу
pizza = Pizza('Peperonni')
# Создаем ингредиент
peperone = Ingredient('peperone', 10, 1) # ...Цена указана в рублях :)

# Добавлеям игредиент к пицце
pizza.append(peperone)


Python, PyQt5. Как в textEdit вывести все данные, а не последний результат поиска
Пишу программу, которая выполняет поиск в active directory с GUI собранном в pyQt5.
Загвоздка вот в чем - когда я выполняю поиск, например, по фамилии(а с такой фамилией несколько учеток), то мне отбражаеться только последнее значение в виджете textEdit.
А вот если я выполняю вывод всех значений(в коде экранированная строчка), то мне выдает все учетные записи с такой фамилией.
Что я сделал не так? Как мне вывести все учетки с одинаковой фамилией с выбранными мной атрибутами?
Кусочек кода (функция поиска по фамилии):
<code>
def surname_search(self):
    user_surname=self.ui.lineEdit_2.text()
    search_attributes='(anr='+user_surname+')'
    conn.search(ad_search_tree,search_attributes,SUBTREE,attributes =
        ['cn','GivenName','SN','sAMAccountName', 'displayName',
        'telephoneNumber', 'mail','employeeID',
        'initials','distinguishedName','memberOf'])
    for entry in conn.entries:
        self.ui.textEdit.setPlainText(str(entry.SN)+"
            "+str(entry.GivenName)+" "+ str(entry.initials)+"\n"
            +'логин: '+str(entry.cn)+'\n'
            +'таб.№: '+ str(entry.employeeID)+'\n'
            +'почта: '+str(entry.mail)+'\n'
            +'тел.'+str(entry.telephoneNumber)+'\n'
            +str(entry.distinguishedName))
        #self.ui.textEdit.setPlainText(str(conn.entries))
    self.ui.lineEdit_2.clear()
</code>

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

for entry in conn.entries:
    self.ui.textEdit.setPlainText(str(entry.SN)+"
        ...

Используйте метод append:

for entry in conn.entries:
    self.ui.textEdit.append(str(entry.SN)+"
        ...

PS.
Советую не использовать конкатенацию строк для параметров, эффективнее и красивее сделать через форматирование строки.
Сравните это:

self.ui.textEdit.setPlainText(str(entry.SN)+"
    "+str(entry.GivenName)+" "+ str(entry.initials)+"\n"
    +'логин: '+str(entry.cn)+'\n'
    +'таб.№: '+ str(entry.employeeID)+'\n'
    +'почта: '+str(entry.mail)+'\n'
    +'тел.'+str(entry.telephoneNumber)+'\n'
    +str(entry.distinguishedName))

с (f-string, для python 3.6 и выше):

self.ui.textEdit.setPlainText(
    f"{entry.SN} {entry.GivenName} {entry.initials}\nлогин: {entry.cn}\n"
    f"таб.№: {entry.employeeID}\nпочта: {entry.mail}\nтел. {entry.telephoneNumber}"
    f"\n{entry.distinguishedName}"
)

Для python 3.5 и ниже, используется str.format


почему не создает бд в пайтоне? SQLITE3
В общем не могу понять почему не создается бд и в нее не записываются данные. Использую библиотеку pyTelegramAPI . Буду рад совету.
<code>
def get_connection():
    print(1)
    __connection
    if __connection is None:
        __connection = sqlite3.connect('Notebook_log.db')
        conn.commit()

def init_db(force: bool=False): #Если сменить на True то пересоздастся
    conn = get_connection()
    c = conn.cursor()
    if force:
        c.execute('DROP TABLE IF EXISTS book_notebook')
        c.execute("\n"
                  "        CREATE TABLE book_notebook (\n"
                  "            id                  INTEGER PRIMARY KEY,\n"
                  "            user_id             INTEGER NOT NULL,\n"
                  "            text                TEXT NOT NULL\n"
                  "            )\n"
                  "\n"
                  "")

    conn.commit()
def add_message(user_id: int, text: str):
    conn = get_connection()
    c = conn.cursor()
    c.execute("INSERT INTO book_notebook (user_id, text ) VALUES (?,?)", (user_id, text))
    conn.commit()
</code>

Попробуйте взять этот код и адаптировать под себя.
<code>
import sqlite3

class DB:
   """Метод, создающий соединение с базой данных, либо новую базу данных(при её отсутствии по пути path_name)"""
   def __init__(self, path_name):
       self.path_name = path_name
       self.connection = sqlite3.connect(path_name)
       self.cursor = self.connection.cursor()
       print('Конструктор таблицы запущен')

x = DB(r"C:\Users\User\Desktop\tpy\mydatabase.db")
x.close()
</code>


Сложение в словарях Python
есть словарь

classes = {
    '10A': {
        "первый": [80, 88],
        "второй": [52, 91, 66]
    },
    '10Б': {
        'третий': [89, 77],
        'четвёртый': [82, 83, 82]
    }
}

как сложить сумму первого со вторым в словаре? и сумму третьего с четвёртым? и вывести результат в виде

'10A': 377
'10Б': 413

помогите пожалуйста

for k, v in classes.items():
    print(k, sum(i for j in v.values() for i in j), sep=': ')


Удаление дубликатов в 2х файлах (Python)
Есть два файла, пусть в Эксель:
old.xlsx и
new.xlsx.
Выглядят одинаково. Все поля текстовые,
id уникальный.
old.xlsx:

id компании     Название    Адрес
123             Ромашка     Ленина 23
124             Лютик       Свердлова 14
122             Роза        Цветочная 10

new.xlsx:

id компании     Название    Адрес
123             Ромашка     Ленина 23
124             Лютик       Свердлова 14
127             Каштан      Лесная 12

Требуется сверить
new.xlsx с
old.xlsx по
id компании, так, чтобы в результате получились только новые, относительно
old.xlsx, строки.
В приведённом выше примере должно остаться:

127             Каштан      Лесная 12

(все остальные строки удалены,

122             Роза        Цветочная 10

тоже не сохраняется, так как содержится в старом файле).
Делаю так (с использованием
openpyxl):

import openpyxl

wbo = openpyxl.load_workbook('old.xlsx')
wbn = openpyxl.load_workbook('new.xlsx')

wso = wbo.active
wsn = wbn.active

row_old = wso["A"] # т.к. айдишник в столбце А
row_new = wsn["A"]

for _io in row_old:
    cello = _io.value
        for _in in row_new:
            celln = _in.value
            if cello == celln:
            wsn.delete_rows(idx = _in)

wbn.save("output1.xlsx")

Вопрос1: как правильно написать синтаксис, логически вроде всё верно. Сейчас получаю ошибку:

TypeError: '>' not supported between instances of 'Cell' and 'int'

Вопрос2: так как файлы на самом деле весьма тяжелые, нет ли способа сделать то же самое с помощью
pandas (она вроде по резвее будет).
Заранее благодарю.

В pandas:
Ваши таблицы (загружены методом
pd.read_excel()):

In[1]: old

   id компании Название         Адрес
0          123  Ромашка     Ленина 23
1          124    Лютик  Свердлова 14
2          122     Роза  Цветочная 10

In[2]: new

   id компании Название         Адрес
0          123  Ромашка     Ленина 23
1          124    Лютик  Свердлова 14
2          127   Каштан     Лесная 12

Заменим их индексы (когда это нужно — может быть, что вы в методе
pd.read_excel() применили параметр
index_col="id компании", получая тот же самый результат):

In[3]: old = old.set_index("id компании")
In[4]: new = new.set_index("id компании")

... и проверим результаты:

In[5]: old

            Название         Адрес
id компании
123          Ромашка     Ленина 23
124            Лютик  Свердлова 14
122             Роза  Цветочная 10

In[6]: new

            Название         Адрес
id компании
123          Ромашка     Ленина 23
124            Лютик  Свердлова 14
127           Каштан     Лесная 12

Сделаем математическую разность между множествами индексов и применим ею к новой таблице

In[7]: dif = new.reindex(new.index.difference(old.index))

... и проверим конечный результат:

In[8]: dif

            Название      Адрес
id компании
127           Каштан  Лесная 12

Объяснение:

In[3]: old = old.set_index("id компании")
In[4]: new = new.set_index("id компании")

Эти команды заменят индекс (имя строк) на
"id компании" (вместо стандартного
0,
1,
2)

In[7]: dif = new.reindex(new.index.difference(old.index))

new.index.difference(old.index) то же самое как
set(new.index) - set(old.index) есть математическая разность между множествами значений индексов новой и старой таблицы — точно то, что вы хотите:

{123, 124, 127} - {123, 124, 122} есть
{127} (множество всех элементов первого множества, которые не находятся во втором множестве).
Метод
reindex() применит эту разность к новой таблице, устраняя таким образом все строки из старой таблицы.


Почему переменная content возвращает один символ D?
Вот что лежит в текстовике

D:/Dev program/регистрация и настройки тест/application.py

Вот код:

index=1
def read_path(index):
    file=open('setAphinePath.txt','r')
    content=file.readline(index)
    print(content)
    file.close()
    return content

У вас в
file.readline() с какой-то целью передается
index который равен 1, при передаче параметра в
readline() он будет читать только указанное в параметре количество байт.


Python Magic Syntax

def fib(n):
    return n if n < 2 else fib(n - 1) + fib(n - 2)

def memo(f):
    cache = {}
    def wrap(n):
        if n not in cache:
            cache[n] = f(n)
        return cache[n]
    return wrap

fib = memo(fib)

Правильно ли я все понял:
в функцию
memo мы передаем функцию
fib которая рекурсивно вычисляет числа фибоначчи по n-параметру , на эту функцию указывает атрибут
f, который и будет вызывать функцию
fib в функции
wrap.Далее мы переопределяем функцию
fib функцией
wrap и вот у меня вопрос , когда мы вызываем фукнцию
f(n) ( строка - cache[n] = f(n))  у нас вызывается
fib функция , а вот в этой функции у нас рекурсивно вызывается функция
wrap?

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

fib в глобальном поле зрения заменяется на
wrap. Внутри функции wrap мы вызываем оригинальную функцию
fib, ссылка на которую хранится в локальной переменной
f.
А вот внутри оригинальной функции, вызывая,
fib, мы берем ссылку на нее уже из глобального поля зрения. А под
fib у нас функция
wrap.


Поиск слова в строке по индексу
Имеется файл 100к+ строк. В файле по позиции раскиданы различные значения различных типов. К примеру:
020120 1234 Олег Прогул
030220 5678 Петя Опоздание
260220 9012 Ваня Прогул
260220 3456 Макс Опоздание

где, 020120 - позиция 01...06, длина 6,  тип TIME

разделитель - позиция 07, длина 1, тип CHAR

1234 - позиция 08...11, длина 4, тип CHAR

разделитель - позиция 12, длина 1, тип CHAR

и так далее.

На текущий момент ищу следующим образом:

from __future__ import print_function
import io

name = input('Введите имя: ')
type = input('Введите причину: ')

with io.open('1.txt') as file:
     for line in file:
          if name in line and type in line:
               print(line, end='')

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

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

if name == line[12:16] and type == line[17:]:
    print(line, end='')

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

fields = line.split()
if name == fields[2] and type == fields[3]:
    print(line, end='')


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

Действительно, без перевода в строку здесь никак, можно сделать это, например, так:

a = [6, 75, 123, 999]
a.sort(key=lambda x: str(x)[0])
print(a)

[123, 6, 75, 999]