Помогите применить метод dist, который принимает еще один объект класса Point и находит эвклидово расстояние между двумя точками

Необходимо реализовать класс Point (точка). У этого класса должны быть
конструктор, принимающий два числа x и y, координаты точки на плоскости;
аттрибуты x и y через которые можно будет получить координаты точки;
метод dist, который принимает еще один объект класса Point и находит эвклидово расстояние между двумя точками.

import math

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def dist(self, other_point):
        return math.sqrt(
            (other_point.x - self.x) ** 2
            + (other_point.y - self.y) ** 2)

p1 = Point(2, 5)
p2 = Point(4, 6)
print(p1.dist(p2))

Вывод:

2.23606797749979

Что вы сделали не аккуратно:

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

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
p1 = Point(2, 5)                # Эта команда окончила определение класса

Эту (и последующую) команду нужно перенести за конец определение класса.
В определении метода
dist() нужен тоже второй параметр — точка (инстанция класса
Point), к которой вы вычисляете расстояние.
В методе
dist() не хватит только сделать вычисление, результат нужен быть в команде
return.


Как импортировать библиотеку string в Cython?
Всем привет!
Есть такой файл pyx
<code>
cdef extern from "Person.h" namespace "person":
    cdef cppclass CppPerson:
        CppPerson() except +
        CppPerson(string name, int age) except +

cdef class Person:
    cdef CppPerson *cpp_person

    def __cinit__(self):
        self.cpp_person = new CppPerson()
        if self.cpp_person == NULL:
            raise MemoryError('Not enough memory.')

    def __dealloc__(self):
        del self.cpp_person
</code>
В четвёртой строчке мне надо использовать тип string
Как мне импортировать библиотеку string?


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

1, 4
2, 3
2, 3

Ответ должен быть такой:
{1 : 1, 2 : 1} ( то есть студент с id 1 решил 1 задачу, и студент с id 2 тоже решил 1 задачу).
Код, который работает, если номер задачи не повторяется:

def solved_tasks(filename):
    answer = {}
    with open(filename) as f:
        for line in f.readlines():
            s_id, t = line.split(',')
            s_id = int(s_id)
            if s_id not in answer:
                answer[s_id] = 0
            answer[s_id] +=1
    return answer

А как учесть повторения?

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

from collections import defaultdict

def solved_tasks(filename):
    data = defaultdict(set)
    with open(filename) as f:
        for line in f:
            items = line.split(", ")
            data[int(items[0])].add(int(items[1]))
    return {k:len(v) for k,v in data.items()}

результат:

In [33]: solved_tasks(r"C:\temp\data2.txt" )
Out[33]: {1: 1, 2: 1}


Проблема в raw_input
При запуске пишет name 'raw_input' is not defined
<code>
a = raw_input("What is your name?: ")
print (a)
</code>

raw_input() - версия Python 2.x. В Python 3.x это заменили на обычное
input()

a = input("What is your name?: ")
print(a)


Построить словарь в виде многоуровнего дерева
Я получаю из БД объекты являющиеся записями каталогов из бд которые отсортированы в виде дерева:

id:2; parent_id:1; level:1; name:parent 1
id:5; parent_id:2; level:2; name:child 1 - 1
id:6; parent_id:2; level:2; name:child 1 - 2
id:9; parent_id:2; level:2; name:child 1- 3
id:7; parent_id:5; level:3; name:child 1 - 1 - 1
id:11; parent_id:6; level:3; name:children 2- 1
id:10; parent_id:7; level:4; name:child 4 levl parent 1
id:3; parent_id:1; level:1; name:parent 2
id:13; parent_id:3; level:2; name:parent 2- 1 - chil
id:4; parent_id:1; level:1; name:parent 3
id:8; parent_id:1; level:1; name:parent 4

Список уже отсортирован в виде дерева, т.е. идет родительский раздел (level 1), затем, если есть дочерние, потом следующий раздел 1ого уровня.
Мне нужно эти данные привести к такому виду словаря:

tree = {}
tree['parent 1'] = {}
tree['parent 1']['child 1 - 1'] = {}
tree['parent 1']['child 1 - 1']['child 1 - 1 - 1'] = {}
tree['parent 1']['child 1 - 1']['child 1 - 1 - 1']['child 4 levl parent 1'] = {}
tree['parent 1']['child 1 - 2'] = {}
tree['parent 1']['child 1 - 2']['children 2- 1'] = {}
tree['parent 1']['child 1- 3'] = {}
tree['parent 1']['child1']['child3'] = {}

tree['parent 2'] = {}
tree['parent 2']['parent 2- 1 - chil'] = {}

tree['parent 3'] = {}
tree['parent 4'] = {}

Уже 2ой день не могу придумать как сделать. Как бы все данные есть, есть понимание уровня вложенности через levle и родителя через parent_id. И если создать 1 уровень несложно, то как сделать 2ой и особенно 3 и далее?
Если кто сталкивался или делал такое, пожалуйста, подскажите

def buildsubtrees(rows):
    trees = {}

    for row in rows:
        trees.setdefault(row['parent_id'], {})[row['name']] = trees.setdefault(row['id'], {})

    return trees

Принимает набор записей, и возвращает словарь, в котором ключами будут
id родителей, а значениями - соответствующие им поддеревья. Вас интересует поддерево с ключом
1, т.е. дерево целиком. Порядок поступления записей не важен, сложность линейная.

import json # для форматированного вывода

rows = [
    {'id':  2, 'parent_id': 1, 'level': 1, 'name': 'parent 1'},
    {'id':  5, 'parent_id': 2, 'level': 2, 'name': 'child 1 - 1'},
    {'id':  6, 'parent_id': 2, 'level': 2, 'name': 'child 1 - 2'},
    {'id':  9, 'parent_id': 2, 'level': 2, 'name': 'child 1- 3'},
    {'id':  7, 'parent_id': 5, 'level': 3, 'name': 'child 1 - 1 - 1'},
    {'id': 11, 'parent_id': 6, 'level': 3, 'name': 'children 2- 1'},
    {'id': 10, 'parent_id': 7, 'level': 4, 'name': 'child 4 levl parent 1'},
    {'id':  3, 'parent_id': 1, 'level': 1, 'name': 'parent 2'},
    {'id': 13, 'parent_id': 3, 'level': 2, 'name': 'parent 2- 1 - chil'},
    {'id':  4, 'parent_id': 1, 'level': 1, 'name': 'parent 3'},
    {'id':  8, 'parent_id': 1, 'level': 1, 'name': 'parent 4'},
]

print(json.dumps(buildsubtrees(rows)[1], indent=4))

Результат

{
    "parent 1": {
        "child 1 - 1": {
            "child 1 - 1 - 1": {
                "child 4 levl parent 1": {}
            }
        },
        "child 1 - 2": {
            "children 2- 1": {}
        },
        "child 1- 3": {}
    },
    "parent 2": {
        "parent 2- 1 - chil": {}
    },
    "parent 3": {},
    "parent 4": {}
}


django 2. Автоматическое удаление кэша thumbnail
Я использую sorl thumbnail из шаблона проекта вот так:

{% thumbnail user.profile.photo "150x150" crop="0%" format="PNG" as im %}

{% endthumbnail %}

После загрузки изображения, thumbnail обрабатывает его и помещает в директорию media/cache. Есть ли такой способ, чтобы после загрузки нового изображения, старое(которое не используется больше) автоматически удалялось ?

Если я правильно понял ваш вопрос, то в документации как раз описывается способ удалить кэш при помощи Management commands:
thumbnail cleanup

python manage.py thumbnail cleanup

This cleans up the Key Value Store from stale cache. It removes
  references to images that do not exist and thumbnail references and
  their actual files for images that do not exist. It removes thumbnails
  for unknown images.

Вы ищите автоматический способ, и я думаю, что он не предусмотрен.
Я вижу два пути решения:

Вызывать команду
python manage.py thumbnail cleanup раз в определённое время, используя
cron:

*/10 * * * * /usr/bin/python python manage.py thumbnail cleanup

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

from sorl.thumbnail import delete

# Удаляет Ключ Значение в хранилище, но **не** удаляет сам файл
# Используйте если изменили изображение
delete(my_file, delete_file=False)

# Удаляет Ключ Значение в хранилище, а так же сам файл
# Используйте если хотите удалить файл
delete(my_file) # delete_file=True is default


Удаление строки и столбца в матрице, на которых лежит минимальный элемент

Задача: задан двухмерный массив A (матрица) вещественных чисел размерности 3 на 5. Получить из него новый массив V путем удаления из массива A строки и столбца, в которых содержится минимальный элемент.

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

import random

dx = 3
dy = 5

A = [[0]*dx for i in range(dy)]

for i in range(dy):
    for j in range(dx):
        A[i][j] = random.randint(-9, 5)

for i in A:
    print(f'{i}', end='')
    print()

min_elem = A[0][0]

for i in range(dy):
    for j in range(dx):
        if A[i][j] < min_elem:
            min_elem = A[i][j]

Можете объяснить как это сделать? Желательно с комментариями.

Не силен в
Pandas, уверен там это делается в разы проще, но вот так на коленке вариант:

import random

def del_column(mtx: list, index: int) -> list:
    for row in mtx:
        row.pop(index)
    return mtx

if __name__ == '__main__':

    dx = 3
    dy = 5

    A = [[0] * dx for i in range(dy)]

    for i in range(dy):
        for j in range(dx):
            A[i][j] = random.randint(-9, 5)

    for i in A:
        print(f'{i}', end='')
        print()

    min_elem = (A[0][0], 0, 0)

    for i in range(dy):
        for j in range(dx):
            if A[i][j] < min_elem[0]:
                min_elem = (A[i][j], i, j)

    print(A)

    A.pop(min_elem[1])  # Удаляем строку
    del_column(A, min_elem[2])  # Удаляем столбец

    print(A)


задачка на python
Нужно написать программу, в которой вводим из клавиатуры текст из букв и цифр
и она должна посчитать, сколько в тексте букв и цифр и вывести их на экран.
<code>
s = input("введите текст:")
a = 0
b = 0
for i in s:
    if i == str:
        a += 1

    elif i == int:
        b += 1
print(a)
print(b)
</code>

s = input("введите текст:")
a, b = 0, 0
for i in s:
    if i.isdigit():
        a += 1
    else:
        b += 1
print('str - {}, num - {}'.format(b, a))

Ваша ошибка в том, что вы сравнивали элемент строки с типом данных, которым ни один элемент ясное дело не является, да и то, даже если бы вы сделали так -
if type(i) == str, все равно получилась бы ошибка, т.к любой элемент строки имеет тип строки, даже если это число


Почему после интерпретации функции в цикле ничего не выводиться (iPython)?
почему функция вне цикла возвращает свое значения, но как только мы вписываем её в цикл, после интерпретации ничего не происходит?
Например:
<code>
def write(a):
    n = a
    return n

for i in range(5):
    write(5)
</code>
Помогите пожалуйста, буду очень благодарен!

Ваша функция никак не выводит своего значения на печать.
Jupyter (так же как и интерактивный режим питона), обычно выводит на печать значение последнего вычисленного выражение, если это значение не None. Но это именно особенность конкретной среды исполнения. Обычно же не следует рассчитывать, что код будет что-то выводить на экран, если в нём нет явной команды сделать это.
Поэтому если вы хотите что-то напечатать, то следует явно делать это командой print.


