Мой код не правильно находит дубликаты в списке

Coordinates_list = ["a", "a", "c", "c", "c", "a", "d"]
IDs_list = [0, 1, 2, 3, 4, 5, 6]

Duplicates_ID = []
for n in range(len(Coordinates_list)):
  if Coordinates_list[n] in Coordinates_list[n-1]: Duplicates_ID.append(IDs_list[n])

print(Duplicates_ID)

Почему результат: [1, 3, 4]?
Хотя должен быть: [1, 3, 4, 5]
Код ниже вроде более логический правильный, результат [1, 3, 4, 5]:

Coordinates_list = ["a", "a", "c", "c", "c", "a", "d"]
IDs_list = [0, 1, 2, 3, 4, 5, 6]

Duplicates_ID = list()
for i in range(len(Coordinates_list)):
  for j in range(i + 1, len(Coordinates_list)):
    if j < len(Coordinates_list) and Coordinates_list[i] == Coordinates_list[j]: Duplicates_ID.append(IDs_list[j])
    else: pass
Duplicates_ID = list(set(Duplicates_ID))
print(Duplicates_ID)

Сравнивая с
Coordinates_list[n-1] ты сравниваешь с предыдущим элементом (кроме первого, который сравнивается с последним). Поэтому 5 не выводится -
a не содержится в
c.
PS.  Слово "сравнивать" употреблено в переносном смысле, потому что
in -никакое это не сравнение, но в данном случае сравнение.


Параметры в скрипт передать в командной строке
Как переделать этот код так,чтобы параметры в скрипт передавались в командной строке
<code>
def makeRandomData(recordNumber, region, mistakeNumber):
        print(recordNumber + region + mistakeNumber)

makeRandomData(1, 2, 3)
</code>

import sys
def makeRandomData(recordNumber, region, mistakeNumber):
        print(recordNumber + region + mistakeNumber)

try:
    recordNumber = int(sys.argv[1])
    region = int(sys.argv[2])
    mistakeNumber = int(sys.argv[3])

    makeRandomData(recordNumber, region, mistakeNumber)

except:
    raise ValueError("No required attributes")


Закодирование текста в Ascii
Ни могу понять как закодировать в ascii(
Выдает

b'Hello'

<code>
import codecs

def encrypto():
    encode_inf = 'Hello'
    en=codecs.encode(encode_inf,'ascii')
    print(en)

encrypto()
</code>

Работает без подключения модуля
codecs. Просто замените:

en=codecs.encode(encode_inf,'ascii')

на:

encode_inf.encode('ascii')

Дальше вызывайте
print(encode_inf).
Выводит:
Hello


Диалоговая программа
Я хотел сделать мини-программу для небольшого диалога. Суть в том, что список сравнивается с массивом, и в зависимости от того, что пишет человек, программа реагирует по-разному. Вот код:
<code>
line = "------------------------------"

print(line)
print()
print("[*] Get Started")
print()
print(line)

name = input("Hi, what should I call you?\n")
print("Hello, " + name + " Very nice!")
messange = {"mood": ('Not bad', 'Thumbs up', 'Nice', 'Okay', 'Great',
                          'not bad', 'thumbs up', 'thumbs up', 'nice',
                          'okay', 'great')
           }

list = []
mood = input("What is your mood?\n")
list.append(mood)

for i in messange:
   for j in list:
      if  j != messange[i] :
         print('Hmm ...')
      else:
         print('Me too')
</code>

Во-первых, не используйте переменные, которые выглядят, как функции. У Вас в коде есть переменная
list, которая называется так же, как метод
list().
Во-вторых, не стоит делать списки из разных регистров. Т.е. различать great и Great: для этого есть метод
.lower(). Использовать так:
mood = input("What is your mood?\n").lower(). Тогда, если пользователь ввел, например, grEat, в массив list будет добавлено значение great.
В-третьих, можно не пробегать циклом массивы
list и
messange:

if mood in messange["mood"]:
    print('Me too...')
else:
    print('Hmm...')

Ну и дальше уже небольшой оффтоп: пожалуйста, называйте переменные так, чтобы другим это глаза не резало (у меня, например, сердце кровью обливается не от кода, а от словаря
messange. Правильнее -
message,
messages,
msg...). Не принимайте близко к сердцу и учитесь ;)
Не страшно не уметь. Страшно - даже не попытаться научиться.


Как построить три графика scatter в одном?
Есть три массива yy_norm, yy_prof, yy_text_rez - numpy.ndarray
Их объеиняет yy = yTrain[50000:]-numpy.ndarray

yy = yTrain[50000:] # Зарплата
pred = yy_norm[50000:]
plt.scatter(yy, pred)
plt.xlabel('Правильные значение')
plt.ylabel('Предсказания')
plt.axis('equal')
plt.xlim(plt.xlim())
plt.ylim(plt.ylim())
plt.plot([-1000, 5000], [-1000, 5000])
plt.show()
    yy = yTrain[50000:] # Зарплата
    pred = yy_prof[50000:]
    plt.scatter(yy, pred)
    plt.xlabel('Правильные значение')
    plt.ylabel('Предсказания')
    plt.axis('equal')
    plt.xlim(plt.xlim())
    plt.ylim(plt.ylim())
    plt.plot([-1000, 5000], [-1000, 5000])
    plt.show()

    yy = yTrain[50000:] # Зарплата
    pred = yy_text_rez[50000:]
    plt.scatter(yy, pred)
    plt.xlabel('Правильные значение')
    plt.ylabel('Предсказания')
    plt.axis('equal')
    plt.xlim(plt.xlim())
    plt.ylim(plt.ylim())
    plt.plot([-1000, 5000], [-1000, 5000])
    plt.show()

Как построить три массива yy_norm, yy_prof, yy_text_rez с разными цветами на одном графике scatter?
Как посоветовали:

yy = yTrain[50000:] # Зарплата
pred = yy_norm[50000:]
plt.scatter(yy, pred)
pred2 = yy_prof[50000:]
plt.scatter(yy, pred2)
pred3 = yy_text_rez[50000:]
plt.scatter(yy, pred3)

plt.xlabel('Правильные значение')
plt.ylabel('Предсказания')
plt.axis('equal')
plt.xlim(plt.xlim())
plt.ylim(plt.ylim())
plt.plot([-1000, 50000], [-1000, 50000])
plt.show()

Для того, что бы несколько график вывести на одном поле - уберите все промежуточные  plt.show(). А вот что там вы рисуете - это уж решайте сами.


json в python не может дампить словарь с ключами являющимися байтами. Как обойти?
У меня есть аудио данные, полученные с помощью pyaudio. К ним я применяю алгоритм хаффмана и получаю на выходе закодированные данные и словарь для декодирования. Это дело мне надо передать по сети, поэтому я использую json, который не работает с моим словарём, где ключами являются байты. Вот небольшой кусок словаря для наглядности:

{b'\x00': '00', b'\xea': '01000000', b'b': '010000010', b'"': '010000011', b'\xbc': '010000100'}

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

            #работа алгоритма хаффмана
            encodeStr, symbolCode = HF.encode(sound)
            newDict = {}
            #преобразую ключи словаря в десятичные
            for key in symbolCode:
                newDict[ord(key)] = symbolCode[key]
            print('symbolCode: ', symbolCode)
            DD = {}
            # Преобразую ключи словаря в двоичные
            for key in newDict:
                DD[hex(key).encode()] = newDict[key]
            print('DD: ', DD)

В итоге вышло так что словарь DD не похож на изначальный symbolCode. Вот фрагмент:

symbolCode:  {b'\x00': '00', b'\xea': '01000000', b'b': '010000010', b'"': '010000011'}
DD:  {b'0x0': '00', b'0xea': '01000000', b'0x62': '010000010', b'0x22': '010000011'}

Больше мне никаких вариантов решения проблемы в голову не пришло.

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

Перевод из
bytes в
int:

integer = int.from_bytes(b"\xea", "big")
# Т.к. байт всего один, то не имеет разницы, big или little

Конвертация
int в
bytes:

byte = integer.to_bytes(1, "big")
# Аналогично

Но использовать
json для передачи по сети не обязательно. Советую воспользоваться модулем
pickle, который умеет сериализовывать любые built-in типы в
bytes и обратно.

import pickle
symbolCode = {b'\x00': '00', b'\xea': '01000000', b'b': '010000010', b'"': '010000011', b'\xbc': '010000100'}

encoded = pickle.dumps(symbolCode) # Кодируем в байты

print(type(encoded), len(encoded), encoded, sep=" | ")
# <class 'bytes'> | 105 | b'\x80\x03}q\x00(C\x01\x00q\x01X\x02\x00\x00\x0000q\x02C\x01\xeaq\x03X\x08\x00\x00\x0001000000q\x04C\x01bq\x05X\t\x00\x00\x00010000010q\x06C\x01"q\x07X\t\x00\x00\x00010000011q\x08C\x01\xbcq\tX\t\x00\x00\x00010000100q\nu.'

decoded = pickle.loads(encoded) # Восстанавливаем словарь обратно

print(decoded == symbolCode)
# True


Неповторяемый факт из списка
Есть список интересных фактов. Надо сделать так, чтобы они не повторялись.

import random

sport = ['В футболе желтая и красная карточка появились в 1970 году.',
         'Джанни Инфантино является девятым президентом FIFA.']

question = input('Выберите категорию: ')

if question == '1':
    question = random.choice(sport)
    print(question)

Я попробовал удалить через
del sport(question) и
sport.pop(question). Но ничего не помогает.

У вас не получается потому, что функции
pop и
del в качестве аргумента принимают индекс элемента списка, а вы даете ему конкретный элемент. Используйте метод
remove

import random

sport = ['В футболе желтая и красная карточка появились в 1970 году.',
         'Джанни Инфантино является девятым президентом FIFA.']

question = input('Выберите категорию: ')

if question == '1':
    question = random.choice(sport)
    print(question)  # В футболе желтая и красная карточка появились в 1970 году.
    sport.remove(question)

print(sport)    # ['Джанни Инфантино является девятым президентом FIFA.']

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

sport.pop(sport.index(question)) или
del sport[sport.index(question)]


Задача крест Python
Заполните квадратный массив целыми числами по образцу. В углах записан число 0,
в соседних с ними с углами клетках записано число 1, в соседних с ними клетках записано число 2 и т.д.
Клетки считаются соседними, если у них есть общая сторона или вершина.

Пример для n=8
0 1 2 3 3 2 1 0
1 1 2 3 3 2 1 1
2 2 2 3 3 2 2 2
3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3
2 2 2 3 3 2 2 2
1 1 2 3 3 2 1 1
0 1 2 3 3 2 1 0

Мое решение:

n = 8
a = []
for i in range(n):
a.append([])
for j in range(n):
    # top & left
    if j < n//2 and i < n//2:
        x = max(i, j)
    # top & right
    elif j >= n//2 and i < n//2:
        x = max(i, n-j-1)
    # down & left
    elif i >= (n//2) and j < n//2:
        x = max(n-i-1,j)
    # down & right
    else: x = max(n-i-1,n-j-1)
    a[i].append(x)
for k in a:
    print(*k)

Тоже самое но с генератором

N = 8
mtrx = [[max(i,j) if j < n//2 and i < n//2
         else max(i, n-j-1) if j >= n//2 and i < n//2
         else max(n-i-1,j) if i >= (n//2) and j < n//2
         else max(n-i-1,n-j-1) for j in range(n)] for i in range(n)]
for b in mtrx:
    print(*b)

Хотелось бы посмотреть на более изящные способы решения

Задача похожа на вашу прошлую, только теперь проще использовать расстояние от центральных линий, а не от углов
<code>
 mtrx = [[(n - 1 - min(abs(n - 1 - 2 * i), abs(n - 1 - 2 * j))) // 2
      for j in range(n)] for i in range(n)]
</code>


Как вычислить границы доверительного интервала при неизвестной дисперсии на python?
Как имея входные данные a = 0.95(уровень доверия), n = 5(Размер выборки), сама выборка(-0.406647 1.15391 -1.01899 -1.45092 -0.492494) получить границы интервала (-1.814 0.928 )?
Код для вычисления интервала. Не могу понять в чем ошибка, все делаю согласно формулам, но ответ получается немного не такой.
<code>
import scipy.stats as sp
import numpy as np

with open('input.txt', 'r') as fin, open('output.txt', 'w') as fout:
    n, a = map(lambda x: float(x), fin.readline().strip('\n').split())
    x = list(map(float, fin.readline().split()))

    xMean = np.mean(x)
    se = sp.sem(x)
    interval = se * sp.t.ppf((1-a)/2, n - 1)
    X = [xMean + interval, xMean - interval]

    print(*X, file=fout, sep=' ', end='')
</code>

Попробуйте заменить:

interval = se * sp.t.ppf((1-a)/2, n - 1)

на:

interval = se * sp.t.ppf((1+a)/2, n - 1)
# NOTE:  —————————————->   ^


Как выбрать выбрать определенные столбцы DataFrame в pandas, используя список булевых переменных?
Есть DataFrame с N столбцами и список булевых переменных длинной N. Как получить DataFrame, такой что в него входят только те столбцы исходного DataFrame'а, которым в списке булевых переменных соответствует True?

Попробуйте так:
<code>
df.loc[:, boolean_list]
</code>


piexif Запись метаданных в фото
Пробую следующий код (записываю Key), использую популярную библиотеку piexif:

import piexif

exif_dict = piexif.load("test.jpg")

exif_dict["Exif"]['Key'] = '123123'
print(exif_dict)
exif_bytes = piexif.dump(exif_dict)

piexif.insert(exif_bytes, "test.jpg")

получаю следующую ошибку:

Traceback (most recent call last):
  File "d:/Python-tests/venv/main.py", line 6, in <module>
    exif_bytes = piexif.dump(exif_dict)
  File "d:\Python-tests\venv\lib\site-packages\piexif\_dump.py", line 68, in dump
    exif_set = _dict_to_bytes(exif_ifd, "Exif", zeroth_length)
  File "d:\Python-tests\venv\lib\site-packages\piexif\_dump.py", line 325, in _dict_to_bytes
    key_str = struct.pack(">H", key)
struct.error: required argument is not an integer

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

I had the same problem, it was an issue in the binary conversion. When I removed "AsShotNeutral" key from 0th worked:

import piexif

exif_dict = piexif.load("test.jpg")

del exif_dict["0th"][piexif.ImageIFD.AsShotNeutral] # <---- ADD THIS LINE

exif_dict["Exif"]['Key'] = '123123'
print(exif_dict)

exif_bytes = piexif.dump(exif_dict)

piexif.insert(exif_bytes, "test.jpg")

If it doesn't work try removing the entire '0th' key:

del exif_dict["0th"]

A similar issue opened in the piexif github.


Python. Поиск по матрице, считанной из файла
Вечера. Сижу над разными задачами. Сейчас работаю с матрицами.
Такой вопрос,как реализовать поиск по матрице,которая читается с файла как в моем коде ниже?
В elif'е реализовано то,что я хочу сделать и в if,но пока не додумал что да как.
<code>
  r = int(input())

if r == 1:
    with open('matrix1.txt') as f:
        matrix = [list(map(int, row.split())) for row in f.readlines()]
        print (matrix)

    print("Число рёбер:",k)

elif r == 2:
    print("Введите кол-во точек графа: ")
    M=N=int(input())
    print("Заполните матрицу смежности:")
    matrix=[]
    matrix = [[int(input())
       for x in range(N)] for y in range(M)]
    print(matrix)

    k=0
    for x in range(N):
        for y in range(M):
           if matrix[x][y] == 1:
               k +=  1
    print("Число рёбер:",k)
</code>

может как то так
<code>
k = 0
if r == 1:
    with open('matrix1.txt') as f:
        matrix = [list(map(int, row.split())) for row in f.readlines()]
        for i in range(len(matrix)):
            for j in range(len(matrix[i])):
                k += 1 if matrix[i][j] == 1 else 0
elif r == 2:
    M = N = int(input("Введите кол-во точек графа: "))
    print("Заполните матрицу смежности:")
    matrix = [[int(input()) for x in range(N)] for y in range(M)]
    for x in range(N):
        for y in range(M):
           k += 1 if matrix[i][j] == 1 else 0

print('Число ребер -> {}\n Матрица:\n{}'.format(k, matrix))
</code>


display(self, str): argument 1 has unexpected type 'win'
Нужно, чтобы при нажимании кнопок на калькуляторе, значения выводились на экран по очереди, а не заменяли друг друга!
Вот код:

# -*- coding: utf-8 -*-

import sys
from PyQt5 import QtWidgets
from calc import Ui_MainWindow

class win(QtWidgets.QMainWindow):
    def __init__(self):
        super(win, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.ui.pushButton.pressed.connect(self.btnPressed)
        self.ui.pushButton_3.pressed.connect(self.btnPressed_2)
        self.ui.pushButton_4.pressed.connect(self.btnPressed_3)
        self.ui.pushButton_5.pressed.connect(self.btnPressed_4)
        self.ui.pushButton_6.pressed.connect(self.btnPressed_5)
        self.ui.pushButton_7.pressed.connect(self.btnPressed_6)
        self.ui.pushButton_8.pressed.connect(self.btnPressed_7)
        self.ui.pushButton_9.pressed.connect(self.btnPressed_8)
        self.ui.pushButton_10.pressed.connect(self.btnPressed_9)
        self.ui.pushButton_11.pressed.connect(self.btnPressed_10)
        self.ui.pushButton_12.pressed.connect(self.btnPressed_11)
        self.ui.pushButton_13.pressed.connect(self.btnPressed_12)
        self.ui.pushButton_14.pressed.connect(self.btnPressed_13)
        self.ui.pushButton_15.pressed.connect(self.btnPressed_14)

        self.setWindowTitle('Калькулятор')

    def btnPressed(self):
        self.ui.lcdNumber.display(self.ui.lcdNumber.display() + float(1))
    def btnPressed_1(self):
        self.ui.lcdNumber.display(self.ui.lcdNumber.display() + float(2))
    def btnPressed_2(self):
        self.ui.lcdNumber.display(self.ui.lcdNumber.display() + float(3))
    def btnPressed_3(self):
        self.ui.lcdNumber.display(self.ui.lcdNumber.display() + float(4))
    def btnPressed_4(self):
        self.ui.lcdNumber.display(self.ui.lcdNumber.display() + float(5))
    def btnPressed_5(self):
        self.ui.lcdNumber.display(self.ui.lcdNumber.display() + float(6))
    def btnPressed_6(self):
        self.ui.lcdNumber.display(self.ui.lcdNumber.display() + float(7))
    def btnPressed_7(self):
        self.ui.lcdNumber.display(self.ui.lcdNumber.display() + float(8))
    def btnPressed_8(self):
        self.ui.lcdNumber.display(self.ui.lcdNumber.display() + float(9))
    def btnPressed_9(self):
        self.ui.lcdNumber.display(self.ui.lcdNumber.display() + '+')
    def btnPressed_10(self):
        self.ui.lcdNumber.display(self.ui.lcdNumber.display() + float(0))
    def btnPressed_11(self):
        self.ui.lcdNumber.display(self.ui.lcdNumber.display() + '-')
    def btnPressed_12(self):
        self.ui.lcdNumber.display(self.ui.lcdNumber.display() + '*')
    def btnPressed_13(self):
        self.ui.lcdNumber.display(self.ui.lcdNumber.display())
    def btnPressed_14(self):
        self.ui.lcdNumber.display(self.ui.lcdNumber.display() + ':')

app = QtWidgets.QApplication([])
application = win()
application.show()

sys.exit(app.exec_())

Я пробовал что-то сделать, ничего не получалось, на данном этапе выдаёт такие ошибки

display(self, str): argument 1 has unexpected type 'win'
  display(self, float): argument 1 has unexpected type 'win'
  display(self, int): argument 1 has unexpected type 'win'

Что делать? Как сделать так, чтобы значения выводились друг за другом, а не заменяя друг друга

Вот так (также с остальными):
<code>
def btnPressed_9(self):
        self.ui.lcdNumber.display(self.ui.lcdNumber.value()+"+")
</code>
И еще: есть циклы, а имена классов пишутся с большой буквы.


Вернуть список объектов в заданных координатах
Задание:
написать функцию, которая будет возвращать список объектов в заданных координатах.
Дано:

game_objects = {
    ('wall', 0): {'position': (0, 0), 'passable': False, 'interactable': False, 'char': '#'},
    ('wall', 1): {'position': (0, 1), 'passable': False, 'interactable': False, 'char': '#'},
    ('player',): {'position': (1, 1), 'passable': True, 'interactable': True, 'char': '@', 'coins': 0},
    ('soft_wall', 11): {'position': (1, 4), 'passable': False, 'interactable': True, 'char': '%'}
}

Наш код:

def get_objects_by_coords(position):
    for i in game_objects.values():
            if i['position'] == position:
                for j in game_objects.keys():
                    return [j]
            return []

Пример вывода:

get_objects_by_coords((1, 1)) == [('player',)]
get_objects_by_coords((2, 1)) == []

Проблема: код проходит только по первым значениям словаря, как можно их объединить? Или можно в этом случае использовать функцию get()?

у вас второй return прерывает цикл и ключ вы странно добываете
<code>
def get_objects_by_coords(position):
    ret = []
    for k,i in game_objects.items():
            if i['position'] == position:
                    ret.append(k)
    return ret

print(get_objects_by_coords((1, 1))) #  == [('player',)]
print(get_objects_by_coords((2, 1))) # == []
</code>


Вывод инфо о Mikrotik через routeros api Python
Есть необходимость получить информацию о температуре Mikrotik, к примеру выполнить команду "/system health print", но никак не могу разобраться, как её записать в routeros_api Python3, пишет, что неверная команда.
Пример кода с командой, который успешно работает и выводит соответствующую информацию:
<code>
import routeros_api
connection = routeros_api.RouterOsApiPool('192.168.1.1',
username='admin', password='')
api = connection.get_api()
list_address = api.get_resource('/ip/firewall/address-list/')
test = list_address.get()
print(test)
</code>

Оказалось всё просто, я пока пробовал разные вариации, попробовал всё, кроме этого:
<code>
list_address = api.get_resource('/system/health')
</code>
Но, комментарий "strawdog" помог :)


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

# -*- coding: utf-8 -*-

import sys
from PyQt5 import QtWidgets
from calc import Ui_MainWindow

class win(QtWidgets.QMainWindow):
    def __init__(self):
        super(win, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.ui.lineEdit.setReadOnly(True)
        self.ui.pushButton.clicked.connect(self.btnClicked)
        self.ui.pushButton_2.clicked.connect(self.btnClicked_1)
        self.ui.pushButton_3.clicked.connect(self.btnClicked_2)
        self.ui.pushButton_4.clicked.connect(self.btnClicked_3)
        self.ui.pushButton_5.clicked.connect(self.btnClicked_4)
        self.ui.pushButton_6.clicked.connect(self.btnClicked_5)
        self.ui.pushButton_7.clicked.connect(self.btnClicked_6)
        self.ui.pushButton_8.clicked.connect(self.btnClicked_7)
        self.ui.pushButton_9.clicked.connect(self.btnClicked_8)
        self.ui.pushButton_10.clicked.connect(self.btnClicked_9)
        self.ui.pushButton_11.clicked.connect(self.btnClicked_10)
        self.ui.pushButton_12.clicked.connect(self.btnClicked_11)
        self.ui.pushButton_13.clicked.connect(self.btnClicked_12)
        self.ui.pushButton_14.clicked.connect(self.btnClicked_13)
        self.ui.pushButton_15.clicked.connect(self.btnClicked_14)

        self.setWindowTitle('Калькулятор')

    def btnClicked(self):
        self.ui.lineEdit.setText('1')
    def btnClicked_1(self):
        self.ui.lineEdit.setText('2')
    def btnClicked_2(self):
        self.ui.lineEdit.setText('3')
    def btnClicked_3(self):
        self.ui.lineEdit.setText('4')
    def btnClicked_4(self):
        self.ui.lineEdit.setText('5')
    def btnClicked_5(self):
        self.ui.lineEdit.setText('6')
    def btnClicked_6(self):
        self.ui.lineEdit.setText('7')
    def btnClicked_7(self):
        self.ui.lineEdit.setText('8')
    def btnClicked_8(self):
        self.ui.lineEdit.setText('9')
    def btnClicked_9(self):
        self.ui.lineEdit.setText('+')
    def btnClicked_10(self):
        self.ui.lineEdit.setText('-')
    def btnClicked_11(self):
        self.ui.lineEdit.setText('=')
    def btnClicked_12(self):
        self.ui.lineEdit.setText('*')
    def btnClicked_13(self):
        self.ui.lineEdit.setText(':')
    def btnClicked_14(self):
        self.ui.lineEdit.setText('.')

app = QtWidgets.QApplication([])
application = win()
application.show()

sys.exit(app.exec_())

Вот макет:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'calc.ui'
#
# Created by: PyQt5 UI code generator 5.13.1
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(320, 526)
        font = QtGui.QFont()
        font.setPointSize(12)
        MainWindow.setFont(font)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(30, 70, 75, 61))
        font = QtGui.QFont()
        font.setFamily("Arial Black")
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.pushButton.setFont(font)
        self.pushButton.setObjectName("pushButton")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(30, 20, 271, 31))
        self.lineEdit.setObjectName("lineEdit")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(130, 70, 75, 61))
        font = QtGui.QFont()
        font.setFamily("Arial Black")
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_2.setFont(font)
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_3.setGeometry(QtCore.QRect(230, 70, 75, 61))
        font = QtGui.QFont()
        font.setFamily("Arial Black")
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_3.setFont(font)
        self.pushButton_3.setObjectName("pushButton_3")
        self.pushButton_4 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_4.setGeometry(QtCore.QRect(30, 150, 75, 61))
        font = QtGui.QFont()
        font.setFamily("Arial Black")
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_4.setFont(font)
        self.pushButton_4.setObjectName("pushButton_4")
        self.pushButton_5 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_5.setGeometry(QtCore.QRect(130, 150, 75, 61))
        font = QtGui.QFont()
        font.setFamily("Arial Black")
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_5.setFont(font)
        self.pushButton_5.setObjectName("pushButton_5")
        self.pushButton_6 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_6.setGeometry(QtCore.QRect(230, 150, 75, 61))
        font = QtGui.QFont()
        font.setFamily("Arial Black")
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_6.setFont(font)
        self.pushButton_6.setObjectName("pushButton_6")
        self.pushButton_7 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_7.setGeometry(QtCore.QRect(30, 230, 75, 61))
        font = QtGui.QFont()
        font.setFamily("Arial Black")
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_7.setFont(font)
        self.pushButton_7.setObjectName("pushButton_7")
        self.pushButton_8 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_8.setGeometry(QtCore.QRect(130, 230, 75, 61))
        font = QtGui.QFont()
        font.setFamily("Arial Black")
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_8.setFont(font)
        self.pushButton_8.setObjectName("pushButton_8")
        self.pushButton_9 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_9.setGeometry(QtCore.QRect(230, 230, 75, 61))
        font = QtGui.QFont()
        font.setFamily("Arial Black")
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_9.setFont(font)
        self.pushButton_9.setObjectName("pushButton_9")
        self.pushButton_10 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_10.setGeometry(QtCore.QRect(30, 300, 75, 61))
        font = QtGui.QFont()
        font.setFamily("Arial Black")
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_10.setFont(font)
        self.pushButton_10.setObjectName("pushButton_10")
        self.pushButton_11 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_11.setGeometry(QtCore.QRect(130, 300, 75, 61))
        font = QtGui.QFont()
        font.setFamily("Arial Black")
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_11.setFont(font)
        self.pushButton_11.setObjectName("pushButton_11")
        self.pushButton_12 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_12.setGeometry(QtCore.QRect(230, 300, 75, 61))
        font = QtGui.QFont()
        font.setFamily("Arial Black")
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_12.setFont(font)
        self.pushButton_12.setObjectName("pushButton_12")
        self.pushButton_13 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_13.setGeometry(QtCore.QRect(30, 370, 75, 61))
        font = QtGui.QFont()
        font.setFamily("Arial Black")
        font.setPointSize(14)
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_13.setFont(font)
        self.pushButton_13.setObjectName("pushButton_13")
        self.pushButton_14 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_14.setGeometry(QtCore.QRect(130, 370, 75, 61))
        font = QtGui.QFont()
        font.setFamily("Arial Black")
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_14.setFont(font)
        self.pushButton_14.setObjectName("pushButton_14")
        self.pushButton_15 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_15.setGeometry(QtCore.QRect(230, 370, 75, 61))
        font = QtGui.QFont()
        font.setFamily("Arial Black")
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_15.setFont(font)
        self.pushButton_15.setObjectName("pushButton_15")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 320, 27))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

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

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "1"))
        self.pushButton_2.setText(_translate("MainWindow", "2"))
        self.pushButton_3.setText(_translate("MainWindow", "3"))
        self.pushButton_4.setText(_translate("MainWindow", "4"))
        self.pushButton_5.setText(_translate("MainWindow", "5"))
        self.pushButton_6.setText(_translate("MainWindow", "6"))
        self.pushButton_7.setText(_translate("MainWindow", "7"))
        self.pushButton_8.setText(_translate("MainWindow", "8"))
        self.pushButton_9.setText(_translate("MainWindow", "9"))
        self.pushButton_10.setText(_translate("MainWindow", "+"))
        self.pushButton_11.setText(_translate("MainWindow", "-"))
        self.pushButton_12.setText(_translate("MainWindow", "="))
        self.pushButton_13.setText(_translate("MainWindow", "*"))
        self.pushButton_14.setText(_translate("MainWindow", ":"))
        self.pushButton_15.setText(_translate("MainWindow", "."))