Пайтон.Замена символов
ПОМОГИТЕ:НЕ ЗНАЮ КАК РЕАЛИЗОВАТЬ ЗАДАЧУ!!
Дано натуральное число n, символы s1, ..., sn. Превратить последовательность s1, ...,
sn: если нет символа * , то оставить ее без изменения, иначе заменить каждый символ,
встречается после первого вхождения символа * , в знак «-».
Пример:
Вводим:456456
Вывод:456456
Вводим:456*456
Вывод:456---
<code>
n = input("Введите последовательность: ")
sum = 0
for  i in n:
    sum +=1
    if (i =='*'):
        n.replace('*', '-', 1)
        print(n)
</code>

Самое простое решение -- через создание новой строку на основе текущей:

Цикл, что перебирает символы из строки
Проверка встречи с
'*'
Код добавления символа в зависимости от флага. Состояние флага указывает что добавляется в новую строку: текущий символ строки или
'-'

Пример:

# text = '456*456'
text = input("Введите последовательность: ")

flag = False
new_text = ''
for c in text:
    if c == '*':
        flag = True
        continue

    if flag:
        new_text += '-'
    else:
        new_text += c

print(new_text)

PS.
Условие можно в одну строку сделать:

new_text += '-' if flag else c


Сортировка с выдачей процентов категории Pandas
Есть исходный DF

Vid1    Vid2    Res
1   4234    A
1   523 A
1   423552  A
1   625 B
1   3524    C
2   4254    A
2   4325    C
2   435 C
2   2532    B
2   5235    B

Необходимо для каждого Vid1 посчитать процент вхождения каждой из категорий из Res.
А входила 3 раза из 5, то есть 0,6,
B=0,2,
C=0,2.
То есть на выходе необходимо получить нечто такое:

Vid1    resA    resB    resC
1   0,6 0,2 0,2
2   0,2 0,4 0,4

Попробуйте так:
<code>
In [39]: res =  (df
                 .groupby(["Vid1"])
                 ["Res"]
                 .apply(lambda x: x.groupby(x).size()/len(x))
                 .unstack())

In [40]: res
Out[40]:
1       A    B    C
Vid1
1     0.6  0.2  0.2
2     0.2  0.4  0.4

In [41]: res.loc[1, "B"]
Out[41]: 0.2
</code>


Удаление часть содержимого docx с помощью python
Есть тысяча файлов docx с одинаковыми кусками текста, которые надо удалить.
На данный момент нагуглил библиотеку для работы с docx файлами - python-docx
Следующий код выводит в консоль строки, которые мне надо удалить:
<code>
doc = docx.Document('folder/file.docx')
para = doc.paragraphs[:4]
</code>
То есть, первые 5 строк
И вопрос в том, как их, собственно, удалить.
replace через цикл не срабатывает
К тому же, по идее файлы не открыты на запись
Какие есть способы удалить эти строки? Может быть стоит копать в другую сторону

Спасибо за ссылку, но разобраться по этому примеру не смог, моя задача, как оказалось, решается довольно просто:
<code>
doc = docx.Document(path)
    para = doc.paragraphs[:4]
    for i in para:
        i.text = None
    doc.save(path + '.docx')
</code>


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

def foo(x):
    return x + 42

Такую функцию я могу использовать как с простыми числами, так и с
numpy.array, всё ок.
Но что если функция имеет 1 условие?

def bar(x):
    if x < 42:
        return x + 42
    else:
        return x - 42

В таком случае для
numpy.array она уже работать не будет, а хотелось бы, чтобы ко всем элементам массива, которые меньше 42, прибавилось 42, от остальных -- отнялось.
Можно ли так написать функцию
bar, чтобы она работала и с одиночными элементами, и с
numpy.array?

Предлагаю воспользоваться векторизированной условной функцией np.where():

def foo(x, val=42):
    return x + np.where(x < val, val, -val)

Тесты:

In [16]: foo(10)
Out[16]: 52

In [17]: foo(50)
Out[17]: 8

In [18]: foo(np.array([20, 40, 60, 80]))
Out[18]: array([62, 82, 18, 38])


Метод перед конструктором?
У меня не работает метод  - если страна США, то цена больше на 50 процентов. Мой код должен оставаться конструктором
<code>
class Person:
name = "ivan"
age = 10

def __init__(self, country, price, study):
    self.country=country
    self.price=price
    self.study=study
def _self(self, country, price, study):
    self.country=country
    self.price=price
    self.study=study

def countryPrice(self):#створення метода  залежності ціни від країни
    if self.country == "USA":
        self.price += self.price * 0.5

class Student(Person):
    course=1

vlad=Person("USA", 22, "VTC")
print(vlad.country+ " "+str(vlad.price)+" "+str(vlad.study))
</code>

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

class Person:
    def __init__(self, country, price, study):
        self.country=country
        self.price=price
        if self.country == "USA":
            self.price += self.price * 0.5
        self.study=study

    def _self(self, country, price, study):
        self.country=country
        self.price=price
        self.study=study

    def country_price(self):#створення метода  залежності ціни від країни
        if self.country == "USA":
            self.price += self.price * 0.5

vlad=Person("USA", 22, "VTC")
print(vlad.country + " " + str(vlad.price) + " " + vlad.study)

Вывод:

USA 33.0 VTC

Если нужно вызывать отдельной функцией, то это делается так:

vlad.country_price()

Тогда нужно из конструктора убрать это условие.


Как проверить содержит ли нужный атрибут нужный div на python?
Подскажите, пожалуйста, как проверить содержит ли
div нужный
class.
Код:

<div class="header"></div>
<div id="1" class="a"></div>
<div id="2" class="a"></div>
<div id="3" class="a"></div>
<div class="header"></div>
<div id="4" class="a"></div>
<div id="5" class="a"></div>
<div id="6" class="a"></div>

b = soup.find_all("div", class_="header")
for i in b:
    s = i.find_next_siblings("div")
    for div in s:
        while True:
            # Нужно проверить если div содержит class="a", то делаем то-то
            #если содержит class="header", то break. То есть нужно вывести
            #все классы, содержащие class="a" ниже сlass="header", но до
            #следующего сlass="header"
            # Не пойму какой нужен синтаксис, пробовал несколько вариантов
            #if "event__match" in div.attrs["class"]:
            #ошибка  if "event__header" in div.attribute["class"]:
            #TypeError: 'NoneType' object is not subscriptable

Смотрите,

Код
for i in soup.find_all("div", class_="header") вернет все
div.header. Вы их в цикле получаете
Код
for div in i.find_next_siblings("div") вернет всех соседей, от текущего
i (т.е. от текущего
div.header). А это не только
div.a, но последующие за ними
div.header и его
div.a
Поэтому, нам и нужно остановится на первом попавшемся внутри
div.header
А сам цикл
while не нужен

Пример:

from bs4 import BeautifulSoup

html = """
<div class="header"></div>
<div id="1" class="a"></div>
<div id="2" class="a"></div>
<div id="3" class="a"></div>
<div class="header"></div>
<div id="4" class="a"></div>
<div id="5" class="a"></div>
<div id="6" class="a"></div>
"""

soup = BeautifulSoup(html, 'html.parser')

for i in soup.find_all("div", class_="header"):
    print('HEADER')

    for div in i.find_next_siblings("div"):
        class_ = div.attrs['class']

        if 'a' in class_:
            print(f'    {div}')
        elif 'header' in class_:
            break

Вывод:

HEADER
    <div class="a" id="1"></div>
    <div class="a" id="2"></div>
    <div class="a" id="3"></div>
HEADER
    <div class="a" id="4"></div>
    <div class="a" id="5"></div>
    <div class="a" id="6"></div>


os.system() не работает, а если команду zip-command скопировать в cmd, то она нормально отрабатывает
Изучаю Python по книге "A Byte of Python", немного переделал пример из книги, вместо 'zip' использую '7-zip'. И os.system() не работает, а если команду zip-command скопировать в cmd, то она нормально отрабатывает. Пробовал добавлять в PYTHONPATH путь до 7-zip.exe, всё безуспешно.
<code>
import os
import time

# 1. Файлы и каталоги, которые необходимо скопировать, собираются в список.
source = ['C:\\Users\user1\Desktop\python_source\lessons_code', '"C:\\Users\user1\Desktop\python_source\my idea"']
# Для имён содержащих пробелы, необходимо использовать двойные кавычки внутри строки

# 2. Резервные копии должны храниться в основном каталоге резерва
target_dir = 'D:\\backup'

# 3. Файлы помещаются в zip-архив.
# 4. Именем для zip-архива служит текущая дата и время.
target = target_dir + os.sep + time.strftime('%Y%m%d%H%M%S') + '.zip'

# 5. Используем команду "zip" для помещения файлов в zip-архив.
zip_command = '"C:\\Program Files\\7-Zip\\7z.exe" a -tzip -ssw -mx5 -r0 {0} {1}'.format(target, ' '.join(source))

# Запускаем создание резервной копии
print(zip_command) # отладка: получаем команду и вставляем её в cmd для проверки работоспособности.

if os.system(zip_command) == 0:
    print('\nРезервная копия успешно создана в', target)
else:
    print('\nСоздание резервной копии НЕ УДАЛОСЬ')
</code>

Вероятнее всего проблема - неправильное написание и трактовка литералов строк python. Тема достаточно сложная, но если кратко, то те стоки, которые мы должны писать в файле скрипта не обязательно являются тем, что мы имеем в виду, а также тем что мы видим когда вызываем
print. Поэтому для отладки приложений лучше не использовать
print, а так или иначе работать с самими данными. Попробуйте следующий код:

import os
import time

source = [r'C:\Users\user1\Desktop\python_source\lessons_code', r'"C:\Users\user1\Desktop\python_source\my idea"']
target_dir = r'D:\backup'
target = target_dir + os.sep + time.strftime('%Y%m%d%H%M%S') + '.zip'
zip_command = r'""C:\Program Files\7-Zip\7z.exe" a -tzip -ssw -mx5 -r0 {0} {1}"'.format(target, ' '.join(source))

if os.system(zip_command) == 0:
    print('\nРезервная копия успешно создана в', target)
else:
    print('\nСоздание резервной копии НЕ УДАЛОСЬ')

Я заменил все литералы строк с двойным
'\\' на
r'\', а также добавил там, где их не было (в строке
source = ...). Помимо этого, все команды посылаемые в
os.system лучше дополнительно оборачивать в кавчки. Именно это и является причиной такого разного результата в работе
cmd и
os.system. Код рабочий, я проверил его только что с использованием своих путей файлов.
Вообще обычно для этих целей используют либо встроенные возможности, либо более высокоуровневые инструменты. Вот пример с использованием модуля
subprocess:

import subprocess

# ваш код вычисления zip_command здесь

if subprocess.run([zip_command], shell=True).returncode == 0:
    ...
else:
    ...

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


QThread связь окна с потоком
Есть код, какой метод прописать, что бы была связь потока и окна?
<code>
import sys
from PyQt5.QtCore import Qt, QThread
from PyQt5.QtWidgets import QWidget, QFrame, QApplication, QLabel

class Thread(QThread):

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

def run(self):

    pos = True
    while pos:
        if self.frame.pos().x() == 50 and self.frame.pos().y() == 180:
            print('Complete')
        else:
            print('Error')

class Window(QWidget):

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

    self.InitWindow()

    self.thread = Thread()
    self.thread.start()

def InitWindow(self):

    self.resize(500, 500)

    self.frame = QFrame(self)
    self.frame.resize(100, 100)
    self.frame.move(50, 180)
    self.frame.setStyleSheet('background-color: black')
    self.x, self.y = self.frame.pos().x(), self.frame.pos().y()

    self.text = "x: {0},  y: {1}".format(self.x, self.y)
    self.label = QLabel(self.text, self)
    self.label.setGeometry(50, 0, 100, 100)

def keyPressEvent(self, e):

    if e.key() == Qt.Key_Down:
        self.y += 10
    elif e.key() == Qt.Key_Up:
        self.y -= 10
    elif e.key() == Qt.Key_Right:
        self.x += 10
    elif e.key() == Qt.Key_Left:
        self.x -= 10

    self.frame.move(self.x, self.y)
    self.text = "x: {0},  y: {1}".format(self.x, self.y)
    self.label.setText(self.text)

if __name__=="__main__":

app = QApplication([])
window = Window()
window.show()
sys.exit(app.exec_())
</code>

Попробуйте это.
Тут в поток передана ссылка на виджет и в функции проверки добавил небольшую задержку:

import time
import sys
from PyQt5.QtCore import Qt, QThread
from PyQt5.QtWidgets import QWidget, QFrame, QApplication, QLabel

class Thread(QThread):
    def __init__(self, frame):
        super().__init__()

        self.frame = frame

    def run(self):
        pos = True
        while pos:
            if self.frame.pos().x() == 50 and self.frame.pos().y() == 180:
                print('Complete')
            else:
                print('Error')

            time.sleep(0.01)

class Window(QWidget):
    def __init__(self):
        super().__init__()

        self.InitWindow()

        self.thread = Thread(self.frame)
        self.thread.start()

    def InitWindow(self):
        self.resize(500, 500)

        self.frame = QFrame(self)
        self.frame.resize(100, 100)
        self.frame.move(50, 180)
        self.frame.setStyleSheet('background-color: black')
        self.x, self.y = self.frame.pos().x(), self.frame.pos().y()

        self.text = "x: {0},  y: {1}".format(self.x, self.y)
        self.label = QLabel(self.text, self)
        self.label.setGeometry(50, 0, 100, 100)

    def keyPressEvent(self, e):
        if e.key() == Qt.Key_Down:
            self.y += 10
        elif e.key() == Qt.Key_Up:
            self.y -= 10
        elif e.key() == Qt.Key_Right:
            self.x += 10
        elif e.key() == Qt.Key_Left:
            self.x -= 10

        self.frame.move(self.x, self.y)
        self.text = "x: {0},  y: {1}".format(self.x, self.y)
        self.label.setText(self.text)

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

Из
Window в
Thread при изменении положения
self.frame в
keyPressEvent
Из
Thread в
Window отсылать сигнал с результатом проверки:
Complete /
Error

Сигналы нужно подключать к методам, т.е. еще в обоих объектах нужно будет завести методы, что будут вызываться на те новые сигналы


Почему не определяется значение с? [закрыт]

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

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

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

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

Если я "захочу" ввести интервал и введу его, то крашит с ошибкой с текстом по типу "Значение с не определено", хотя почти в начале кода я ввожу значение с даже, если пользователь не захочет этого (т.е. по умолчанию с = 1)
<code>
a = int(input("Введите начало счёта: "))
b = int(input("Введите конец счёта: "))
interval = input("Хотите ли Вы ввести интервал? [Y/N]: ")
if interval == "Y":
    с = int(input("Введите интервал между называемыми целыми числами: "))
else:
    c = 1
interval_1 = input("Нужно ли включать второе число в последовательность? [Y/N]: ")
if interval_1 == "Y":
    b += 1
print ("В каком формате вывести последовательность?")
format = input("Столбец - [0], Строка - [1]: ")
if format == "0":
    for i in range(a, b, c):
        print(i)
elif format == "1":
    for i in range(a, b, c):
        print(i, end=" ")
input()
</code>

В строчке

с = int(input("Введите интервал между называемыми целыми числами: "))

с - русская. А нужна латинская.


Почему пропускает конструкцию?
Запускаю в командной строке. Считывает а и б, а вот если ввожу Y + Enter или N + Enter - краш.
<code>
a = int(input("Введите начало счёта: "))
b = int(input("Введите конец счёта: "))
interval = input("Хотите ли Вы ввести интервал (Y/N): ")
if interval == Y:
    с = int(input("Введите интервал между называемыми целыми числами: "))
input()
</code>


Нужны советы по созданию сайта
Хочу написать сайт наподобии радио: у меня есть плейлист, который я воспроизвожу, а также могу его редактировать: добавлять, удалять или переключать треки (Иными словами - имею к нему полный доступ.). Юзеры просто слушают воспроизводимую музыку, соответственно, не имея доступа к редактированию плейлиста. Возникли следующие вопросы:

Как и где лучше хранить треки?
Как их воспроизводить?
Можно ли написать это на Django в связке с Angular ?

Музыку надо застримить в сеть для начала. Тут выбор чаще всего падает на icecast. Но можно обойтись и VLC+nginx - тогда получится интерактивное управление вместо "админки".
Воспроизводить: плеер на основе html5 или flash.
Джанго тут не нужна - просто статичная странички или SPA. Ангуляр подойдет.
Питон не понадобится скорее всего.


Python. Работа со строками [закрыт]

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

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

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

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

Есть текст (не обращайте внимание на смысл предложений). "Сегодня чудесный день.Зачем ты испортил эту рубашку?Когда-то я куплю ручку, и тогда всё изменится.Где находится тот кабинет?Очень интересный вопрос.Холодно.Ты будешь заботиться о котёнке, пока меня не будет?" Нужно написать программу, которая будет определять сколько вопросительных предложений в этом тексте, и сколько слов в каждом вопросительном предложении. В этом тексте вопросительных предложений 3. В первом вопросительном предложении 5 слов, во втором - 4 слова.

Для начала можно разделить текст на предложения, воспользовавшись поиском по следующему регулярному выражению:
.*?[.?].
Затем отфильтровать предложения, в качестве условия проверяя наличие символа
? в конце.
Количество предложений будет равно длине получившегося списка.
Для получения количества слов, требуется разделить предложение по пробелам и так же, как с предложениями, найти длину списка.
Пример:

import re

def main():
    text = "Сегодня чудесный день.Зачем ты испортил эту рубашку?Когда-то я куплю ручку, и тогда всё изменится.Где находится тот кабинет?Очень интересный вопрос.Холодно.Ты будешь заботиться о котёнке, пока меня не будет?"

    sentences = re.findall('.*?[.?]', text)
    questions = list(filter(lambda s: s.endswith('?'), sentences))
    questions_count = len(questions)
    words_counts = [len(s.split()) for s in questions]

    print(questions_count)
    print(*words_counts)

if __name__ == '__main__':
    main()

stdout:

3
5 4 9


Не удаляется элемент в списке по индексу
<code>
def take_var():
    print('Введите количество людей в круге')
    n = input()
    return n

count = int(take_var())

def mass(count):
    humans = []

    while count >= 1:
        humans.append (count)
        count -= 1

    humans.reverse()

    print(humans)

    while len(humans) >= 1:
        del humans[2]
        if len(humans) < 3:
            del humans[1]

    print (humans)

mass(count)

</code>

По условию задачи вам нужно удалять каждого третьего. А вы каждый раз удаляете третьего от начала. Это разные вещи.
Правильный код должен выглядеть как-то так:
<code>
count = int(input('Введите количество людей в круге: '))

humans = list(range(1, count+1))

print(humans)

cur_idx = 0

while len(humans) > 1:
    del_idx = (cur_idx + 2) % len(humans)
    del humans[del_idx]
    print(humans)
    cur_idx = del_idx
</code>


Дана несимметричная матрица, пересобрать только ее симметричные элементы python
Пример:
[[0, 1, 1], [1, 0, 0], [0, 0, 0]]
Должно на выходе выдавать:
[[0, 1], [1, 0]]

Возможно, я не совсем верно истолковал вопрос, но вот у меня есть такое решение:
Исходные:

import numpy as np
a = np.array([[0, 1, 1], [1, 0, 0], [0, 0, 0]])

Сам код:

blocks = [a[x:x+2,x:x+2] for x in np.diag_indices(a.shape[0])[0][:-1]]
res = [x.tolist() for x in blocks if np.allclose(x, x.T)]
print(res)

Результат:

[[[0, 1], [1, 0]], [[0, 0], [0, 0]]]


Как связать таблицу с Users определенной группы
вопрос такой:
Существует условный блог на django
У меня есть Сущность Post (Посты с контентом) и мне хотелось бы, чтобы у нее было поле его автора, как мне связать ее с таблицей User, но только состоящих в группе Authors? Или подскажите иной способ реализовать это, если считаете его более оптимальным.

Есть несколько способов сделать то, что требуется:
1) Используя
Permission:
Создаём сам
permission:

from myapp.models import BlogPost
from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType

content_type = ContentType.objects.get_for_model(BlogPost)
permission = Permission.objects.create(
    codename='can_publish',
    name='Can Publish Posts',
    content_type=content_type,
)

Даём права пользователю:

user.user_permissions.add(permission)

Проверяем, есть ли у пользователя права:

user.has_perm('myapp.change_blogpost')

2) Раз уж вы задали вопрос о Группах, то тогда так:
Создаём группу

from django.contrib.auth.models import Group

group = Group.objects.create(name="Author")

Даём права группе

group.permissions.add(permission) # берём `permission` из предыдущего примера

Добавляем пользователя в группу:

user.groups.add(group)

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

if user.groups.filter(name='Author').exists():
    ...


Как на Python вывести все элементы после нужного и до следующего такого же?
Подскажите, пожалуйста, как вывести все элементы после нужного и до следующего такого же, пример:

<div class="header"></div>
<div id="1" class="а"></div>
<div id="2" class="а"></div>
<div id="3" class="а"></div>
<div class="header"></div>
<div id="4" class="а"></div>
<div id="5" class="а"></div>
<div id="6" class="а"></div>

Код:

b = soup.find_all("div", class_="header")
for i in b:
    s = i.find_next_siblings("div", class_="a")
    print(s)

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

[<div id="1" class="а"></div>
<div id="2" class="а"></div>
<div id="3" class="а"></div>,
<div id="4" class="а"></div>
<div id="5" class="а"></div>
<div id="6" class="а"></div>]
[<div id="4" class="а"></div>
<div id="5" class="а"></div>
<div id="6" class="а">]

а надо:

[<div id="1" class="а"></div>
<div id="2" class="а"></div>
<div id="3" class="а"></div>]
[<div id="4" class="а"></div>
<div id="5" class="а"></div>
<div id="6" class="а">]

То есть мне нужно вывести все следующие элементы после
<div class="header"></div> и до следующего
<div class="header"></div>

Составил css-селектор, в котором указал, что нужны
div.a, находящиеся по соседству с
div.header:

from bs4 import BeautifulSoup

html = """
<div class="header">Желтый</div>
<div id="1" class="a"></div>
<div id="2" class="a"></div>
<div id="3" class="a"></div>
<div class="header">Красный</div>
<div id="4" class="a"></div>
<div id="5" class="a"></div>
<div id="6" class="a"></div>
"""

root = BeautifulSoup(html, 'html.parser')

items = root.select("div.header ~ div.a")
print(items)
# [<div class="a" id="1"></div>, <div class="a" id="2"></div>, <div class="a" id="3"></div>,
# <div class="a" id="4"></div>, <div class="a" id="5"></div>, <div class="a" id="6"></div>]

Доработка для поиска
div.a у определенного
div.header:

root = BeautifulSoup(html, 'html.parser')