Замена происходит потому что вызывается setText. Строка, что в него передается заменит, все, что было ранее в редакторе:

def btnClicked(self):
    self.ui.lineEdit.setText('1')
def btnClicked_1(self):
    self.ui.lineEdit.setText('2')
...

Чтобы, этого избежать, добавляйте старую строку, пример:

self.ui.lineEdit.setText(self.ui.lineEdit.text() + '1')


Python. Последний максимум
Найдите наибольшее значение в списке и индекс последнего элемента, который имеет данное значение за один проход по списку, не модифицируя этот список и не используя дополнительного списка.
Мой код:
<code>
a = input().split()
print(max(a), a.index(max(a)))
</code>
Существует проблема, при которой в списке два или более элементов равны максимуму списка. Как получить индекс последнего?

<code>
a = [1, 3, 5, 1, 0, 4, 5, 0]

i, item = max(enumerate(a), key=lambda pair: (pair[1], pair[0])))
print(item)  # 5 - значение последнего максимума
print(i)  # 6 - индекс последнего максимума
</code>
При нахождении максимума сравниваем пары индекс-значение, но с помощью key-функции делаем чтобы значение было более приоритетным, чем индекс (просто меняем их местами в паре), в итоге получается что последний максимум "больше", чем все предыдущие (значения элементов одинаковые, но индекс больше).


PD регулятор для движения к цели
У меня есть робот, я знаю его координаты
[x1, y1] и угл
phi, робот может двигаться к цели, которая имеет координаты
[x2, y2]. Сейчас я просто вычисляю угл

theta = math.atan2(x1-x2, y1-y2)

потом смотрю на разницу углов, если theta - phi = 0 или меньше какого-то эпсилон, то угловая скорость движения робота нулевая
angular_velocity = 0, а если нет, то то робот поворачивается право
angular_velocity = -1 или влево
angular_velocity = 1, линейная скорость всегда постоянна. Проблема в том, что робот двигается зигзагом и траектория движения робот больше похоже на ломанную, чем на ровную линию, а если уменьшить скорость поворота, то робот будет слишком медленно поворачивать и ему нужно слишком много места для разворота. Я так понял мне нужен ПД регулятор. Очень хотелось бы в ответе увидеть примеры такой реализации с точки зрения именно программирования, потому что теорию я почитал, но все примеры были для регулятора температуры, а не для угловой скорости.

В первую очередь введите пропорциональность (П) - скорость поворота не 1, а
V = P*(theta - phi), где P - коэффициент, который нужно подобрать.
Если не устроит, добавляйте дифференциальный член c коэффициентом D, учитывающий реальное угловое ускорение

delta = theta - phi
V = P * delta + D * ddelta/dt

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


два декоратора не работают вместе
Обрабатывается только первый декоратор, почему - не пойму...
<code>
def exclamationMark(func):
    def wrapper(func):
        return  func + '!'
    return wrapper

def decor(func):
    def wrapper(func):
        return  func + ' kurwa'
    return wrapper

@exclamationMark
@decor
def kurwa(name):
    return name

print(kurwa(input('kto kurwa? ')).title())
</code>

Попробуйте:
<code>
def exclamationMark(func):
    def wrapper(*args, **kwargs):
        return func(*args, **kwargs) + '!'
    return wrapper

def decor(func):
    def wrapper(*args, **kwargs):
        return func(*args, **kwargs) + ' kurwa'
    return wrapper

@exclamationMark
@decor
def kurwa(name):
    return name

print(kurwa('Test'))  # Test kurwa!
</code>

UPD. Спасибо Xander за хорошее и подробное объяснение :)
А если отвечать на вопрос "почему не работает"?

Если по-простому, то враппер подменяет собой декорируемую функцию.
  Соответственно, он будет вызываться с тем же набором аргументов, с
  которым вызывается декорируемая функция. Если декорируемая функция
  принимает name - то и враппер должен принимать name. А если мы заранее
  не знаем, какой набор аргументов будет принимать декорируемая функция,
  и хотим универсального решения - то мы используем args и kwargs.


Python - получить данные от медленного web-сервера?
Собственно имеется: python3.8, веб-сервер (сайт с конкретным url).
Сайт очень медленно отдает данные - т.е. при запросе к url, на сайте некоторое время висит кастомная анимация загрузки примерно 5-15 сек. После чего отображается на странице пару таблиц с нужным содержимым (выглядит как простой html), есть некоторая форма для отправки данных на сайт (4 поля ввода текста и кнопка). Так же присутствует некоторый фрейм внутри которого можно скролить записи введенные через форму ранее.
Информации о том, на чем написан сайт не имею (и не факт что получу). Знаю что есть jQuery, и какие-то собственные js+php. Страничка раз в минуту обновляется самостоятельно.
Вопрос: мне необходимо с использованием python вытаскивать уже сгенерированную страничку со всем ее содержимым? requests и aiohttp уже пробовал и либо не правильно готовил, либо что-то не так.

Расковыряв весь JS-код который грузился в страничке, я смог найти те самые endpoint'ы которые дергались с помощью JavaScript.
Так же удалось найти разработчика, который делал этот "сайт". Разработчик доделать не решился, но выдал конкретные параметры с которыми можно дергать endpoint'ы.
Вопрос можно считать закрытым.


Сохранение кода VBA при записи xlsm из Python
Просьба дать совет, какую библиотеку python предпочтительно использовать для решения задачи.
Есть шаблон Excel в формате xlsxm c легаси-кодом на VBA. Шаблон содержит оформление, навигацию и прочее, что не оптимально переписывать заново на Python. Есть необходимость из Python экспортировать в диапазон Excel массива данных из Pandas Dataframe.
Проблема:
xlsxwriter не поддерживает добавление данных в существующий шаблон, а только перезаписывает файл.
openpyxl не поддерживает формат xlsm и, как следствие, отрезает VBA код из шаблона.

Пример - для простоты я изменил значение одной ячейки -
"B2" на
1000:

In [105]: from openpyxl import load_workbook

In [106]: filename = r"D:\download\1.xlsm"

In [107]: wb = load_workbook(filename, keep_vba=True)
# NOTE: -----------------------------> ^^^^^^^^^^^^^

In [108]: ws = wb.active

In [109]: ws["B2"].value = 1000

In [110]: wb.save(filename)

После сохранения - кнопки с макросами работают и форматирование не изменилось.


Умножить все четные столбцы матрицы А на вектор x в обратном порядке
Дан вектор
x и матрица
А. Надо умножить все четные столбцы матрицы
А на вектор
x в обратном порядке. Результат записать в новую матрицу и
найти сумму ее элементечалов.

import numpy as np
A = np.array([ [2, 1], [2, 2], [4, 3] ])
x = np.array([ [2], [3] ])
b = A.dot(x)
print(b)

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

Можно воспользоваться срезами:

A[::2] @ x[::-1]

Результат:

array([[ 8],
       [18]])

Сумма элементов:

(A[::2] @ x[::-1]).sum()
# 26


Сравнение 2-ух списков в python и последующий вывод с заменой значения
Имеется задача: сравнить два списка. Если элемент первого списка равен элементу второго списка, то выводится 1, если не равен, то выводится 1.
<code>
a = ["тест" , "услуга2" , "задание" , "услуга4" , "тест5" , "тест6" , "тест7" , "услуга8" , "группа"]
b = ["тест6" , "услуга2" , "услуга4" , "услуга8"]

common = list(set(a) & set(b))

for i in a:
    if common:
        print(1)
    else:
        print(0)
</code>
В конечном итоге выводит только единицы. В чем проблема?