items = []
for header in root.find_all("div", class_='header'):
    # Нужен определенный цвет
    if header.get_text(strip=True) != 'Желтый':
        continue

    div = header
    while True:
        div = div.find_next_sibling('div')
        if not div or 'a' not in div.attrs['class']:
            break

        items.append(div)

print(items)
# [<div class="a" id="1"></div>, <div class="a" id="2"></div>, <div class="a" id="3"></div>]

Условие
if not div or 'a' not in div.attrs['class']: break означает, что цикл будет прерван если
div будет логическим
False (например, если
None) или если класса
a не будет в атрибуте (например, если встретили
header).
Если код немного доработать, то можно просто собирать группы тегов в словарь:

from collections import defaultdict
...

header_by_a = defaultdict(list)

for header in root.find_all("div", class_='header'):
    header_text = header.get_text(strip=True)

    div = header
    while True:
        div = div.find_next_sibling('div')
        if not div or 'a' not in div.attrs['class']:
            break

        header_by_a[header_text].append(div)

print(header_by_a['Желтый'])
# [<div class="a" id="1"></div>, <div class="a" id="2"></div>, <div class="a" id="3"></div>]

print(header_by_a['Красный'])
# [<div class="a" id="4"></div>, <div class="a" id="5"></div>, <div class="a" id="6"></div>]


Нужно задачать изначальные значения класса конструктором
Нужно задачать изначальные значения класса конструктором
<code>
import random as rd #завантаження бібліотеки рандом

class Clothes: #створення класу

    def __init__(self,material,price,color,country,sale,size, arr):#створення змінних
        self.material = material
        self.price = price
        self.color = color
        self.country = country
        self.sale = sale
        self.size = size

    def countryPrice(self):#створення метода  залежності ціни від країни
        if self.country == "USA":
            self.price += self.price * 0.1

    def saleofSize(self):#створення метода залежності ціни від розміру
        if self.size_lst == "S":
            self.price -= self.price * 0.6

    def __str__(self):#метод повернення змінних
        return f'material-{self.material}, price- {self.price}, color- {self.color}, country- {self.country}, sale- {self.sale}, size- {self.size}'

lstClass = []#порожній масив
material_lst = ["Кожа","Шелк","Хлопок","Лен"]#створення масива матеріалу
price_lst = [3000,1200,20000,4500, 5500]#створення масива ціни
color_lst = ["Red","Green","Blue","Dark"]#створення масива кольору
country_lst = ["Russia","Ukraine","USA","Portugal"]#створення країни
sale_lst = [30,1,5,70, 80]#створення масива знижок
size_lst = ["L", "XXL","XL", "S", "M"]#створення масива розміру

print(sorted(price_lst))#метод сортування
print("MIN-",min(price_lst))#метод мінімального елемента ціни
print("MAX-",max(price_lst))#метод максимального елемента ціни
print(sorted(sale_lst))#метод сортування знижки

data_list = (material_lst, price_lst, color_lst, country_lst, sale_lst, size_lst)

for i in range(1,20):
    arg = (rd.choice(obj) for obj in data_list)
    arr = rd.randint(0,100)
    specimen = Clothes(*arg, arr)
    specimen.countryPrice()
    lstClass.append(specimen)

for obj in lstClass:
    print(obj)
</code>

class Clothes: #створення класу

    def __init__(self,material,price,color,country,sale,size, arr):#створення змінних
        self.material = material
        self.price = price
        self.color = color
        self.country = country
        self.sale = sale
        self.size = size
        if self.country == "USA":
            self.price += self.price * 0.1
        if self.size_lst == "S":
            self.price -= self.price * 0.6

    def __str__(self):#метод повернення змінних
        return f'material-{self.material}, price- {self.price}, color- {self.color}, country- {self.country}, sale- {self.sale}, size- {self.size}'


Как сделать пробелы в CSV там, где нет данных?
Есть JSON файл, который выглядит так:

{"q":"1",
"w":[{"aa": "111","ab":"222","ac":"333"},
     {"aa": "444","ab":"555","ac":"666"},
     {"ad": "777", "ae": "888", "af": "999", "ag": "000", "ah": "123"],
     {"aa": "234","ab":"345","ac":"456"}}

Всего 8 ключей. У меня CSV заполняется так:

111,222,333
444,555,666
777,888,999,000,123
234,345,456

Мне нужно сделать так, чтобы в БД записывалось правильно:

111,222,333,,
444,555,666,,
,,,777,888,999,000,123
234,345,456,,

У меня есть конгфиг файл. Можно ли его тут применить или изменить под задачу?

[KEYS]
aa = 'aa'
ab = 'ab'
ac = 'ac'
ad = 'ad'
ae = 'ae'
af = 'af'
ag = 'ag'
ah = 'ah'

Код считывает каждую строчку из JSON и эту строчку толкает в CSV, то есть он не видит все заголовки JSON и поэтому он заполняет CSV так, как заполняет. Я потому и спросил, поможет ли мне конфиг, чтобы указать парсеру на все заголовки JSON.


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

<div class="sportName baseball">
    <div class="event__header">
        <div class="icon--flag event__title fl_205" title="Венесуэла">
            <div class="event__titleBox">
               <span class="event__title--type">ВЕНЕСУЭЛА</span>
               <span class="event__title--name" title="ЛВБП">ЛВБП</span>
            </div>
        </div>
    </div>
    <div id="g_6_MmpBOXpa" title="Подробности матча!" class="event__match event__match--scheduled event__match--twoLine"></div>
    <div id="g_6_MmpBOtha" title="Подробности матча!" class="event__match event__match--scheduled event__match--twoLine"></div>
    <div id="g_6_MmprgOXpa" title="Подробности матча!" class="event__match event__match--scheduled event__match--twoLine"></div>

    <div class="event__header">
        <div class="icon--flag event__title fl_205" title="Мексика">
            <div class="event__titleBox">
                <span class="event__title--type">МЕКСИКА</span>
                <span class="event__title--name" title="ЛМП">ЛМП</span>
            </div>
        </div>
    </div>
    <div id="g_6_Mmthrpa" title="Подробности матча!" class="event__match event__match--scheduled event__match--twoLine"></div>
    <div id="g_6_MthrBOtha" title="Подробности матча!" class="event__match event__match--scheduled event__match--twoLine"></div>
    <div id="g_6_MmprgOjtr" title="Подробности матча!" class="event__match event__match--scheduled event__match--twoLine"></div>
</div>

Можно ли как-то прописать, что если содержимое
div с
class="event__header" удовлетворяет условиям, содержит в тегах
<span class="event__title--type">ВЕНЕСУЭЛА</span> и
<span class="event__title--name" title="ЛВБП">ЛВБП</span>
ВЕНЕСУЭЛА и
ЛВБПЭ, соответственно, то собираем, например,
id у
div title="Подробности матча!", до следующего
div с
class="event__header", или есть другие более правильные варианты?
Заранее спасибо за помощь!
ПРАВКИ:
Как-то не выходит использовать
find_next_siblings, может кто знает, что не так?

from bs4 import BeautifulSoup

test_html = """
<div class="sportName baseball">
    <div class="event__header">
        <div class="icon--flag event__title fl_205" title="Венесуэла">
            <div class="event__titleBox">
                <span class="event__title--type">ВЕНЕСУЭЛА</span>
                <span class="event__title--name" title="ЛВБП">ЛВБП</span>
            </div>
        </div>
    </div>
    <div id="g_6_MmpBOXpa" title="Подробности матча!" class="event__match event__match--scheduled event__match--twoLine"></div>
    <div id="g_6_MmpBOtha" title="Подробности матча!" class="event__match event__match--scheduled event__match--twoLine"></div>
    <div id="g_6_MmprgOXpa" title="Подробности матча!" class="event__match event__match--scheduled event__match--twoLine"></div>

    <div class="event__header">
        <div class="icon--flag event__title fl_205" title="Мексика">
            <div class="event__titleBox">
                <span class="event__title--type">МЕКСИКА</span>
                <span class="event__title--name" title="ЛМП">ЛМП</span>
            </div>
        </div>
    </div>
    <div id="g_6_Mmthrpa" title="Подробности матча!" class="event__match event__match--scheduled event__match--twoLine"></div>
    <div id="g_6_MthrBOtha" title="Подробности матча!" class="event__match event__match--scheduled event__match--twoLine"></div>
    <div id="g_6_MmprgOjtr" title="Подробности матча!" class="event__match event__match--scheduled event__match--twoLine"></div>
</div>
"""

soup = BeautifulSoup(test_html, 'html.parser')
current = soup.find_all("div", class_="event__header")
liga = []
for i in current:
    span1 = i.find_all("span")
    for j in span1:
        span2 = j.get_text()
        liga.append(span2)
        print(span2)
print(liga)
span3 = ["МЕКСИКА"]
for m in span2:
    if m in span3:
        s = current.find_next_siblings("div")
        print(s)
    else:
        print("Совпадений нет")

from bs4 import BeautifulSoup
test_html = """
<div class="sportName baseball">
    <div class="event__header">
       <div class="icon--flag event__title fl_205" title="Венесуэла">
          <div class="event__titleBox">
             <span class="event__title--type">ВЕНЕСУЭЛА</span>
             <span class="event__title--name" title="ЛВБП">ЛВБП</span>
          </div>
       </div>
    </div>
    <div id="g_6_UyjXVFhP" title="Подробности матча!" class="event__match event__match--twoLine">
       <div class="event__check"></div>
       <div class="event__stage">
          <div class="event__stage--block">Завершен</div>
       </div>
       <div class="event__participant event__participant--home">Ла Гуайра</div>
       <div class="event__participant event__participant--away fontBold">Маргарита</div>
       <div class="event__score event__score--home">5</div>
       <div class="event__score event__score--away">7</div>
       <div class="event__part event__part--home event__part--1">0</div>
       <div class="event__part event__part--away event__part--1">0</div>
       <div class="event__part event__part--home event__part--2">0</div>
       <div class="event__part event__part--away event__part--2">0</div>
       <div class="event__part event__part--home event__part--3">0</div>
       <div class="event__part event__part--away event__part--3">0</div>
       <div class="event__part event__part--home event__part--4">1</div>
       <div class="event__part event__part--away event__part--4">1</div>
       <div class="event__part event__part--home event__part--5">2</div>
       <div class="event__part event__part--away event__part--5">0</div>
       <div class="event__part event__part--home event__part--6">0</div>
       <div class="event__part event__part--away event__part--6">1</div>
       <div class="event__part event__part--home event__part--7">0</div>
       <div class="event__part event__part--away event__part--7">0</div>
       <div class="event__part event__part--home event__part--8">0</div>
       <div class="event__part event__part--away event__part--8">0</div>
       <div class="event__part event__part--home event__part--9">2</div>
       <div class="event__part event__part--away event__part--9">3</div>
       <div class="event__part event__part--home event__part--10">0</div>
       <div class="event__part event__part--away event__part--10">2</div>
       <div class="event__spacer event__spacer--home"></div>
       <div class="event__spacer event__spacer--away"></div>
       <div class="event__part event__part--home event__part--11">14</div>
       <div class="event__part event__part--away event__part--11">13</div>
       <div class="event__part event__part--home event__part--12">0</div>
       <div class="event__part event__part--away event__part--12">2</div>
       <div class="event__check"></div>
       <div class="event__icons">
          <div class="event__icon icon--info"></div>
       </div>
    </div>
    <div id="g_6_6csaRZ0t" title="Подробности матча!" class="event__match event__match--twoLine">
       <div class="event__check"></div>
       <div class="event__stage">
          <div class="event__stage--block">Завершен</div>
       </div>
       <div class="event__participant event__participant--home">Лара</div>
       <div class="event__participant event__participant--away fontBold">Каракас</div>
       <div class="event__score event__score--home">4</div>
       <div class="event__score event__score--away">9</div>
       <div class="event__part event__part--home event__part--1">2</div>
       <div class="event__part event__part--away event__part--1">2</div>
       <div class="event__part event__part--home event__part--2">0</div>
       <div class="event__part event__part--away event__part--2">5</div>
       <div class="event__part event__part--home event__part--3">0</div>
       <div class="event__part event__part--away event__part--3">0</div>
       <div class="event__part event__part--home event__part--4">0</div>
       <div class="event__part event__part--away event__part--4">0</div>
       <div class="event__part event__part--home event__part--5">0</div>
       <div class="event__part event__part--away event__part--5">0</div>
       <div class="event__part event__part--home event__part--6">0</div>
       <div class="event__part event__part--away event__part--6">0</div>
       <div class="event__part event__part--home event__part--7">0</div>
       <div class="event__part event__part--away event__part--7">0</div>
       <div class="event__part event__part--home event__part--8">1</div>
       <div class="event__part event__part--away event__part--8">0</div>
       <div class="event__part event__part--home event__part--9">1</div>
       <div class="event__part event__part--away event__part--9">2</div>
       <div class="event__spacer event__spacer--home"></div>
       <div class="event__spacer event__spacer--away"></div>
       <div class="event__part event__part--home event__part--11">8</div>
       <div class="event__part event__part--away event__part--11">15</div>
       <div class="event__part event__part--home event__part--12">3</div>
       <div class="event__part event__part--away event__part--12">0</div>
       <div class="event__icons"></div>
    </div>
    <div class="event__header">
       <div class="icon--flag event__title fl_205" title="Мексика">
          <div class="event__titleBox">
             <span class="event__title--type">МЕКСИКА</span>
             <span class="event__title--name" title="ЛМП">ЛМП</span>
          </div>
       </div>
    </div>
    <div id="g_6_Mmthrpa" title="Подробности матча!" class="event__match event__match--twoLine"></div>
    <div id="g_6_MthrBOtha" title="Подробности матча!" class="event__match event__match--twoLine"></div>
    <div id="g_6_MmprgOjtr" title="Подробности матча!" class="event__match event__match--twoLine"></div>
</div> """

soup = BeautifulSoup(test_html, 'html.parser')
liga = []

ehlist = soup.find_all('div', attrs={'class':'event__header'})
for eh in ehlist:
tlist = eh.find_all('div', attrs={'title':'Венесуэла'})
if tlist:
    for t in tlist:
        splist = t.find_all('span')
        for sp in splist:
            text = sp.get_text()
            liga.append(text)
        print(liga[0] + ": " + liga[1])
        print(' ' * 21 + 'Оч  1  2  3  4  5  6  7  8  9 ДИ  Х Ош')
        print(' ' * 21 + '-' * 38)

        slist = eh.find_next_siblings() # выборка тегов с данными о матчах
        x = None
        while x == None:
            slist.remove(slist[-1])
            for s in slist:
                x = s.find('span')
        slist.remove(slist[-1])

        for s in slist:                 # формирование строк данных
            text = s.get_text()
            events = text.split('\n')[5:]
            eup = events[2::2]
            edn = events[3::2]
            if eup[10] != '':
                eup.remove(eup[11])
            if edn[10] != '':
                edn.remove(edn[11])

            print('%-20s' % events[0], end='')   # форматирование таблицы
            for u in eup:
                print('%+3s' % u, end = '')
            print('\n%-20s' % events[1], end='')
            for d in edn:
                print('%+3s' % d, end = '')
            print('\n')

К вопросу об использовании find_next_sibligs().


Поменять соседей
Дан список с числами, необходимо поменять соседние элементы местами, т.е.
A[0] с
A[1],
A[2] с
A[3], и т.д. Распечатать получившийся список. Если список содержит нечётное число элементов, оставить последний элемент на месте.
Выводит ошибку
IndexError

a = [int(i) for i in input().split()]
for i in range(len(a)):
    if i % 2 == 0:
        a[i], a[i + 1] = a[i + 1], a[i]
print(" ".join([str(i) for i in a]))

На мой взгляд, более простое решение:
<code>
a = [int(i) for i in input().split()]
for i in range(0, len(a)-1, 2):
    a[i], a[i+1] = a[i+1], a[i]
print(" ".join([str(i) for i in a]))
</code>


Поимка и обработка ошибок(Unique constraint) в GenericVIew
Если c обычными
View всё ясно, то как поймать ошибку(
Unique Constraint) и обработать в
UpdateView ?

1.Переопредели метод update
2.from django.db import IntegrityError
3.Проделай операцию update под try:
4.Отлови с помошью:
<code>
except IntegrityError as e:
    if 'unique constraint' in e.message:
</code>


Некоректное выполнение кода на Python
Компилятор кода выдаёт некорректный результат при определённых условиях:
По условию задачи я должен последовательно, в алфавитном порядке убирать буквы из слова/словосочетания. Код отлично работает, пока  в нём не появляются 2 одинаковые буквы (не символа).
Поясню на примере: из фразы "ещё не пример" в ходе цикла постепенно удаляются буквы, в одном из шагов получая следующий список:
['щ', ' ', 'н', ' ', 'п', 'р', 'р'], а после этого, вместо того, чтобы удалить обе буквы "р", он удаляет лишь одну, тиражируя вторую до конца цикла.

inp = input()
inp_1 = []
for i in inp:
    inp_1.append(i)
dl = []
for i in inp_1:
    if i == ' ':
        dl.append(i)
s = ' ' * len(dl)
s_1 = []
for i in s:
    s_1.append(i)
alph = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'
for i in alph:
    for j in inp_1:
        if j == i:
            inp_1.remove(j)
        if len(s_1) != len(inp_1):
            print(*inp_1)

Для меня такое поведение довольно загадочно. Буду крайне благодарен за совет и помощь.

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

inp = input()
inp_1 = []
for i in inp:
    inp_1.append(i)

это то же самое, что:

inp = input()
inp_1 = list(inp)

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

dl = []
for i in inp_1:
    if i == ' ':
        dl.append(i)
s = ' ' * len(dl)
s_1 = []
for i in s:
    s_1.append(i)

можно переписать как:

dl = inp_1.count(" ")*[" "]
s = inp_1.count(" ")*" "
s_1 = dl.copy()

вы уже знаете, что цикл надо делать по копии исходного текста.
итак - окончательный вариант:

inp = input()
inp_1 = list(inp)
dl = inp_1.count(" ")*[" "]
s = inp_1.count(" ")*" "
s_1 = dl.copy()

alph = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'

inp_1_copy = inp_1.copy()
for i in alph:
    for j in inp_1_copy:
        if j == i:
            inp_1.remove(j)
            if len(s_1) != len(inp_1):
                print(*inp_1)

хотя возможно, все еще проще и если вам в будущем не нужны
dl и
s, то
вместо блока

dl = inp_1.count(" ")*[" "]
s = inp_1.count(" ")*" "
s_1 = dl.copy()

тоже достаточно одной строчки:

s_1 = inp_1.count(" ")*[" "]

Ваша основная ваша ошибка была в том, что вы удаляли данные из списка в цикле, организованном по этому списку. так нельзя.
Остальные предлрженные изменения  -  попытка упростить код.
Итак - итоговый вариант, если не нужны
dl и
s:

inp_1 = list(input().lower())  #на всякий случай результат ввода переведен в нижний регистр
blank_num = inp_1.count(" ")    # подсчет количества пробелов

alph = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'

inp_1_copy = inp_1.copy()
for letter in alph:
    for char in inp_1_copy:
        if char == letter:
            inp_1.remove(letter)
            if blank_num != len(inp_1):   # печатаем только после удаления символа
                print(*inp_1)


Найти индекс первого повторяющегося элемента
Как найти первый повторяющийся подряд элемент в списке/np.array?
Например:
<code>
[0.5, 7, 2, 1, 9, 3, 3, 3, 3]
</code>
Нужный индекс = 5.

Решение в стиле Numpy:

In [61]: a = np.array([0.5, 7, 2, 1, 9, 3, 3, 3, 3])

In [62]: res = np.argmax(np.diff(a) == 0)

In [63]: res
Out[63]: 5

Пошагово:

In [68]: np.diff(a)
Out[68]: array([ 6.5, -5. , -1. ,  8. , -6. ,  0. ,  0. ,  0. ])

In [69]: np.diff(a) == 0
Out[69]: array([False, False, False, False, False,  True,  True,  True])

In [70]: np.argmax(np.diff(a) == 0)
Out[70]: 5


Ошибка: min() arg is an empty sequence
"Напишите функцию, которая будет принимать имя файла и возвращать кортеж из четырех чисел: минимум и максимум первой координаты, минимум и максимум второй координаты."
Пример ввода:

1 2
3 4
-2 23
3 -1

Требуемый вывод:

(-2, 3, -1, 23)

Неудачная попытка:

def minmax_coords(filename):
    newlist = []
    coordinates1 = []
    coordinates2 = []
    with open(filename) as f:
        for i in f:
            newlist.append(i)
        for j in range(len(newlist)):
            if j % 2 == 0:
                coordinates1.append(j)
            else:
                coordinates2.append(j)
    if len(newlist):
        return min(coordinates1), max(coordinates1), min(coordinates2), max(coordinates2)
    return None, None, None, None

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

Первое: когда вы разбиваете файл на строки, вы не разбиваете строки на символы по пробелу, следовательно в список "аппендите" целые строки с символами переноса строки
\n (попробуйте распечатать ваш
newlist после того как его собрали, чтобы посмотреть как он выглядит)
Второе: в цикле, когда разбиваете список на х и у координаты, вы в ваши списки добавляете не элементы по индексу, а индексы элементов.
Вот так будет правильно:

def minmax_coords(filename):
    newlist = []
    coordinates1 = []
    coordinates2 = []
    with open(filename) as f:
        for i in f:
            for j in i.split():
                newlist.append(j)
        for j in range(len(newlist)):
            if j % 2 == 0:
                coordinates1.append(int(newlist[j]))
            else:
                coordinates2.append(int(newlist[j]))
    if len(newlist):
        return min(coordinates1), max(coordinates1), min(coordinates2), max(coordinates2)
    return None, None, None, None


Не работает код. Где ошибся?
Мне нужно найти все числа, у которых сумма двух наибольших собственных делителей равна 2019.

Собственный делитель - делитель не равный единице и самому числу

Мой код:
<code>
def IsPrime(n):
   d = 2
   while n % d != 0:
       d += 1
   return d == n
def print_factors(x):
       for i in range(1, x + 1):
               if x % i == 0:
                    s.append(i)
s=[]
for num in range(1,10000):
    print_factors(num)
    IsPrime(num)
    if IsPrime(num) == False:
        for element in s:
            if element == 1:
                s.remove(1)
            if element == num:
                s.remove(num)
        m = max(s)
        s.remove(m)
        k = max(s)
        if m + k == 2019:
            print(num)
</code>
В конце он просто ничего не выводит... в чем ошибка? Конечно таких чисел может и не быть, я пробовал подписать чтобы он выводил NO, если m + k != 2019, но даже этого не происходило..

В первой итерации цикла
for num in range(1,10000): ваш
num принимает значение
1, потом применяете к этой единице вашу функцию
print_factors, которая не возвращает ничего, т.к. условие
if x % i == 0 не выполняется


Обработать Exception из сторонней библиотеки, где Exception не предопределён
Есть в библиотеке requests метод json().
Хочу обрабатывать его  исключения, "если вдруг что не так". Например сервер ответил не json-ом, а чем то другим, ну всякие там проблемы с кодировками и.т.д.
Полез в документацию, потом в исходники, и понял, что в конечном счёт в самом requests всё завязано сразу на две библиотеки:

try:
    import simplejson as json
except ImportError:
    import json

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

try:
   answer = requests.get(url, param, headers).json()
except (???, ???, ???):
   do_my_function(incorrect_answer)

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

Раз уж полезли в исходники, то следует идти до конца. А ещё и документация может помочь.
В документации на requests json() сказано:

In case the JSON decoding fails,
r.json() raises an exception. For example, if the response gets a 204 (No Content), or if the response contains invalid JSON, attempting
r.json() raises
ValueError: No JSON object could be decoded.

Мы должны отлавливать исключение
ValueError:

try:
   answer = requests.get(url, param, headers).json()
except ValueError:
   do_my_function(incorrect_answer)

Если посмотреть исходники json и simplejson, то можно увидеть, что оба пакета используют более точное исключение, унаследованное от
ValueError:
JSONDecodeError. Таким образом, можно сделать и так:

try:
    from simplejson import JSONDecodeError
except ImportError:
    from json import JSONDecodeError
...
try:
   answer = requests.get(url, param, headers).json()
except JSONDecodeError:
   do_my_function(incorrect_answer)


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

J

Justin Sam Jane Paul Fred

Jane Richard Carl Justin

Результат:

['Justin', 'Jane']

Я немного запутался, как выполнить эту задачу

if __name__ == '__main__':
first_letter = input()

first_list = input().rstrip().split()

second_list = input().rstrip().split()

first_letter = input()
first_list = "Justin Sam Jane Paul Fred".split(" ")
second_list = "Jane Richard Carl Justin".split(" ")

output_list = []

for item in first_list:
    if item[0] == first_letter:
        if item in second_list and not item in output_list:
            output_list.append(item)

print(output_list)


last_insert_rowid() в sqlite3 возвращает 0 вместо id
sqlite3 возвращает ноль (или нули если написать FROM table_name). Я жду id, строку, но никак не 0.

cursor.execute("SELECT last_insert_rowid()")
post = cursor.fetchall() # [(0,)]

cursor.execute("SELECT MAX(id) FROM messages_table")
result = cursor.fetchall() # [(8,)]

Сама таблица:

"""CREATE TABLE IF NOT EXISTS messages_table(
id INTEGER PRIMARY KEY,
messages_content_type TEXT NOT NULL,
messages_content TEXT NOT NULL)""")

Я нашел ответ.

cursor.execute("SELECT last_insert_rowid()
работает только если перед ним был в том же подключении была инструкция
insert, иначе 0.


Не отображается index.html при запуске сервера django
Код
views.py

from django.shortcuts import render
from .forms import UserForm

def index(request):
    userform = UserForm()
    return render(request, "index.html", {"form": userform})

Код
Index.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Django Forms</title>
</head>
<body>
    <table>
        {{ form }}
    </table>
</body>
</html>

Код
urls.py

from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
]

Но когда я запускаю сервер я получаю стартовую страницу django, а я хочу получить
index.html

В urls.py должно быть прописано, какую функцию вызывать при обращении к определенному адресу.
К примеру, если нужно чтобы index открывался на главной странице вместо стартовой django:
<code>
from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.index),
]
</code>
Подробнее тут


Вывести сумму чисел, кратных 3 или 5
Необходимо из числа которое введет пользователь, вывести сумму чисел, кратных 3 или 5
Пробую так:

a = int(input('Введите число: '))
for i in range(a):
    if i % 3 == 0 or i % 5 == 0:
        print(sum(i))

Получаю ошибку:

Traceback (most recent call last):
  File "C:/Users/user/Projects/Examples/err.py", line 4, in <module>
    print(sum(i))
TypeError: 'int' object is not iterable

Такой код, тоже ничего не меняет:

print(int(sum(i)))

Та же самая ошибка будет.
Подскажите, где я ошибся?

Попробую привести более понятный для топикстартера код без генераторов

rng = int(input('Введите число: '))     # задаем длину диапазона чисел
useful = []                             # создаем список в который будут добавляться числа удовлетворяющие йсловию
for i in range(rng):                    # для каждого числа в диапазоне
    if i % 3 == 0 or i % 5 == 0:        # проверяем условие
        useful.append(i)                # если удовлетворяет условию добавляем в список

print(sum(useful))                      # суммируем все числа списка и выводим

Ваша ошибка заключалась в том, что вы применяли
sum к неитерируему объекту
int

Ну и если уж с генератором, то, ИМХО, так:

print(sum(i for i in range(int(input('Введите число: '))) if i % 3 == 0 or i % 5 == 0))

Обратите внимание на то, что будут обработаны все числа ДО
rng (в Вашем случае
a) поскольку значение обозначающее правую границу диапазона в диапазон не входит. Что-бы получить диапазон включающий значение заданной правой границы можно использовать
for i in range(a + 1)


Сортировать Словарь в python
Есть словарь, типа такого:
{"player1": 2340, "player2": 51609, "player3": 8781}. Мне нужно составить топ игроков (чем больше очков, тем лучше), и чтобы словарь выглядел так:
{"player2": 51609, "player3": 8781, "player1": 3240}. Я не особо опытный и прошу помочь, до самого что-то не допирает.

Как вариант:
<code>
d = {"player1": 2340, "player2": 51609, "player3": 8781}

list_d = list(d.items())
list_d.sort(key=lambda i: i[1], reverse=True)

print(list_d)
# [('player2', 51609), ('player3', 8781), ('player1', 2340)]

d_new = {i[0]: i[1] for i in list_d }
print(d_new)
# {'player2': 51609, 'player3': 8781, 'player1': 2340}
</code>


Проблема с list index out of range при выполнении замены в .txt файле

name_old = input("Write your old login: ")
password_old = input("Write your old password: ")
file = open("F:\programme\logins.txt", "r")

array = []
for line in file:
    array.append(line.split(" "))

for i in array:
    end_login = i[0].find(";") - 1
    end_pas = i[1].find(";") - 1
    login = i[0][5:end_login]
    pasw = i[1][5:end_pas]
    if name_old == login and password_old == pasw:
        name_new = input("Write new login: ")
        password_new = input("Write new password: ")
        old_data = file.read()
        new_data = old_data.replace(name_old and password_old, name_new and password_new)
file.close()
with open ('F:\programme\logins.txt', 'w') as f:
    f.write(new_data)

В текстовом файле хранится

log:"admin"; pas:"admin";
log:"joly"; pas:"joly";

ошибка находится в строке
end_pas = i[1].find(";") - 1
Помогите пожалуйста исправить эту ошибку.

Советую при отладке печатать в консоль значения
end_login,
end_pas,
login,
pasw.
Так как
i[1] в конце имеет символ конца строки
\n, то нужно вычитать
2.
Поэтому у Вас
if ни разу не выполняется, и скорее всего программа падает на завершающей файл
logins.txt пустой строке, которая не имеет пробела, поэтому не разбивается на два элемента.
Данный блок совсем нехорош:

    old_data = file.read()
    new_data = old_data.replace(name_old and password_old, name_new and password_new)

Файл уже считан, чтобы считать его снова, его нужно перемотать вначало
file.seek(0)

old_data.replace(name_old and password_old, name_new and password_new) - очень по-человечески понятно, но неправильно. Правильно:
old_data.replace(name_old, name_new).replace(password_old, password_new)
Такой подход совершенно нехорош тем, что заменяет все вхождения name_old и password_old в файле, а не конкретную найденную запись. Более правильный подход - пересоздать запись i, которая уже найдена. Не забыть сделать
break для выхода из цикла.

   i[0] = 'log:"{0}";'.format(name_new)
   i[1] = 'pas:"{0}\n";'.format(password_new)
   break

А потом в отдельном цикле пересоздать весь файл паролей:

    with open ('F:\programme\logins.txt', 'w') as f:
        for i in array:
             f.write(" ".join(i))


DRF как передавать данные массивом?
Есть у меня модель Profile, а также модель Rating:

class Profile(models.Model):
    ....

class Rating(models.Model):
    profile = models.ForeignKey(
        Profile, on_delete=models.CASCADE, related_name="rating",
        verbose_name="Рейтинг", blank=True, null=True
    )
    rating = models.IntegerField("Оценка")

Я передаю данные о рейтинге через такой сериализатор:

class RatingSerializer(serializers.ModelSerializer):
    # Рейтинг специалистов

    class Meta:
        model = Rating
        fields = ['rating']

class ProfileSerializer(serializers.ModelSerializer):
    # Профиль юзера

    rating = RatingSerializer(many=True)

    class Meta:
        model = Profile
        fields = [
            ...
            'rating'
        ]

Проблема в том, что данные возвращаются мне как массив обьектов, однако мне нужно, чтобы это был массив со значениями из полей rating, то есть:
[5, 3, 4, 4, 5]
Вопрос, как это сделать?
Пока что выдает таким образом:

"rating": [
        {
            "rating": 5
        },
        {
            "rating": 4
        },
        {
            "rating": 5
        }
 ],

class RatingSerializer(serializers.ModelSerializer):
    # Рейтинг специалистов

    class Meta:
        model = Rating
        fields = ['rating']

    def to_representation(self, instance):
        ret = super().to_representation(instance)
        return ret['rating']


Проверка на overlapped part в алгоритме «Longest Repeated Substring»?
Реализовываю решение задачи:

You have to return a substring length. You need to find a substring
  that repeats more than once in a given string. This reiteration
  shouldn't have overlaps. For example, in a string "abcab" the longest
  substring that repeats more than once is "ab", so the answer should be
  2 (length of "ab")
Input: String.
Output: Int.
Example:
double_substring('aaaa') == 2 double_substring('abc') == 0
  double_substring('aghtfghkofgh') == 3 # fgh

Вот какое решение я написал, исходя из найденого мной алгоритма:

"For each two adjacent suffixes on the sorted suffix array, count the
  length of the common prefix (Note: should avoid counting the
  overlapped part). The longest repeated prefix appearing first on the
  original input string is the result."

Код:
<code>
def function(string):
    suffixes = sorted([string[i:] for i in range(len(string))])
    print(suffixes)

    longest_prefix = 0

    for i in range(0, len(suffixes) - 1):
        first_suffix = suffixes[i]
        second_suffix = suffixes[i+1]
        counter = 0
        for j in range(0, min(len(first_suffix), len(second_suffix))):
            if first_suffix[j] == second_suffix[j]:
                counter += 1
            else:
                break

        if counter > longest_prefix:
            longest_prefix = counter
    return longest_prefix

print(function('aghtfghkofgh'))
</code>
Этот код плохой тем, что он не учитывает overlapped parts. То есть для строки "аааа" он возвратит 3, но эти строки пересекаются. Как дополнить этот код, чтобы он проверял, не пересекаются ли подстроки?

Могу предложить такое решение:

def double_substring(string):
    length = len(string)
    limit = int(length / 2)
    for max_ in range(limit, 0, -1):
        overlaps = []
        for i in range(0, 1+length-max_*2):
            offset = i + max_
            part = string[i:offset]
            if part in overlaps:
                continue
            index = string.find(part, i + 1)
            while index > 0:
                if index < offset:
                    overlaps.append(part)
                    break
                offset = index + max_
                index = string.find(part, index + 1)
                if index < 0:
                    print(part)
                    return max_
    return 0