Как насчёт такого варианта:
<code>
a = ["тест" , "услуга2" , "задание" , "услуга4" , "тест5" , "тест6" , "тест7" , "услуга8" , "группа"]
b = ["тест6" , "услуга2" , "услуга4" , "услуга8"]

for i in a:
    if i in b:
        print(1)
    else:
        print(0)
</code>


name 'town' is not defined.Почему?И как исправить?
<code>
import telebot
import pyowm
from pyowm import OWM
owm=pyowm.OWM('68976fbbf786ee31d1f043d7aa628280',language='ru')
bot = telebot.TeleBot('823871901:AAFrwDCr2ettFfqpmHQZhyQtMcX5d-_lGh')
@bot.message_handler(content_types=['text'])
def handle_text(message):
    town=message.text
    observation=owm.weather_at_place(town)
    w=observation.get_weather()
    a=w.get_temperature('celsius')['temp']
    bot.send_message(message.chat.id,a)

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

Думаю, проблема в том, что вы пытаетесь обратиться к переменной
town вне функции
handle_text, просто не показали это в примере. Так как переменная
town определена в функции, то она существует только в ней и будет не определена в глобальной области видимости.

def test():
    x = 20
    print(x) # 20

print(x) # x is not defined


Dictionary comprehensions синтаксис python
Допустим, у меня появилось 2 списка, в одном лежат ключи, в другом их значения. Соответствие поиндексное (1:1,2:2)

keys = []
values = []

Мне при помощи генератора словарей нужно создать словарь, ключом которого является
keys[i], а значением
values[i].
Подскажите правильный синтаксис этого действия, всё, что пока получилось:

{k:v for k in keys for v in values}

Oднако, данный синтаксис создаёт вложенный список и проходит по нему полностью.
Mогу ли я как-то осуществить синхронный забор данных из списков?

В том случае если число элементов в
keys и
values совпадает можно воспользоваться встроенной функцией zip():

In [1]: keys = list("abcd")

In [2]: values = [11,12,13,14]

dictionary comprehension:

In [3]: d = {k:v for k,v in zip(keys, values)}

In [4]: d
Out[4]: {'a': 11, 'b': 12, 'c': 13, 'd': 14}

dict() конструктор:

In [5]: d2 = dict(zip(keys, values))

In [6]: d2
Out[6]: {'a': 11, 'b': 12, 'c': 13, 'd': 14}

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

In [14]: values = [11, 12, 13]

In [15]: keys
Out[15]: ['a', 'b', 'c', 'd']

In [16]: values
Out[16]: [11, 12, 13]

In [17]: d3 = dict(zip(keys, values))

In [18]: d3
Out[18]: {'a': 11, 'b': 12, 'c': 13}

ключ
d не попал в словарь

In [19]: d4 = {k:v for k,v in zip(keys, values)}

In [20]: d4
Out[20]: {'a': 11, 'b': 12, 'c': 13}

если в результирующем словаре должны быть все элементы, то можно воспользоваться itertools.zip_longest():

In [21]: from itertools import zip_longest

In [22]: d5 = dict(zip_longest(keys, values))

In [23]: d5
Out[23]: {'a': 11, 'b': 12, 'c': 13, 'd': None}
#  NOTE:  ------------------------->  ^^^^^^^^


Узнать какой элемент выполнил обращение к функции
Есть некая функция отправляющая значения со шкалы, есть 3 шкалы вызывающие эту функцию в момент активации и передающие ей значения. Вопрос в следующем каким: образом определить с какой именно шкалы передаются значения.
Пример кода:
<code>
Degree1 = Scale(master, **options, command=send)
Degree2 = Scale(master, **options, command=send)
Degree3 = Scale(master, **options, command=send)

def send(value):
    print(value)
</code>

Можно через лямбду передавать элемент управления в обработчик:

def send(widget, value):
    print(widget, value)

Degree1 = Scale(master, **options)
Degree1.config(command=lambda value: send(Degree1, value))

Degree2 = Scale(master, **options)
Degree2.config(command=lambda value: send(Degree2, value))

Degree3 = Scale(master, **options)
Degree3.config(command=lambda value: send(Degree3, value))

Если нужен номер, а не сам виджет:

def send(widget_number, value):
    print(widget_number, value)

Degree1 = Scale(master, **options, command=lambda value: send(1, value))
Degree2 = Scale(master, **options, command=lambda value: send(2, value))
Degree3 = Scale(master, **options, command=lambda value: send(3, value))

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

scales = []

for i in range(3):
    scale = Scale(master, **options, command=lambda value, i=i: send(i, value))
    scale.pack()
    scales.append(scale)

Если просто написать
command=lambda value: send(i, value), то лямбда "завяжется" на локальную переменную
i, и при изменении значения любой из шкал будет показывать последнее (текущее) значение переменной
i (в данном случае 2).


Два действия при нажатии на кнопку в tkinter
У меня есть следующий код:

class block_class:
    def create_block():
        global blocks_count
        block = PanedWindow(MainRoot, bg = 'blue')
        btn_DELETE = Button(block, text = 'X', command = lambda: block.destroy())
        btn_CONNECT = Button(block, text = 'Connect')
        entr_VALUE = Entry(block)
        block.pack(fill = NONE, expand = 0)
        block.add(btn_DELETE)
        block.add(btn_CONNECT)
        block.add(entr_VALUE)
        blocks_count += 1

Мне нужно чтобы при при нажатии на
btn_DESTROY кроме удаления виджета так же происходило следующее действие -
blocks_count -= 1
Я пробовал создать отдельную функцию, но из-за того что в блок создаётся в другой функции у меня не получилось.
Какими ещё способами можно добиться правильного результата?

class BlockClass:
    def create_block(self):
        self.block_counts = 0
        self.block = PanedWindow(MainRoot, bg = 'blue')
        btn_DELETE = Button(block, text = 'X', command = self.destroyBlock)
        btn_CONNECT = Button(block, text = 'Connect')
        entr_VALUE = Entry(block)
        self.block.pack(fill = NONE, expand = 0)
        self.block.add(btn_DELETE)
        self.block.add(btn_CONNECT)
        self.block.add(entr_VALUE)
        self.blocks_count += 1
    def destroyBlock(self):
        self.block.destroy()
        self.block_counts -= 1


Ошибка name 'print' is used prior to global declaration
Я пытаюсь модернизировать ф-ю print, что бы в случае условия все ф-и print в скрипте писали в файл.
Код:
<code>
def print_to_file(*txt, output_file):
    with open (file, 'w') as f:
        original_print(*txt, file = output_file)

if cond:
    original_print = print
    global print
    print = print_to_file
</code>

Инструкция global должна писаться до обращения к переменной. Это повышает удобность чтения кода, и никак не влияет на исполнение. В данном случае можно написать вот так и ничего не поменяется:
<code>
def print_to_file(*txt, output_file):
    with open (file, 'w') as f:
        original_print(*txt, file = output_file)

if cond:
    global print
    original_print = print
    print = print_to_file
</code>


Python. Colorama. Код выводит числа вместо цвета e.g. 33m 22m 43m 44m etc
Я написал следующий код:

from colorama import *
init()
print(Back.YELLOW + 'hh')

Но он мне выводит это:

[43mhh

Почему не появляется цвет?

Так происходит потому, что Вы, скорее всего, пытаетесь записать данный текст в файл(либо же другой file-like object, который не поддерживает цветной вывод)
Если такой результат виден в терминальной сессии, то просто установите терминал, который поддерживает цветной вывод(например konsole)


Python. Сохранение списка в другую переменную
Есть код:

a = [5, 3, 8]
b = a
b.pop(1)
print(a, b)

Вот вывод:

[5, 8] [5, 8]

Вопрос. Почему я выкидывая второе значение из списка "b" так же выкинул это значение и из списка "a"??
"b = a" означает, что все значения всегда будут идентичны у этих листов?
Как мне тогда сделать "бекап" листа в другой переменной?

Используйте срез списка по всей длине

a = [5, 3, 8]
b = a[:]
b.pop(1)
print(a, b)

или
b = a.copy()


Как помощью pandas перевести все поля DataFrame в строковый тип данных?
Есть двумерный датафрейм X,
X.shape = (N, M).
При использовании
X.apply(str) в строковый тип данных переводятся столбцы целиком, и в результате остается одномерный датафрейм Nx1.
Как применять функцию
str к каждому полю таблицы, а не по столбцам?

Чтобы привести все столбцы к строковому типу данных можно воспользоваться DataFrame.astype():
<code>
X = X.astype(str)
</code>


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

Дима Калинин
Дима Кадиваров
Дима Калашников
4.. и т.д
9.

Как это можно реализовать?

Ну, если по-взрослому, то я рекомендовал бы использовать алгоритм soundex, и модуль fonetika (
pip install fonetika).
Сам код может выглядеть так:

from fonetika.soundex import RussianSoundex
soundex = RussianSoundex(cut_result=True, seq_cutted_len=4, code_vowels=True)

l = ['Колашников', 'Федоров', 'Киркоров', 'Криворуков','Иванов', 'Калашников', 'Петров', 'калашов', 'Циглер', 'калашников', 'Ватсон']

def snd_match(l: list, a: str) -> list:
    snd_heap = [(soundex.transform(x),x) for x in l]
    return [x[1] for x in snd_heap if (soundex.transform(a)[:len(a)+1] in x[0])]

проверяем:

print(snd_match(l, 'Ка')) #['Колашников', 'Калашников', 'калашов', 'калашников']
print(snd_match(l, 'Кол')) # ['Колашников', 'Калашников', 'калашов', 'калашников']
print(snd_match(l, 'Колашов')) # ['Колашников', 'Калашников', 'калашов', 'калашников']
print(snd_match(l, 'Киплинг')) # []
print(snd_match(l, 'Трамп')) # []


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

output = subprocess.check_call(['komodo-13.01-64bit.exe'], shell=True)

Данный код позволяет запустить эту программу. Вопрос в том, как с ней после этого взаимодействовать именно программно?
Так в консоли Python появляется строка, в которую можно писать команды (только вручную, судя по всему) для
komodo-13.01-64bit.exe, и даже будут приходить ответы, но все только визуально. Это никуда не записывается?
Похожий вопрос был на Delphi, но только у меня то не Delphi.

Можно воспользоваться модулем Pexpect. Начиная с вер. 4.0 добавлена (ограниченная) поддержка для Windows:

As of version 4.0, Pexpect can be used on Windows and POSIX systems. However,
pexpect.spawn and
pexpect.run() are only available on POSIX, where the
pty module is present in the standard library. See Pexpect on Windows for more information.

Небольшой пример:

>>> from pexpect.popen_spawn import PopenSpawn
>>> from pexpect import EOF,TIMEOUT
>>>
>>> p = PopenSpawn ('python -iu')
>>> p.expect (['>>> ', TIMEOUT, EOF], timeout=1)
0
>>> p.before.rstrip ().decode ()
'Python 3.8.3 (tags/v3.8.3:6f8c832, May 13 2020, 22:37:02) [MSC v.1924 64 bit (AMD64)] on win32\nType "help", "copyright", "credits" or "license" for more information.'
>>> p.sendline ('1+2')
5
>>> p.expect (['>>> ', TIMEOUT, EOF], timeout=1)
0
>>> p.before.rstrip ().decode ()
'3'
>>> p.sendeof ()
>>> p.wait ()
0

Возможно также и с subprocess.Popen, но будет несколько сложнее:

>>> from subprocess import Popen, PIPE, STDOUT
>>>
>>> p = Popen (['python', '-iu'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
>>> p.stdout.readline ().rstrip ().decode ()
'Python 3.8.3 (tags/v3.8.3:6f8c832, May 13 2020, 22:37:02) [MSC v.1924 64 bit (AMD64)] on win32'
>>> p.stdout.readline ().rstrip ().decode ()
'Type "help", "copyright", "credits" or "license" for more information.'
>>> p.stdin.write (b'1+2\n')
4
>>> p.stdin.flush ()
>>> p.stdout.readline ().rstrip ().decode ()
'>>> 3'
>>> p.stdin.close ()
>>> p.wait ()
0


Как в Python удалить дубли списка по вхождению подстроки?
Подскажите пожалуйста как решить следующую задачу.
Есть список строк, каждая строка условно делится на две части по разделителю точка с запятой.
В данном списке, мне нужно удалить дубли строк именно по первой части строки, до точки с запятой.
То есть, на входе имеем список вида:

[string1;drgedsgg,
string1;fdhvbvcbc,
string1;cfbddfd,
string2;cbgfghfh,
string2;cbdfdfddd,
string2;hjmggghhng,
string3;fgbfdbcccfdf,
string3;dfgdgfd,
string3;gdffgghgfhggh]

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

[string1;drgedsgg,
string2;hjmggghhng,
string3;fgbfdbcccfdf]

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

sortedList = []
alreadyUsed = []
for item in list:
    isUsed = False
    for used in alreadyUsed:
        if used == item.split(';')[0]:
            isUsed = True
            break
    if not isUsed:
        sortedList.append(item)
        alreadyUsed.append(item.split(';')[0])

print(sortedList)
# ['string1;drgedsgg', 'string2;cbgfghfh', 'string3;fgbfdbcccfdf']

Если нужны последние строки из дублированных, просто в начале отрази начальный список list.

list.reverse()


Арифметические операции между двумя dt.time
имеется два поля:

a = '20-10-2019 12:11:00'
b = '10:00:05'

необходимо выполнить операцию

a.time() - b, но возникает ошибка:

unsupported operand type(s) for -: 'datetime.time' and
  'datetime.time'.

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

import pandas as pd

df = pd.DataFrame([['C102', 'Stage1','20-10-2019 12:11:00','10:00:05'], ['C116','Stage1','16-08-2019 16:12:17','6:10:12'], ['D285','Stage2','27-09-2019 15:47:22','13:00:56']], columns=['IDOper', 'Stage','a','b'])`

функция должна сработать по примеру:

def Time(row):
    row['c']=row['a'].time() - row['b']

df.apply(Time, axis = 1)

Если вам нужно получить в качестве результата разницу во времени без компонента даты (т.е. объект типа
timedelta):

df["res"] = pd.to_timedelta(df["a"].dt.strftime('%H:%M:%S')) \
            - pd.to_timedelta(df['b'])

если же столбец
a содержит строки, а не
datetime то:

df["res"] = pd.to_timedelta(df["a"].str.split().str[1]) \
            - pd.to_timedelta(df['b'])

результат:

In [134]: df
Out[134]:
  IDOper   Stage                   a         b      res
0   C102  Stage1 2019-10-20 12:11:00  10:00:05 02:10:55
1   C116  Stage1 2019-08-16 16:12:17   6:10:12 10:02:05
2   D285  Stage2 2019-09-27 15:47:22  13:00:56 02:46:26

In [135]: df.dtypes
Out[135]:
IDOper             object
Stage              object
a          datetime64[ns]
b                  object
res       timedelta64[ns]
dtype: object


'QLineEdit' object has no attribute 'setEchoMod'(проблема решена)
не работает код, выдаёт ошибку из заголовка

import sys
from PyQt5 import QtCore, QtWidgets
from qline import Ui_MainWindow

class win(QtWidgets.QMainWindow):
    def __init__(self):
        super(win, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.ui.lineEdit.setText('Hi man')
        self.ui.lineEdit_2.setMaxLength(10)
        self.ui.lineEdit_3.setEchoMod(QtWidgets.QLineEdit.Password)
        self.ui.lineEdit_4.setReadOnly(True)
        self.ui.lineEdit_5.setStyleSheet('color: rgb(28, 43, 255);')
        self.ui.lineEdit_6.setStyleSheet('background-color: rgb(28, 43, 255);')

app = QtWidgets.QApplication([])
application = win()
application.show()

sys.exit(app.exec())

Проблемная вот эта строка

self.ui.lineEdit_3.setEchoMod(QtWidgets.QLineEdit.Password)

Что делать?

У вас опечатка:
setEchoMod вместо
setEchoMode.
Вот так правильнo:

import sys
from PyQt5 import QtCore, QtWidgets
from qline import Ui_MainWindow

class win(QtWidgets.QMainWindow):
    def __init__(self):
        super(win, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.ui.lineEdit.setText('Hi man')
        self.ui.lineEdit_2.setMaxLength(10)
        self.ui.lineEdit_3.setEchoMod(QtWidgets.QLineEdit.Password)
        self.ui.lineEdit_4.setReadOnly(True)
        self.ui.lineEdit_5.setStyleSheet('color: rgb(28, 43, 255);')
        self.ui.lineEdit_6.setStyleSheet('background-color: rgb(28, 43, 255);')

app = QtWidgets.QApplication([])
application = win()
application.show()

sys.exit(app.exec())


Pandas rolling window: как использовать min_periods для конца списка?
Как применить
min_periods к концу списка.
Пример:

s = pd.series(np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))

Результат
s.rolling(4, min_periods=1) будет:

1
1 2
1 2 3
1 2 3 4
2 3 4 5
...
7 8 9 10

Но хотелось бы получить:

1 2 3 4
2 3 4 5
...
7 8 9 10
8 9 10
9 10
10

Порядок значений важен.
Есть ли возможность получить такой результат используя функцию
rolling?
Или же имеется иная функция с таким функционалом?

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

def my_sum(ser):
     print(ser.to_list())
     return ser.sum()

In [92]: s[::-1].rolling(4, min_periods=1).apply(lambda x: my_sum(x[::-1]), raw=False)[::-1]
[10.0]
[9.0, 10.0]
[8.0, 9.0, 10.0]
[7.0, 8.0, 9.0, 10.0]
[6.0, 7.0, 8.0, 9.0]
[5.0, 6.0, 7.0, 8.0]
[4.0, 5.0, 6.0, 7.0]
[3.0, 4.0, 5.0, 6.0]
[2.0, 3.0, 4.0, 5.0]
[1.0, 2.0, 3.0, 4.0]
Out[92]:
0    10.0
1    14.0
2    18.0
3    22.0
4    26.0
5    30.0
6    34.0
7    27.0
8    19.0
9    10.0
dtype: float64


Как лучше получить модель Django, зная ее название?
У меня есть 2 файла с моделями. Пусть будет
models_a и
models_b. И есть функция, которая выполняет похожие действия с этими моделями. Поэтому функция на все модели одна. К какой именно модели нужно применить эти действия, я узнаю по названию модели, которое попадает в функцию в виде строки. И мне нужно по этому названию получить нужную модель. Я сделал это вот так

from models_a import *
from models_b import *

def my_func(model_name):
    model = globals().get(model_name)
    qs = model.objects.all()

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

Способ 1

import sys

from django.apps import apps

def my_func(request, model_name):
    Model = apps.get_model(app_label=sys.modules[resolve(request.path_info).func.__module__].__package__, model_name=model_name)

Способ 2 - работает намного быстрее и является предпочтительным.

Добавить в
<app>.urls.py строку

app_name='<app_name>'

В функции

from django.apps import apps

def my_func(request, model_name):
    Model = apps.get_model(request.resolver_match.app_name, model_name)

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


Как еще можно задать default-значение переменной кроме try-except?
Объект
obj - это инстанс какой-то джанго-модели. Допустим, у него есть поле
prop, которое по идее должно быть связано с другой моделью, но может также быть
None. Моя задача - записать в переменную
var поле
target второй связанной модели.

var = obj.prop.target

Если поле
prop окажется равно
None, то все сломается, так как у
None нет поля
target. В этом случае я хочу записать в переменную
var значение
None. В принципе я могу это сделать так

try:
    var = obj.prop.target
except AttributeError:
    var = None

Нет ли какого-нибудь другого способа это сделать, наподобие
setdefault у  словарей?

Воспользуйтесь встроенной функцией
getattr(object, name[, default]):

var = getattr(obj.prop, "target", None)

Выдержка из документации:

getattr(object, name[, default])

Return the value of the named attribute of object. name must be a
  string. If the string is the name of one of the object’s attributes,
  the result is the value of that attribute. For example,
getattr(x, 'foobar') is equivalent to
x.foobar. If the named attribute does not
  exist, default is returned if provided, otherwise
AttributeError is
  raised.


Дата и время. Угол солнца над горизинтом
Определить угол солнца над горизонтом, зная время суток. Исходные данные: солнце встает на востоке в 6:00, что соответствует углу 0 градусов. В 12:00 солнце в зените, а значит угол = 90 градусов. В 18:00 солнце садится за горизонт и угол равен 180 градусов. В случае, если указано ночное время (раньше 6:00 или позже 18:00), функция должна вернуть фразу "I don't see the sun!".
<code>
from datetime import datetime
def sun_angle(time):
    #replace this for solution
    list_fortime=[]   #пустой список для значений
    dt = datetime.strptime(time, '%H:%M')   #перевод из строки
    tt=datetime.timetuple(dt)   # struct_time
    for it in tt:
        list_fortime.append(it) # заполняем новый список
    if list_fortime[3]>=6 and list_fortime[3]<=18:
        time_1=(list_fortime[3]-6)*15 #1 час= 15 градусов
        time_2= (str(list_fortime[4])+str(list_fortime[5]) #1 минута 0.25 градуса
        time_3 = int(time_2) #тут ошибка , возможно с преобразованием типов ,подскажите что не так
        return time_1+time_3
    else:
        return 'I don\'t see the sun!'

    #return tt
    #if tim[]>=6
    #return time

if __name__ == '__main__':
    print("Example:")
    print(sun_angle("07:00"))

    #These "asserts" using only for self-checking and not necessary for auto-testing
    assert sun_angle("07:00") == 15
    assert sun_angle("01:23") == "I don't see the sun!"
</code>
подскажите где ошибаюсь и альтернативный способ.

Вы используете что-то уж очень сложное. Несколько структур данных, и прочее. Нужно провести анализ задачи: время должно быть в диапазоне от XXX Минут до YYY минут.
Первое решение

def sun_angle(time):
    #replace this for solution
    list_fortime=[]   #пустой список для значений
    dt = datetime.strptime(time, '%H:%M')   #перевод из строки
    #Восход и закат в минутах
    startOfSun=6*60
    endOfSun=18*60
    #переводим время в минуты
    tt=dt.time().hour*60+dt.time().minute
    #Если время в диапазоне, то считаем угол как долю от дуги окружности.
    if tt in range (startOfSun,endOfSun+1):
        return 180*(tt-startOfSun)/(endOfSun-startOfSun)
    else:
        return 'I don\'t see the sun!'

И решение с использованием только
datetime

from datetime import datetime
def sun_angle(startSun,endSun,time):
    dt = datetime.strptime(time, '%H:%M')   #перевод из строки
    startOfSun=datetime.strptime(startSun, '%H:%M')   #перевод из строки
    endOfSun=datetime.strptime(endSun, '%H:%M')   #перевод из строки

    #Если время в диапазоне, то считаем угол как долю от дуги окружности.
    if dt>=startOfSun and dt<=endOfSun:
        # переводим время в минуты
        tt = dt.time().hour * 60 + dt.time().minute
        tStart=startOfSun.time().hour * 60 + startOfSun.time().minute
        tEnd = endOfSun.time().hour * 60 + endOfSun.time().minute
        return 180*(tt-tStart)/(tEnd-tStart)
    else:
        return 'I don\'t see the sun!'

if __name__ == '__main__':
    print("Example:")
    print(sun_angle("6:00","18:00","12:00"))


как сделать что бы у Имя,Фамилия можно было вводить только буквы,а у Номер телефона только цифры?
<code>
def input_characters(self):
        self.last_name = input("Введите фамилию: ")
        self.name = input("Введите имя: ")
        self.phone_number = input("Введите номер телефона: ")
</code>

#!/usr/bin/env python3
#-*- coding: utf-8 -*-
import re

while True:
    last_name = input('Введите фамилию: ')
    if not re.findall(r'\d', last_name):
        print("Отлично")
        break
    else: print("Данные введены неверно, попробуйте еще раз")

while True:
    name = input('Введите имя: ')
    if not re.findall(r'\d', name):
        print("Отлично")
        break
    else: print("Данные введены неверно, попробуйте еще раз")

while True:
    number = input('Введите номер телефона: ')
    if not re.findall(r'\D', number):
        print("Отлично")
        break
    else: print("Данные введены неверно, попробуйте еще раз")


Разделить латиницу и киррилицу
Есть входная строка типа:
"hello мир пока world"
Нужно две строки:
"hello world",
"мир пока".
Как такое на питоне сделать проще?

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

import re

In [114]: s = "hello мир, пока world! 123 смешаnnie sloва"

In [115]: latin_str = ' '.join(re.findall(r"\b([a-zA-Z]+)\b", s))

In [116]: cyrillic_str = ' '.join(re.findall(r"\b([а-яА-ЯёЁ]+)\b", s))

In [117]: latin_str
Out[117]: 'hello world'

In [118]: cyrillic_str
Out[118]: 'мир пока'

UPDATE:

def parse_words(string_):
    lat = "a-zA-Z"
    cyr = "а-яА-ЯёЁ"
    all_words = re.findall(rf"\b([{lat}{cyr}]+)\b", string_)
    latin_words = re.findall(rf"\b([{lat}]+)\b", string_)
    cyrillic_words = re.findall(rf"\b([{cyr}]+)\b", string_)
    mixed_words = set(all_words) - (set(latin_words) | set(cyrillic_words))
    # return " ".join(latin_words), " ".join(cyrillic_words), " ".join(mixed_words)
    return tuple(map(" ".join, (latin_words, cyrillic_words, mixed_words)))

latin_words, cyrillic_words, mixed_words = parse_words(s)

результат:

In [145]: latin_words
Out[145]: 'hello world'

In [146]: cyrillic_words
Out[146]: 'мир пока'

In [147]: mixed_words
Out[147]: 'смешаnnie sloва'


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

from collections import Counter

word = 'приоритет'
c = Counter(word)
print(c.most_common(1)[0][0])

Т.к. метод
most_common возвращает список самых частых значений (даже если мы запросили одно самое частое значение), то нужно взять первый элемент (для этого нужен первый
[0]). Каждый элемент в этом списке - пара
(элемент, количество), поэтому нужно взять первый элемент еще раз.
Вообще, в слове "приоритет" есть 3 буквы, которые встречаются по два раза (р, и, т), выведет только одну из них (у меня вывело "р").
Вариант решения без использования
Counter:

word = 'приоритет'

# Подсчитываем количество вхождений каждой буквы в слове
c = dict()

for letter in word:
    c[letter] = c.get(letter, 0) + 1
    # .get(letter, 0) вернет значение по ключу letter или 0, если такого ключа нет

print(c)  # {'п': 1, 'р': 2, 'и': 2, 'о': 1, 'т': 2, 'е': 1}

# Выводим ключ, которому соответствует наибольшее из значений
# (точнее, один из таких ключей)
print(max(c.items(), key=lambda item: item[1])[0])  # р


В чем разница при удалении элементов списка в цикле со срезом и без
Я знаю, что такое срезы и пользуюсь ими, но не понимаю принципиальную разницу в этих двух примерах, почему со срезом удается удалить список полностью? Окей. У нас меняется индекс во время одновременной итерации и удаления, из-за этого такие последствия. НО как срез решает эту проблему?
<code>
>>> somelist = range(10)
>>> for x in somelist:
...     somelist.remove(x)
>>> somelist
[1, 3, 5, 7, 9]

>>> somelist = list(range(10))
>>> for x in somelist[:]:
...     somelist.remove(x)
>>> somelist
[]
</code>

Нельзя изменять (уменьшать / увеличивать) число элементов списка во время итерирования по нему. Это приведет к неожиданным и неприятным эффектам.
Пример:

In [71]: items = [0,1,2,3,4,5]

In [72]: for x in items:
    ...:     items.remove(x)
    ...:     print(x, items)
    ...:
0 [1, 2, 3, 4, 5]
2 [1, 3, 4, 5]
4 [1, 3, 5]

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

In [82]: items = [0,1,2,3,4,5]

In [83]: items_iter = iter(items)  # эмуляция цикла `for x in items:`

In [84]: next(items_iter)
Out[84]: 0

In [85]: items.remove(0)

In [86]: print(items)
[1, 2, 3, 4, 5]

In [87]: next(items_iter)
Out[87]: 2

In [88]: items.remove(2)

In [89]: print(items)
[1, 3, 4, 5]

In [90]: next(items_iter)
Out[90]: 4

In [91]: items.remove(4)

In [92]: print(items)
[1, 3, 5]

когда вы используете
for x in somelist[:]: - вы итерируетесь по копии и соответственно удаление элементов из оригинального списка
somelist не влияет на итерирование по копии.
Можно убедиться что
somelist и
somelist[:] - это разные и независимые  объекты:

In [93]: id(somelist)
Out[93]: 2487734832008

In [94]: id(somelist[:])
Out[94]: 2487700013128

In [95]: somelist is somelist[:]
Out[95]: False

Совет: никогда не изменяйте число элементов списка во время итерирования по нему дабы избежать подобных эффектов


Получить сбалансированную выборку Pandas
Есть выборка:

A  B   C
423 42  3
423 42  3
423 4432    3
4423    432 4
43  332 4
2   42  4
32  44  4
22  3344    2
234 442 2

Нужно получить настраиваемую выборку с N числов строк для каждого уникального значения из столбца С:
Например, получить по три строки с значением 3,4 в столбце С. то есть получим:

A  B   C
423 42  3
423 42  3
423 4432    3
43  332 4
2   42  4
32  44  4
Или же получить максимально возможную сбалансированную выборку, то есть по два элемента из каждого значения, т.к. "2" встретилась лишь два раза. Получим нечто такое:

A  B   C
423 42  3
423 42  3
4423    432 4
43  332 4
22  3344    2
234 442 2
Причем выбор двух строк с другими значениями осуществляется случайно


Вывод русских символов из pd.Timestamp().month_name()
В атрибуте
month_name() объекта
Timestamp есть аргумент
locale=None, где
None по умолчанию означает английский.
При заведении значения аргумента
Russian выдается непонятный шифр. Код и результаты ниже:

d = pd.to_datetime('12.12.12')
print(d.month_name(locale='Russian'))

>>> Äåêàáðü

Работа в Jupyter Notebook. Какие предустановки надо сделать, чтобы решить проблему?

Надо установить правильную
locale:

import sys
import locale

def set_rus_locale():
    locale.setlocale(
        locale.LC_ALL,
        'rus_rus' if sys.platform == 'win32' else 'ru_RU.UTF-8')

Примеры:

In [4]: d = pd.to_datetime(['12.12.12','12.01.12','12.03.12','12.05.12'], dayfirst=True)

locale по умолчанию:

In [5]: d.month_name(locale='Russian')
Out[5]: Index(['Äåêàáðü', 'SSíâàðü', 'Ìàðò', 'Ìàé'], dtype='object')

locale='Russian':

In [6]: set_rus_locale()

In [7]: d.month_name(locale='Russian')
Out[7]: Index(['Декабрь', 'Январь', 'Март', 'Май'], dtype='object')


Вложенные прямоугольники python [закрыт]

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

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

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

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

Нужна помощь в решении задачи:
Заполните прямоугольный массив вложенными прямоугольниками. Клетки, находящиеся на краях прямоугольника, заполняются числом 0, соседние с ними клетки заполняются числом 1, соседние с ними — числом 2 и т.д.
<code>
Пример для n=6m=9
0 0 0 0 0 0 0 0 0
0 1 1 1 1 1 1 1 0
0 1 2 2 2 2 2 1 0
0 1 2 2 2 2 2 1 0
0 1 1 1 1 1 1 1 0
0 0 0 0 0 0 0 0 0
</code>

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

Текущего номера столбца (от 0 до m - 1)
Текущего номера строки (от 0 до n - 1)
Текущего номера столбца, если считать с правого края (m - обычный номер столбца - 1)
Текущего номера столбца, если считать снизу (n - обычный номер строки - 1)

Минимальное значение можно найти с помощью стандартной функции
min, а матрицу создать с помощью двойного спискового включения (можно и с помощью двух списков for, но так будет длиннее).

n, m = 6, 9

matrix = [[min(x, y, m - x - 1, n - y - 1) for x in  range(m)] for y in range(n)]

for line in matrix:
    print(line)


Интегральные изображения open cv
По данной теме очень мало информации в интернете, из полезного только документация, которая особо не помогает. По заданию, используя модуль open cv, я должен вычислить интегральное изображение, здесь проблем не возникло.

image=cv2.imread("dom.jpg",cv2.IMREAD_GRAYSCALE)
summ,sqsumm,titled= cv2.integral3(image)

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

 [[      0        0        0 ...        0        0        0]
 [       0      253      506 ...   114947   115201   115455]
 [       0      506     1012 ...   229919   230427   230935]
 ...
 [       0    36688    71843 ... 18750712 18800547 18851034]
 [       0    36751    71953 ... 18818463 18868519 18919227]
 [       0    36812    72069 ... 18887007 18937284 18988214

]]
Исходя из этого первый вопрос:
Является ли это окончательным ответом к заданию "найдите интегральное изображение"? Или можно сделать какие-либо еще преобразования, чтобы сделать из него картинку и отобразить через cv2.imshow?
Далее по заданию требуется, используя свойства интегрального изображения, найти горизонтальные и вертикальные линии в исходном изображении. Из этого второй вопрос:
Каким свойством я должен воспользоваться, чтобы получить нужный результат?

integral3 использовать ни к чему, т.к. для получения суммы достаточно просто integral
Чтобы отрисовать такой массив, его можно отнормировать, умножив на коэффициент
MaxFormatValue / TheLastElement, где
MaxFormatValue соответствует максимальному значению для используемого формата - например, 1.0 для матрицы формата 32f, или 255 для байтовой. Последний элемент-  максимальное значение в интегральном изображении, будет, таким образом, белым.
Для выделения горизонтальных линий нужно найти в правом столбце большие ступеньки - для белых линий, или слишком малое изменение - для чёрных.
Аналогично с нижней строкой для вертикальных линий.


Как узнать возможные значения параметров классификатора в scikit-learn из Jupyter Notebook?
Например, мы создали классификатор:

from sklearn import linear_model
classifier = linear_model.SGDClassifier()

Теперь мы можем узнать параметры через:

classifier.get_params().keys()

Параметр
loss, например, может принимать значения
hinge,
log и другие.
Как узнать эти возможные значения из Jupyter Notebook?

В Jupyter / iPython можно вызвать функцию / метод / конструктор класса со знаком вопроса, чтобы получить соответствующий
Docstring.

Пример:

In [22]: linear_model.SGDClassifier?
Init signature:
linear_model.SGDClassifier(
    loss='hinge',
    penalty='l2',
    alpha=0.0001,
    l1_ratio=0.15,
    fit_intercept=True,
    max_iter=1000,
    tol=0.001,
    shuffle=True,
    verbose=0,
    epsilon=0.1,
    n_jobs=None,
    random_state=None,
    learning_rate='optimal',
    eta0=0.0,
    power_t=0.5,
    early_stopping=False,
    validation_fraction=0.1,
    n_iter_no_change=5,
    class_weight=None,
    warm_start=False,
    average=False,
)

Docstring:
Linear classifiers (SVM, logistic regression, a.o.) with SGD training.

...

Read more in the :ref:`User Guide <sgd>`.

Parameters
----------
loss : str, default: 'hinge'
    The loss function to be used. Defaults to 'hinge', which gives a
    linear SVM.

    The possible options are 'hinge', 'log', 'modified_huber',
    'squared_hinge', 'perceptron', or a regression loss: 'squared_loss',
    'huber', 'epsilon_insensitive', or 'squared_epsilon_insensitive'.

    The 'log' loss gives logistic regression, a probabilistic classifier.
    'modified_huber' is another smooth loss that brings tolerance to
    outliers as well as probability estimates.
    'squared_hinge' is like hinge but is quadratically penalized.
    'perceptron' is the linear loss used by the perceptron algorithm.
    The other losses are designed for regression but can be useful in
    classification as well; see SGDRegressor for a description.
...


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

n = int(input())

Ввожу число и у меня есть 2 команды:

+ 1
* 2

Начальное значение
a = 1, так вот с помощью этих команд за минимальное кол-во ходов нужно получить
n, не подскажите как это сделать
Протокол:

Input        Output
  11            5
   3            2

*В первом примере:

1 * 2 = 2
2 * 2 = 4
4 + 1 = 5
5 * 2 = 10
10 + 1 = 11 #  5 ходов

*Во втором примере:

1 * 2 = 2
2 + 1 = 3 #  2 хода

n = 11

counter = 0
while n > 1:
    if n & 0x1 == 0:
        n //= 2
    else:
        n -= 1
    counter += 1

print(counter)  # 5

Можно с выводом всех вычислений:

n = 10
a = 1
stack = []

counter = 0
while n > a:
    if n & 0x1 == 0:
        n //= 2
        stack.append(2)
    else:
        n -= 1
        stack.append(1)
    counter += 1

print(counter)

while stack:
    operator = stack.pop()
    if operator == 2:
        print('{0:d} * 2 = {1:d}'.format(a, a * 2))
        a *= 2
    else:
        print('{0:d} + 1 = {1:d}'.format(a, a + 1))
        a += 1

# 4
# 1 * 2 = 2
# 2 * 2 = 4
# 4 + 1 = 5
# 5 * 2 = 10


Ошибка в регулярном выражении - nothing to repeat at position
Есть DF:

A
primer № 5432/5433`

Нужно получить
№ 5432/5433.
Использую:

patterns = ("№\s+\d{4}\/\d{4}")
pat = "({})".format("|".join(patterns))
res = df['A'].str.extract(pat)`

Но получаю ошибку:

nothing to repeat at position 7

, хотя на RegEX все хорошо. В чем ошибка?


Как получить цвет элемента QLabel (или любого другого) в PyQt5?
Стоит такая задача:
Установить цвет background-color на QLabel при помощи QColorDialog. После нужно проверить, имеет ли QLabel, например, красный или зелёный цвета. Проблема состоит в том, что я не знаю, как мне определить текущий цвет "бэкграунда" виджета, чтобы в последующем сравнивать его.
P.S. Я знаю, что можно после установки цвета просто использовать color.name(), ведь  его значение и будет текущим цветом. Но с этим вариантом возникали проблемы, поэтому, я хотел бы узнать, возможно ли получить текущий background-color виджета QLabel в PyQt5?

Вопрос решён!
label.palette().color(QPalette.Window) Спасибо @Alexander Chernin ^_^

Вот так:
<code>
label.palette().color(QPalette.Window)
</code>


Добавить строки из одного DataFrame в другой
Есть два датафрейма с одинаковыми названиями столбцов, но с разными данными:

var1    var2
Fger    EEE
ffs     ss
DEE     aq#

И второй:

var1    var2
1       1
2       2

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

var1    var2
Fger    EEE
ffs     ss
DEE     aq#
1       1
2       2

Воспользуйтесь pd.concat():

res = pd.concat([df1, df2], ignore_index=True)

или DataFrame.append(another):

res = df1.append(df2)

PS
pd.concat() выгоднее использовать для объединения 3+ фреймов

Примеры:
Исходные фреймы:

In [59]: df1
Out[59]:
   var1 var2
0  Fger  EEE
1   ffs   ss
2   DEE  aq#

In [60]: df2
Out[60]:
   var1  var2
0     1     1
1     2     2

In [61]: res = pd.concat([df1, df2], ignore_index=True)

In [62]: res
Out[62]:
   var1 var2
0  Fger  EEE
1   ffs   ss
2   DEE  aq#
3     1    1
4     2    2

In [73]: res = df1.append(df2)

In [74]: res
Out[74]:
   var1 var2
0  Fger  EEE
1   ffs   ss
2   DEE  aq#
0     1    1
1     2    2


Вызов функции в Pandas
Есть некий датафрейм:

var1    var2
Fger    EEE
ffs     ss
DEE     aq#

Нужно провести некие преобразования, делаю это в функции:

def Func(df):
    df['var1']=df['var1'].str.lower()
    df['var2']=df['var2'].str.lower()
    df = df[df['var2']!='eee']

На выходе получаю:

    var1    var2
0   fger    eee
1   ffs     ss
2   dee     aq#

То есть последняя строка не сработала, почему такое может быть? И когда пытаюсь импортировать данную функцию, то выдает ошибку
name 'df' is not defined

df[df['var2']!='eee'] вернёт новый DataFrame объект, который удалится после вызова функции.
Демонстрация:

def Func(df):
    df['var1']=df['var1'].str.lower()
    df['var2']=df['var2'].str.lower()
    print("id(df) before : ", id(df))
    df = df[df['var2']!='eee']
    print("id(df) after  : ", id(df))

In [44]: id(df)
Out[44]: 2344845817448

In [45]: Func(df)
id(df) before :  2344845817448
id(df) after  :  2344850234840

Гораздо более правильно писать такие функции, которые возвращают результат своей работы при помощи оператора
return:

def fun(df):
    df.loc[:, ["var1", "var2"]] = df[["var1", "var2"]].apply(lambda x: x.str.lower())
    df = df.query("var2 != 'eee'")
    return df

In [54]: df
Out[54]:
   var1 var2
0  Fger  EEE
1   ffs   ss
2   DEE  aq#

In [55]: df = fun(df)

In [56]: df
Out[56]:
  var1 var2
1  ffs   ss
2  dee  aq#


Разбиение данных с помощью resample
У меня есть набор двухдневных данных, то есть 1.03.2019, 3.03.2019 и т.д. Моя задача -
downsample этих данных до дневных с помощью
pandas. Я решил сделать это с помощью
resample('D').
Пример входных данных:

+------------+------------+-------------+-------+
|    Date    | OutletName | ProductName | Sales |
+------------+------------+-------------+-------+
| 2019-01-01 | A          | butter      | 3.2   |
| 2019-01-03 | A          | butter      | 5     |
| 2019-01-01 | B          | bread       | 12    |
| 2019-01-01 | A          | bread       | 2     |
| 2019-01-03 | B          | butter      | 3.4   |
| 2019-01-05 | A          | butter      | 4     |
| 2019-01-05 | A          | bread       | 3.9   |
| 2019-01-05 | B          | butter      | 0.5   |
| 2019-01-05 | B          | bread       | 1.7   |
| ...        |            |             |       |
+------------+------------+-------------+-------+

Немного про сами данные. Это таблица, в которой данные могут быть разбиты на уникальные ячейки по столбцам
OutletName и
ProductName. То есть, когда мы выделяем отдельный
DataFrame с помощью
df[(df['OutletName'] == 'A') & (df['ProductName'] == 'butter')], то получаем набор данных с неповторяющейся, уникальной в этом
DataFrame датой. Из-за этого я решил вначале разбить данные по отдельным ячейкам, применить в них
.resample('D').pad(1) для дублирования информации, а затем разделить столбец
Sales пополам (чтобы общий объём продаж сохранился). Мой код:

cells = []
i = 0
for outlet in df['OutletName'].unique():
    for product in df[df['OutletName'] == outlet]['ProductName'].unique():
        temp = df[(df['OutletName'] == outlet) &
                  (df['ProductName'] == product)].resample('D').pad(1)

        temp['Sales'] /= 2
        i += 1

        cells.append(temp)

И затем собираем все в один
DataFrame:

df_final = pd.DataFrame()
for cell in cells:
    df_final = pd.concat([df_final, cell], axis=0, sort=False)

UPDATE v2: точный пример того, что я хочу получить на выходе по этой таблице:

+------------+------------+-------------+-------+
|    Date    | OutletName | ProductName | Sales |
+------------+------------+-------------+-------+
| 2019-01-01 | A          | butter      | 1.6   |
| 2019-01-02 | A          | butter      | 1.6   |
| 2019-01-03 | A          | butter      | 2.5   |
| 2019-01-04 | A          | butter      | 2.5   |
| 2019-01-05 | A          | butter      | 2     |
| 2019-01-06 | A          | butter      | 2     |
| 2019-01-01 | A          | bread       | 1     |
| 2019-01-02 | A          | bread       | 1     |
| 2019-01-05 | A          | bread       | 1.95  |
| 2019-01-06 | A          | bread       | 1.95  |
| 2019-01-03 | B          | butter      | 1.7   |
| 2019-01-04 | B          | butter      | 1.7   |
| 2019-01-05 | B          | butter      | 0.25  |
| 2019-01-06 | B          | butter      | 0.25  |
| 2019-01-01 | B          | bread       | 6     |
| 2019-01-02 | B          | bread       | 6     |
| 2019-01-05 | B          | bread       | 0.85  |
| 2019-01-06 | B          | bread       | 0.85  |
| ...        |            |             |       |
+------------+------------+-------------+-------+

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


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

ids = ["a", "b", "c", "a", "a", "d", "c"]

fix_duplicates(ids) == ['a', 'b', 'c', 'a_1', 'a_2', 'd', 'c_1']

Я начала решать через
for :

 def fix_duplicates(ids):
    for i in range(len(ids)):
        if ids[i] == ids[i]:
            s = ids[i] + '_' + '1'
    return s

 fix_duplicates(ids)

Но есть следующие проблемы:

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

смотрим, сколько раз до текущего встречался такой же, и добавляем суффикс, если был хотя бы раз
<code>
def fix_duplicates(ids):
    res = []
    for i,v in enumerate(ids) :
        c = ids[:i].count(v)
        if  c:
            res.append(v+'_'+str(c))
        else:
            res.append(v)
    return res
</code>


Помогите понять в чем ошибочка
Пишу функцию, которая на вход принимает число, а возвращает названия цифр этого числа на английском, например: code_number(201) => 'two zero one'
Вот мой код:
<code>
description = {1: 'one',
               2: 'two',
               3: 'three',
               4: 'four',
               5: 'five',
               6: 'six',
               7: 'seven',
               8: 'eight',
               9: 'nine',
               0: 'zero'}

def code_number(num):
    sss = str(num)
    ss = sss.split()
    for x in sss:
        s = description.get(ss)
    return s(ss)
</code>

вы неправильно разбили строку на символы, конструкция
split() делит по разделителю, а вы его не указали.

def code_number(num):
    description = {1: 'one',
                   2: 'two',
                   3: 'three',
                   4: 'four',
                   5: 'five',
                   6: 'six',
                   7: 'seven',
                   8: 'eight',
                   9: 'nine',
                   0: 'zero'}
    stroke = [s for s in str(num)]
    return ' '.join([description[int(letter)] for letter in stroke])


df вывести элементы колонки colname со значениями меньше 50 или больше 150
Как в датафрейме df вывести элементы колонки colname (числового типа) со значениями меньше 50 или больше 150?
Необходимо получить что-то вроде:

df['colname'][(df['colname']<50)&(df['colname']>150)]

Но этот код выдает

Series([], Name: col1, dtype: int64)

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

df.query("colname < 50 or colname > 150")["colname"]

или так:

df.query("not (50 <= colname <= 150)")["colname"]

или поменяйте в вашем коде
& -->
|:

df.loc[(df["colname"]<50) | (df["colname"]>150), "colname"]

Примеры:

In [7]: df
Out[7]:
   colname       val
0       40  0.895735
1       60  0.073733
2       80  0.832768
3      100  0.249050
4      120  0.640059
5      140  0.017456
6      160  0.921873

In [8]: df.query("colname < 50 or colname > 150")["colname"]
Out[8]:
0     40
6    160
Name: colname, dtype: int64

In [11]: df.query("not (50 <= colname <= 150)")["colname"]
Out[11]:
0     40
6    160
Name: colname, dtype: int64

In [10]: df.loc[(df["colname"]<50) | (df["colname"]>150), "colname"]
Out[10]:
0     40
6    160
Name: colname, dtype: int64


Нечетные числа на отрезке

Даны два целых числа,
A и
B.
Необходимо вывести все нечетные числа на отрезке от
А до
B.
UPD: Использовать инструкцию
if запрещено!
Входные данные:
На вход программе подаются два целых числа:
A и
B (
A ≤
B), по одному в строке
Выходные данные:
Вывести через пробел все нечетные числа на заданном отрезке

Входные данные:

1
10

Выходные данные:

1 3 5 7 9

Мой код не всегда работает: например, если
A - отрицательное и чётное.
Код:

a = int(input())
b = int(input())

for i in range(a - (a + 1) % 2, b - b % 2, 2):
    print(i, end=' ')

Чтобы из четного числа получить нечетное больше на единицу применим побитовое ИЛИ с единицей:
a|1. Далее обычный цикл от а до б через 2:

a = int(input())
b = int(input())
for i in range(a|1, b+1, 2): # +1, чтобы попало b, если нечётное
    print(i, end=' ')


В чём заключается ошибка DetailView is missing a QuerySet
В ходе изучения учебника Django 2.1 возникла ошибка. Нужно написать контроллер DetailView для выведения страницы со сведениями о выбранном объявлении, и как только нажимаешь на ссылку с этими сведениями выдаёт ошибку StoryDetailView is missing a QuerySet. Как это исправить.
Вот код файлов:

views.py
from .models import Story, Rubric
from django.views.generic.detail import DetailVie

class StoryDetailView(DetailView):
models = Story

def get_context_data(self, *args,**kwargs):
    context=super().get_context_data(*args,**kwargs)
    context['rubrics']=Rubric.objects.all()
    return context

urls.py
from .views import add_and_save, StoryDetailView

urlpatterns = [
    path('detail/<int:pk>/',StoryDetailView.as_view(), name='detail'),

bb_detail.html
{% extends 'layout/basic.html'%}

{%block title%}{{bb.title}}{%endblock%}
{%block content%}

Рубрика:{{bb.rubric.name}}

{{bb.title}}

{{bb.content}}

Цена:{{bb.price}}

{% endblock %}

class StoryDetailView(DetailView):
    models = Story

замени на

class StoryDetailView(DetailView):
    model = Story

у вас одна модель, а не несколько :-)
или

class StoryDetailView(DetailView):
    queryset = Story.objects


Где можно найти обучающий материал по PyQt5 [закрыт]

Закрыт. На этот вопрос невозможно дать объективный ответ. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы на него можно было дать ответ, основанный на фактах и цитатах.

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

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

Я учусь создавать программы с интерфейсом на PyQt5. И у меня возникла сложность в нахождении справочного материала. Подскажите где можно научится создавать программы на PyQt5. Какие нибудь видео уроки или сайты, где расскажут не только базовые знания. А уже по более профессиональные.

Python 3 и PyQt 5. Разработка приложений - толковая книга, много неочевидных фич, которые всегда упускаются в самоучителях на разных сайтах и построчное объяснение кода.
PyScientist Notes - канал на ютубе, тоже множество примеров PyQt5, в отличие от остальных - хорошо объясняет и тоже не совсем hello world примеры.
Документация Qt на русском. Единственное, что есть на русском. Правда, по четвертой версии, но по ходу дела можно несовместимые вещи решать уже как нарвёшься, их не так много.


Поиск и вывод большего значения из json в python
Имеется код:

"fig": {
 "types": {
  "sizes": [{
  "type": "a",
  "val": 200,
  }, {
  "type": "b",
  "val": 500,
  }, {
  "type": "c"
  "val": 600,}

Известно, что типы делятся по значению val (если val >= 600, то выдается тип "c". Тип "c" имеет всегда большее значение, а "a" - меньшее из всех). Также известно, если val меньше 600, то в json списке создается только два типа: a и b.
Нужно реализовать код, который будет искать по типу максимальное значение и выводить его.
Концепция кода должна быть примерно такой:

если type 'c' имеется в списке:
вывести его
stop
поиск меньшего значения, type 'b'
если type 'c' имеется в списке:
вывести его
stop
вывести type 'a'

Во-первых, те данные, которые вы приводите, не являются корректным json - не правильно расставлены скобки и запятые.
Во-вторых, зачем нужно всё это "если с имеется в списке, то так, а если не имеется - то эдак" ?
Вам же нужно найти максимальное val, вот его и ищите:
<code>
import json

data = '''
        {"fig": {
            "types": {
                "sizes": [{
                    "type": "a",
                    "val": 200
                    }, {
                    "type": "b",
                    "val": 500
                    }, {
                    "type": "c",
                    "val": 600}
                    ]
        }}}
      '''

data = json.loads(data)

max_item = max(data['fig']['types']['sizes'],
               key = lambda item: int(item['val'])
               )

print("Тип с максимальным значением: %s" % max_item['type'])
print("Максимальное значение: %s" % max_item['val'])
</code>


Заполнение в шахматном порядке Python array
Задача:
Заполните прямоугольный массив целыми числами начиная с единицы по строчкам слева направо,строчки обходятся сверху вниз. При этом в левом верхнем углу записано число 1, далее заполняются только клетки, имеющие тот же цвет в шахматной раскраске, что и левый верхний угол, а в остальных клетках записано число 0.
Пример для n=5m=6:

1  0  2  0  3  0
0  4  0  5  0  6
7  0  8  0  9  0
0 10  0 11  0 12
13  0 14  0 15  0

Мое решение:

n, m = 5, 6
a = []
x = 0
for i in range(n):
    a.append([])
for j in range(m):
    if (i+j+1)%2 == 0 :
        a[i].append(0)
    else:
        x += 1
        a[i].append(x)
for k in a:
   print(k)

Как записать это с помощью генератора, а точнее, не знаю как x+=1 должно выглядеть в генераторе?

 N, M = 5, 6
 x = 0
 arr = [[0 if (i+j+1)%2 == 0 else ??? for j in range(N)] for i in range(M)]

Хотелось бы также увидеть ваши варианты решения.


Безопасность замены прав libvirt пула
Я пишу python пакет, который должен загружать файлы в
/var/lib/libvirt/images/newpool. Однако без root прав нельзя писать в свежесозданный libvirt пул. Очевидное решение разрешить запись всем с помощью
chmod, но будет ли это корректно с точки зрения безопасности? Есть ли другие способы решить данную проблему?

Пул в либвирт можно создавать в любом каталоге. У меня одинн создан в
/home/eri/Загрузки/
Вам нужно попросить у пользователя доступ к подключению к либвирт.
Например если вызвать в консоли

virsh connect lxc:///

у пользователя на экране появится запрос привелегий через полкит. Окно если в иксах.
При запуске из питона этот запрос также выводится в окошко агента polkit.

import libvirt
conn = libvirt.open('qemu:///system')

дальше

conn.storagePoolCreateXML('''xml описание пула''')

И подсовывайте папку пользователя.
Консольный полкит агент (для сессий без иксов) обычно не запущен, но можно его запустить
pkttyagent принудительно. Тут конечно интересный вопрос...
Или можно попросить у пользователя запускать Ваш скрипт через sudo.
А ещё можно добавить пользователя в группу
libvirt тогда запросов не будет - лучший вариант как мне кажется.


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

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

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

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

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

<code>
number = int(input("Enter any number: "))

print("Palindrome : ")

while number > 0 :

    digit = number % 10;
    number /= 10;
    print(digit)
</code>
Попробовал так, но вывод совсем непонятный

вообще-то
input()[::-1], но если по заданию нужен цикл, можно так

number = int(input("Enter any number: "))

print("Palindrome : ")
while number > 0 :
    number, digit = divmod(number,10);
    print(digit, end='')


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

import re

s1 = 'she is a rats'
s2 = 'she is a part'
pattern = r'\b(\w){4,}\b'
replace = ? #Вот тут я не знаю как написать

print(re.sub(pattern, replace, s1))

Вывод:

she is a star
she is a trap

Вы можете передать
lambda-выражение, которое будет переворачивать слова.
Пример:

import re

def main() -> None:
    strings = ['she is a rats', 'she is a part']
    pattern = re.compile(r'\b(\w){4,}\b')

    for string in strings:
        print(pattern.sub(lambda x: x.group()[::-1], string))

if __name__ == '__main__':
    main()

stdout:

she is a star
she is a trap


Python. Отложенное выполнение команды
<code>
            print('Cтоимость {} : '.format(Name), FileFifa_PayDay[Count])
            print('Национальность {} : '.format(Name), FileFifa_Nationality[Count])
            print(FileFifa_Image[Count])

            webbrowser.open(FileFifa_Image[Count])
</code>
Как сделать так , чтобы после print(FileFifa_Image[Count]) Python ждал некоторое время и переходил к ласт строчке?

Вам может помочь функция
sleep из модуля
time.
Пример:

from time import sleep

print('Cтоимость {} : '.format(Name), FileFifa_PayDay[Count])
print('Национальность {} : '.format(Name), FileFifa_Nationality[Count])
print(FileFifa_Image[Count])

sleep(5)  # 5 секунд ожидания

webbrowser.open(FileFifa_Image[Count])

Ответ был сделан на основе комментария.


Простой вопрос по игре
Пишу простейшую игру на python. Игра угадай число
Компьютер загадывает число от 1 до 50 и даёт 6 попыток пользователю,
чтобы тот смог угадать загаданное число. Когда пользователь вводит число,
компьютер проверяет угадано ли число и если не угадано, то сообщает пользователю меньше ли или больше загаданное число.
Если пользователь угадал - то сообщает о том, что число отгадано.
<code>
import random

print('Привет! Добро пожаловать в игру "Угадай число".')

s = 1
while s < 7:
    n = int(input('Введи число от 1 до 10 и нажми Enter: ')) # число пользователя
    pc = random.randint(1, 10)
    if 1 <= n <= 10:
        if n == pc:
            print('Уррраа Ты угадал!!!')
            print(f'Ты загадал число {n}, а компьютер загадал {pc}. \nЭто потрясающе!!!')
            break
        else:
            print(f'Ну вот, не угадал. Оказывается, компьютер загадал число {pc}')
            print(f'У тебя осталось {6 - s} попыток' )
    else:
        print("Ошибка !!! Введи число из диапазона от 0 до 10")
        #print(f'У тебя осталось {6 - s} попыток' )
    s = s + 1

</code>
Вопрос такой: почему когда все попытки заканчиваются, выводится сообщение, "У тебя осталось 0 попыток". Как изменить код, чтобы это сообщение не выводилось на последнем шаге.

Вам надо добавить проверку
if s != 6:

import random

print('Привет! Добро пожаловать в игру "Угадай число".')

s = 1
while s < 7:
    n = int(input('Введи число от 1 до 10 и нажми Enter: ')) # число пользователя
    pc = random.randint(1, 10)
    if 1 <= n <= 10:
        if n == pc:
            print('Уррраа Ты угадал!!!')
            print(f'Ты загадал число {n}, а компьютер загадал {pc}. \nЭто потрясающе!!!')
            break
        else:
            print(f'Ну вот, не угадал. Оказывается, компьютер загадал число {pc}')
            if s != 6:
                print(f'У тебя осталось {6 - s} попыток' )
    else:
        print("Ошибка !!! Введи число из диапазона от 0 до 10")
        #print(f'У тебя осталось {6 - s} попыток' )
    s = s + 1


Сортировка в Pandas по абсолютным значениям
Есть столбец в
dataframe.
Как отсортировать весь
dataframe по абсолютным значениям этого столбца, без
reindex и
iloc?


Cумма квадратов нечетных цифр в числе

Дано число, введенное с клавиатуры. Определите сумму квадратов нечетных цифр в числе.

N=int(input("Введите натуральное число N:"))
print(N)
total=0
for i in ???:
    if i%2==0:
        continue
total=total+int(i*i)
print(total)

Как брать цифры из числа? isdigit?
Что я должен вставить на то место, где я поставил три знаки вопроса?
Или не так решать?
Добавление:

N=int(input("Введите натуральное число N:"))
print(N)
total=0

for i in map(int, str(N)):
    if int(i)%2==1:
        print(i)
        continue
    total=total+(int(i)**2)

print(total)

Пример:

N = 12345              # считаем, что пользователь ввёл это число
sum_squared_odd = 0
while N > 0:
     N, d = divmod(N, 10)
     if d % 2:
         sum_squared_odd += d**2

print(sum_squared_odd)
# 35

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

sum_squared_odd = 0
for d in str(N):
    d = int(d)
    if d % 2:
        sum_squared_odd += d**2

print(sum_squared_odd)
# 35


Python нужна помощь с сортировкой
Мне необходимо отсортировать список по возрастанию. В качестве параметра сортировки необходимо указать длину списка каждого item после выполнения над ним разбиения по определенном параметру split("paramater")

def sorted(items):
    return sorted(items, key = )

Вход:

0.2090000.ru
0.fls.doubleclick.net
0.hiveon.net
0.internet.org
0.r.bat.bing.com
0.r.msn.com

Выход:

0.2090000.ru          - 3
0.hiveon.net          - 3
0.internet.org        - 3
0.fls.doubleclick.net - 4
0.r.msn.com           - 4
0.r.bat.bing.com      - 5

Что в key указывать? Как ссылаться на item в items?

Исходный список:

In [60]: items
Out[60]:
['0.2090000.ru',
 '0.fls.doubleclick.net',
 '0.hiveon.net',
 '0.internet.org',
 '0.r.bat.bing.com',
 '0.r.msn.com']

список, отсортированный по количеству элементов строки разбитой по символу
".":

In [61]: sorted(items, key=lambda x: len(x.split(".")))
Out[61]:
['0.2090000.ru',
 '0.hiveon.net',
 '0.internet.org',
 '0.fls.doubleclick.net',
 '0.r.msn.com',
 '0.r.bat.bing.com']

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

In [62]: sorted(items, key=lambda x: x.count("."))
Out[62]:
['0.2090000.ru',
 '0.hiveon.net',
 '0.internet.org',
 '0.fls.doubleclick.net',
 '0.r.msn.com',
 '0.r.bat.bing.com']

NOTE: создавая свои функции или переменные не используйте зарезервированных имён:

def sorted(items):    #  <--- ваша функция `sorted()` "затенит" встроенную `sorted()` !
    return sorted(items, key = )

после данного определения вы "затенили" встроенную функцию
sorted() своей и уже не сможете вызвать
sorted() с дополнительными параметрами...