print(double_substring('aaaa'))
print(double_substring('abcab'))
print(double_substring('aghtfghkofgh'))
print(double_substring('abc'))
print(double_substring('abbaabbadabbaabba'))

Рассуждения такие:

максимальная длина повторяющейся непересекающейся подстроки будет не более длины строки, деленной на 2;
так как мы ищем максимум, то начинаем поиск с максимальной строки, спускаясь до минимума. При нахождении - сразу выход из циклов;
оптимизируем перебор вложенного цикла до длины строки минус текущая длина подстроки, умноженная на 2;
ведём список пересекающихся подстрок, чтобы не нарваться при дальнейшем сканировании строки;
каждая подстрока в цикле проверяется на пересечение со своей следующей копией

И, кстати, правильный ответ для
double_substring('aaaa') это 1, так как
aa пересекается с собой даже два раза:
(a(a)a)a,
a(a(a)a)


При нажатии на кнопку ничего не происходит [закрыт]

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

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

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

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

<code>
from tkinter import *

root=Tk()
array=[]

def f(self):
    print(self.entry.get())

class MyClass:
    def __init__(self):
        self.entry=Entry(root)
        self.button=Button(root,command=f(self))
        self.entry.pack()
        self.button.pack()

array.append(MyClass())
</code>

Если коротко, то вот здесь вы вызываете функцию
f, а результат ее выполнения передаете как параметр
command в
Button:

self.button=Button(root,command=f(self))

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

class MyClass:
    def __init__(self):
        self.entry=Entry(root)
        self.button=Button(root,command=self.f)
        self.entry.pack()
        self.button.pack()

    def f(self):
        print(self.entry.get())

array.append(MyClass())

Передавать параметр
self в данном случае не нужно, он будет передан в метод автоматически.


Функция повторно не выполняется
Я создаю игру.При нажатии пробела должен спавниться бот в рандомном месте, но если я нажимаю на пробел повторно, то функция не выполняется
<code>
import random
import pygame

GREEN = (0, 255, 0)

widht = 11
height = 11
FPS = 40

# создание спрайта водорослей
class tree():
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((widht, height))
        self.image.fill(GREEN)
        self.rect = self.image.get_rect()
        self.rect.x = random.randrange(1, 1200)
        self.rect.y = random.randrange(1, 900)
        self.G = random.randint(10, 100)
    def draw(self, win):
        pygame.draw.rect(win, self.color, (x, y, widht, self.height))

    def update(self):
        self.G += 10

# Создаем игру и окно
pygame.init()  # экран игры
pygame.mixer.init()
win = pygame.display.set_mode((1200, 900))
pygame.display.set_caption("Evolucion")
clock = pygame.time.Clock()
all_sprites = pygame.sprite.Group()
trees = pygame.sprite.Group()
tree = tree()
trees.add_internal(tree)

def spawnt():
    all_sprites.add_internal(tree)
    trees.add_internal(tree)

# Цикл игры
run = True
while run:

    pygame.time.delay(50)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                    spawnt()

    all_sprites.update()

    win.fill((255, 255, 255))
    all_sprites.draw(win)
    pygame.display.update()

    pygame.display.flip()

pygame.quit()
</code>

У вас по крайней мере две ошибки.
Во-первых, у вас имя
tree используется и как название класса, и как имя переменной для конкретного экземпляра. Так делать нельзя, им нужно дать разные имена. Обычно имя класса пишут с большой буквы, и я рекомендую придерживаться этого стандарта.
Вторая ошибка в том, что вы один раз создаёте один объект класса, и потом пытаетесь много раз тот же самый объект добавить на поле. Но это тот же самый объект, и у него будут те же самые координаты, так что сколько бы вы не нажимали пробел, объект будет в том же самом месте.
Вам нужно каждый раз создавать новый объект при вызове функции
spawnt.
Таким образом, с учётом моих исправлений, ваш код будет выглядеть так:

import random
import pygame

GREEN = (0, 255, 0)

widht = 11
height = 11
FPS = 40

# создание спрайта водорослей
class Tree():                                             # Исправил здесь

    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((widht, height))
        self.image.fill(GREEN)
        self.rect = self.image.get_rect()
        self.rect.x = random.randrange(1, 1200)
        self.rect.y = random.randrange(1, 900)
        self.G = random.randint(10, 100)

    def draw(self, win):
        pygame.draw.rect(win, self.color, (x, y, widht, self.height))

    def update(self):
        self.G += 10

# Создаем игру и окно
pygame.init()  # экран игры
pygame.mixer.init()
win = pygame.display.set_mode((1200, 900))
pygame.display.set_caption("Evolucion")
clock = pygame.time.Clock()
all_sprites = pygame.sprite.Group()
trees = pygame.sprite.Group()
#tree = tree()                                            # Убрал эти две строчки
#trees.add_internal(tree)

def spawnt():
    tree = Tree()                                         # И добавил эту строчку
    all_sprites.add_internal(tree)
    trees.add_internal(tree)

# Цикл игры
run = True
while run:

    pygame.time.delay(50)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                    spawnt()

    all_sprites.update()

    win.fill((255, 255, 255))
    all_sprites.draw(win)
    pygame.display.update()

    pygame.display.flip()

pygame.quit()


Как вызвать функцию в Python из C++?
Есть код:
<code>
#include <iostream>
using namespace std;

void hello() {
    cout << "Hello!" << endl;
}
</code>
Как из Python вызвать это функцию?

Если вам нужно выполнить какой-то код на С++, можно написать на С++ отдельную программу, скомпилировать её и вызвать из python-скрипта как отдельный процесс. При этом передавать аргументы в неё можно можно через argv или через файлы. Возвращать значения можно через stdout или через файлы.
Пример.

#include <iostream>

void hello(std::string name) {
    std::cout << "Hello, " << name << std::endl;
}

int main(int argc, char* argv[]) {
    hello(argv[1]);
}

Компилируем программу в
ConsoleApplication.exe. В python запускаем её, передавая один аргумент, и получаем вывод этой программы в stdout.

p = subprocess.run(["./ConsoleApplication.exe", 'Bob'], capture_output=True)
output = str(p.stdout, 'utf8')
print(output)  # Hello, Bob


Как после каждого символа ставить точку?

data = 'ghbdtn'

Как после каждого символа ставить точку(любой знак)?! Или есть другой способ
  как из каждого символа получить такой результат?

print(data.split('.'))

Чтобы в конце получилось что-то вроде этого =>

['g', 'h', 'b', 'd', 't', 'n', '']

Чтобы получить такой результат как в вопросе:
<code>
print(list(data))
</code>


Проблема сравнения данных из файла с вводом пользователя
Программа - викторина с 4 вариантами ответа . Для проведения игры нужно данные из текстового файла переместить по переменным . Данные представлены в файле в таком виде :

ТЕМА ВИКТОРИНЫ
1 БЛОК ДАННЫХ
2 БЛОК ДАННЫХ
...

Каждый блок - это

ТЕМА ВОПРОСА
ВОПРОС
1 ВАРИАНТ ОТВЕТА
2 ВАРИАНТ ОТВЕТА
3 ВАРИАНТ ОТВЕТА
4 ВАРИАНТ ОТВЕТА
ПРАВИЛЬНЫЙ ОТВЕТ
КОММЕНТАРИЙ К ВОПРОСУ

Вот моя программа :

import sys

def open_file (way,mode,coding) :
    """
    Проверяет наличие файла на нужном месте и открывает его
    """
    try :
        f = open(way,mode,encoding=coding)
    except IOError as e :
        print ("Невозможно открыть файл !\n")
        print ("Произошла ошибка : \n\t"+e)
        input ("Нажмите Enter , чтобы выйти ...")
        sys.exit()
    else :
        return f

def welcome (f) :
    """
    Приветствуем пользователя
    """
    print ("\t\tДобро пожаловать в игру \"Викторина\"\n")
    print (f.readline())

def data (f) :
    """
    Распределяет данные по переменным
    """
    heading = f.readline() # заголовок
    question = f.readline() # вопрос
    answers = []  # список ответов
    for i in " "*4:
        answers.append(f.readline())
    true = f.readline() # правильный ответ
    comment = f.readline() # комментарий
    heading, question, answers, true, comment = heading, question, answers, true, comment.rstrip() # убираем из конца \n
    return heading , question , answers , true , comment

def game (f) :
    """
    Проводит игру и возвращает количество баллов
    """
    pools = 0

    # присваиваем данные переменным
    heading , question , answers , true , comment = data(f)
    while heading != "" :

        print (heading,"\n")
        print (question,"\n")

        number = 0
        for answer in answers  :
            number += 1
            print(number, "-", answer)

        # принимаем ответ
        user_answer = input ("Введите правильный ответ : ")

        # проверяем
        if user_answer == true :
            pools += 1
            print ("Правильно !")
        else :
            print ("Неправильно !")
            print (user_answer == true , type(user_answer),user_answer,type(true),true) # узнаём тип данных и значение переменных
            print ("Правильный ответ -",true)

        print (comment)
        # присваиваем данные переменным для следующего цикла
        heading , question , answers , true , comment = data(f)

    f.close()
    return pools

def end (pools) :
    """
    Заканчивает игру
    """
    print ("\nВикторина окончена !")
    print ("\nВы набрали",pools,"баллов .")

def main () :
    """
    Запускает игру
    """
    f = open_file("quiz.txt","r","utf-8")
    welcome (f)
    pools = game(f)
    end(pools)

main()
input ("Нажмите Enter , чтобы выйти ...")

Вот файл из которого я беру данные , в нём один блок

Столовая из 2008
Вкусный борщ , с капусткой , но не красный
Что добавляется в борщ ?
сосисочки
вкусный чай
непонятный салат
капуста
4
Но чай - это сила !

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

                Добро пожаловать в игру "Викторина"

Столовая из 2008

Вкусный борщ , с капусткой , но не красный

Что добавляется в борщ ?

1 - сосисочки

2 - вкусный чай

3 - непонятный салат

4 - капуста

Введите правильный ответ : 4
Неправильно !
False <class 'str'> 4 <class 'str'> 4

Правильный ответ - 4

Но чай - это сила !

Викторина окончена !

Вы набрали 0 баллов .
Нажмите Enter , чтобы выйти ...

Я думал , что проблема в том , что "4" != "4\n" . Я удалил \n из конца каждой строки , но ничего не изменилось . Почему - то значения переменных одинаковы , тип тоже , но они не равны . Что это такое и как исправить ?

Первый вариант

 user_answer = int(input ("Введите правильный ответ : "))

        # проверяем
        if user_answer == int(true) :

Второй вариант
в момент чтения из файла

 true = f.readline() # правильный ответ
 true=true[:-1]

Тогда сработает

if user_answer == true :

Дело именно в том, что у вас true='4\n'
Или в момент чтения храните сразу как число.


Без учета регистра python
Имеется список зарегистрированных пользователей, как сделать чтоб при регистрации нового пользователя не учитывался регистр?:
<code>
current_users = ['admin', 'Eric', 'David', 'Michael', 'Raul']
new_users = ['Ravil', 'michael', 'raul']
for new_user in new_users:
    введите сюда кодif new_user in current_users:
        print("Unfortunately, this name " + new_user + " is already present in the system.")
    else:
        print("This name " + new_user + " is available.")
</code>

Приводить к одному регистру.

Например так:
<code>
current_users = ['admin', 'Eric', 'David', 'Michael', 'Raul']
new_users = ['Ravil', 'michael', 'raul']
...
current_users = [user.capitalize() for user in current_users]
new_users = [user.capitalize() for user in new_users]
...
</code>


Получить из xml более точные данные
Есть тег
xml:

<authors>
<author lang="EN" num="1">
<lastname>Emel'yanov</lastname>
<initials>I G</initials>
<authorid>17028</authorid>
<spin>2308-0271</spin>
<email>[email protected]</email>
<affiliations>
<affiliation lang="EN" num="1">
<orgname>Ural Federal University</orgname>
<address>Ekaterinburg, Russia</address>
</affiliation>
<affiliation lang="EN" num="2">
<orgname>Institute of Engineering Science, Ural Branch of the Russian Academy of Sciences</orgname>
<address>Ekaterinburg, Russia</address>
</affiliation>
</affiliations>
</author>
-<author lang="EN" num="2">
<lastname>Mironov</lastname>
<initials>V I</initials>
-<affiliations>
-<affiliation lang="EN" num="1">
<orgname>Ural Federal University</orgname>
<address>Ekaterinburg, Russia</address>
</affiliation>
-<affiliation lang="EN" num="2">
<orgname>Institute of Engineering Science, Ural Branch of the Russian Academy of Sciences</orgname>
<address>Ekaterinburg, Russia</address>
</affiliation>
</affiliations>
</author>
-<author lang="EN" num="3">
<lastname>Lukashuk</lastname>
<initials>O A</initials>
<authorid>607446</authorid>
<spin>9967-3730</spin>
-<affiliations>
-<affiliation lang="EN" num="1">
<orgname>Ural Federal University</orgname>
<address>Ekaterinburg, Russia</address>
</affiliation>
</affiliations>
</author>
</authors>

Мне из него нужно получить ФИО авторов и все организации, привязанные к авторам.
Делаю так:

def get_author_full_name(author_node) -> str:
    return str(author_node.lastname) + ' ' + str(author_node.initials) + ' ' + str(author_node.orgname)

def get_authors(item) -> list:
    authors = item.select('authors > author')

    num_author_by_authors = dict()

    for author in authors:
        num = author['num']
        if num not in num_author_by_authors:
            num_author_by_authors[num] = []

        num_author_by_authors[num].append(author)

    authors_full_name = []

    for num, authors in num_author_by_authors.items():
        if len(authors) == 1:
            full_name = get_author_full_name(authors[0])
            authors_full_name.append(full_name)

        else:
            full_name = get_author_full_name(authors[0])

            for author in authors:
                if author['lang'] == "RU":
                    full_name = get_author_full_name(author)
                    break

            authors_full_name.append(full_name)

    return authors_full_name

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

["<lastname>Emel'yanov</lastname> <initials>I G</initials> <orgname>Ural Federal University</orgname> <orgname>Institute of Engineering Science, Ural Branch of the Russian Academy of Sciences</orgname>", '<lastname>Mironov</lastname> <initials>V I</initials> <orgname>Ural Federal University</orgname> <orgname>Institute of Engineering Science, Ural Branch of the Russian Academy of Sciences</orgname>', '<lastname>Lukashuk</lastname> <initials>O A</initials> <orgname>Ural Federal University</orgname>']

Раз точкой заполнения является одна функция, то в ней и нужно сделать доработку:

def get_author_full_name(author_node) -> str:
    text = '{} {}'.format(author_node.lastname, author_node.initials)

    for orgname in author_node.select('affiliations > affiliation > orgname'):
        text += ' {}'.format(orgname)

    return text

Результат парсинга (построчно):

<lastname>Emel'yanov</lastname> <initials>I G</initials> <orgname>Ural Federal University</orgname> <orgname>Ural Federal University</orgname> <orgname>Institute of Engineering Science, Ural Branch of the Russian Academy of Sciences</orgname>
<lastname>Mironov</lastname> <initials>V I</initials> <orgname>Ural Federal University</orgname> <orgname>Ural Federal University</orgname> <orgname>Institute of Engineering Science, Ural Branch of the Russian Academy of Sciences</orgname>
<lastname>Lukashuk</lastname> <initials>O A</initials> <orgname>Ural Federal University</orgname> <orgname>Ural Federal University</orgname>

Весь код:

from bs4 import BeautifulSoup

def get_author_full_name(author_node) -> str:
    text = '{} {}'.format(author_node.lastname, author_node.initials)

    for orgname in author_node.select('affiliations > affiliation > orgname'):
        text += ' {}'.format(orgname)

    return text

def get_authors(item) -> list:
    num_author_by_authors = dict()

    for author in item.select('authors > author'):
        num = author['num']
        if num not in num_author_by_authors:
            num_author_by_authors[num] = []

        num_author_by_authors[num].append(author)

    authors_full_name = []

    for num, authors in num_author_by_authors.items():
        if len(authors) == 1:
            full_name = get_author_full_name(authors[0])
            authors_full_name.append(full_name)

        else:
            full_name = get_author_full_name(authors[0])

            for author in authors:
                if author['lang'] == "RU":
                    full_name = get_author_full_name(author)
                    break

            authors_full_name.append(full_name)

    return authors_full_name

xml = """
<authors>
    <author lang="EN" num="1">
        <lastname>Emel'yanov</lastname>
        <initials>I G</initials>
        <authorid>17028</authorid>
        <spin>2308-0271</spin>
        <email>[email protected]</email>
        <affiliations>
            <affiliation lang="EN" num="1">
                <orgname>Ural Federal University</orgname>
                <address>Ekaterinburg, Russia</address>
            </affiliation>
            <affiliation lang="EN" num="2">
                <orgname>Institute of Engineering Science, Ural Branch of the Russian Academy of Sciences</orgname>
                <address>Ekaterinburg, Russia</address>
            </affiliation>
        </affiliations>
    </author>
    <author lang="EN" num="2">
        <lastname>Mironov</lastname>
        <initials>V I</initials>
        <affiliations>
            <affiliation lang="EN" num="1">
                <orgname>Ural Federal University</orgname>
                <address>Ekaterinburg, Russia</address>
            </affiliation>-<affiliation lang="EN" num="2">
                <orgname>Institute of Engineering Science, Ural Branch of the Russian Academy of Sciences</orgname>
                <address>Ekaterinburg, Russia</address>
            </affiliation>
        </affiliations>
    </author>
    <author lang="EN" num="3">
        <lastname>Lukashuk</lastname>
        <initials>O A</initials>
        <authorid>607446</authorid>
        <spin>9967-3730</spin>
        <affiliations>
            <affiliation lang="EN" num="1">
                <orgname>Ural Federal University</orgname>
                <address>Ekaterinburg, Russia</address>
            </affiliation>
        </affiliations>
    </author>
</authors>
"""

root = BeautifulSoup(xml, 'lxml')

for author in get_authors(root):
    print(author)


Не могу установить модуль Python 'Discord'
Приложу все, что могу.
Сразу извиняюсь за название компьютера, так вышло :/
Сама ошибка выскакивает после

Installing build dependencies ... done
  Getting requirements to build wheel ... done
    Preparing wheel metadata ... error

    ERROR: Command errored out with exit status 1:
 command: 'c:\program files\python38\python.exe' 'c:\program files\python38\lib\site-packages\pip\_vendor\pep517\_in_process.py' prepare_metadata_for_build_wheel 'C:\Users\865B~1\AppData\Local\Temp\tmprxncial_'
     cwd: C:\Users\долабеб\AppData\Local\Temp\pip-install-4l5nk_7n\aiohttp
Complete output (24 lines):
running dist_info
creating C:\Users\долабеб\AppData\Local\Temp\pip-modern-metadata-pzevikws\aiohttp.egg-info
writing C:\Users\долабеб\AppData\Local\Temp\pip-modern-metadata-pzevikws\aiohttp.egg-info\PKG-INFO
writing dependency_links to C:\Users\долабеб\AppData\Local\Temp\pip-modern-metadata-pzevikws\aiohttp.egg-info\dependency_links.txt
writing requirements to C:\Users\долабеб\AppData\Local\Temp\pip-modern-metadata-pzevikws\aiohttp.egg-info\requires.txt
writing top-level names to C:\Users\долабеб\AppData\Local\Temp\pip-modern-metadata-pzevikws\aiohttp.egg-info\top_level.txt
writing manifest file 'C:\Users\долабеб\AppData\Local\Temp\pip-modern-metadata-pzevikws\aiohttp.egg-info\SOURCES.txt'
reading manifest file 'C:\Users\долабеб\AppData\Local\Temp\pip-modern-metadata-pzevikws\aiohttp.egg-info\SOURCES.txt'
reading manifest template 'MANIFEST.in'
Error in sitecustomize; set PYTHONVERBOSE for traceback:
SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xe4 in position 0: invalid continuation byte (sitecustomize.py, line 21)
warning: no files found matching 'aiohttp' anywhere in distribution
warning: no previously-included files matching '*.pyc' found anywhere in distribution
warning: no previously-included files matching '*.pyd' found anywhere in distribution
warning: no previously-included files matching '*.so' found anywhere in distribution
warning: no previously-included files matching '*.lib' found anywhere in distribution
warning: no previously-included files matching '*.dll' found anywhere in distribution
warning: no previously-included files matching '*.a' found anywhere in distribution
warning: no previously-included files matching '*.obj' found anywhere in distribution
warning: no previously-included files found matching 'aiohttp\*.html'
no previously-included directories found matching 'docs\_build'
writing manifest file 'C:\Users\долабеб\AppData\Local\Temp\pip-modern-metadata-pzevikws\aiohttp.egg-info\SOURCES.txt'
creating 'C:\Users\долабеб\AppData\Local\Temp\pip-modern-metadata-pzevikws\aiohttp.dist-info'
error: invalid command 'bdist_wheel'
----------------------------------------

ERROR: Command errored out with exit status 1: 'c:\program files\python38\python.exe' 'c:\program files\python38\lib\site-packages\pip_vendor\pep517_in_process.py' prepare_metadata_for_build_wheel 'C:\Users\865B~1\AppData\Local\Temp\tmprxncial_' Check the logs for full command output.
Версия Python 3.8.0 64-bit. Система 64-х битная.

Сначала
pip install wheel, затем (но не обязательно)
python setup.py bdist_wheel


Помогите разобраться с кодом, не создаёт записи в колонках
<code>
    #c.execute("CREATE TABLE link (id int, firstlink TEXT(450), secondarylink TEXT(450));")
import sqlite3
conn = sqlite3.connect('my.sql')
c = conn.cursor()
a  =str(input("Ввод ссылки1: "))
b  =str(input("Ввод ссылки2: "))
n  =int(input("Ввод id: "))
c.execute("INSERT INTO link (firstlink,secondarylink,id) VALUES (?,?,?);",(a,b,n))
conn.commit()
c.execute("SELECT * FROM link;")
print (c.fetchone())
c.close()
</code>
Весь прикол,в том ,что он показывает только одну запись. Я не могу понять почему так и как вывести всё остальное.

Замените
c.fetchone
() на
c.fetchall
().

fetchone()
Получает следующую строку из результатов выборки, возвращает одну последовательность значений (столбцов) или
None, если перебрали все результаты выборки.

fetchall()
Возвращает все (оставшиеся) строки из результатов выборки в виде списка (
list). Возвращает пустой список, если уже были выбраны все результаты выборки.

fetchone
fetchall