Каким образом можно в массиве подсчитать количество номеров ([1] параметр)?

filename = input('Enter name of file: ')
file = open(filename, 'r')
mass = []
mass1 = []

mass = file.readlines()
for i in mass:
     mass1.append(i.strip().split(','))

for i in mass1:
      if(int(i[1])<195000):
         print(len(int[1]) + 'обслуживает оператор')
file.close()

Файл который считывает прога:

Franklin,195130,Avenu,312,20

Tramp,193484,Avenu,210,20

Linkoln,195347,Avenu,255,20

Eltsin,193584,Bosforska,450,30

Kirov,195893,Bosforska,430,30

Andropov,195983,Bosforska,420,30

Brezhnev,193849,Lenina,345,40

Stalin,195738,Lenina,349,40

Lenin,193948,Lenina,330,40

Как можно подсчитать отдельно номера которые начинаются на
193*** и на
195*** отдельно?

Если просто посчитать количество:
<code>
import math

filename = input('Enter name of file: ')
file = open(filename, 'r')
mass = file.readlines()
file.close()
m193 = 0
m195 = 0

for i in mass:
    row = i.strip().split(',')

    if len(row) > 1:
        n = math.floor(int(row[1]) / 1000)

        if n == 193:
            m193 += 1
        elif n == 195:
            m195 += 1

print('193*: ' + str(m193))
print('195*: ' + str(m195))
</code>
p/s: В фрагменте файла строка Linkoln имеет неверный формат


Не получается понять где ошибка
Прога работает нормально, но до момента когда идет поиск. Если нажать ctrl + f в браузере, то будет поиск. Я решил сделать также, но ищется у меня только слово "Это" (самое первое), даже если я написал слово которого в тексте нету. Вот мой ультра-корявый код:
<code>
import time

print("Привет, это тест поиска. Просто нажми ctrl + f")
print("Это текст. Читая его, вы пополняете свой мозг новой информацией. Но, есть и старая информация, обычно это что-то вроде молоко белое. Вы можете поискать что-нибудь в этом тексте, если вы не знаете то прочитайте текст выше. Спасибо за внимание")

a = "Это текст. Читая его, вы пополняете свой мозг новой информацией. Но, есть и старая информация, обычно это что-то вроде молоко белое. Вы можете поискать что-нибудь в этом тексте, если вы не знаете то прочитайте текст выше. Спасибо за внимание"
words = a.split(" ")

keyboard.wait("Ctrl + F")

for x in words: # Вот здесь начинается звиздец
    k = input("Введите какое-либо слово из текста: ")
    l = x.find(k)
    if "n" != -1:
        print("Слово, которые вы нашли: " + str(x) )
    else:
        print("Вы неправильно ввели слово")
    time.sleep(600)
</code>

Вместо вашего

for x in words: # Вот здесь начинается звиздец
    k = input("Введите какое-либо слово из текста: ")
    l = x.find(k)
    if "n" != -1:
        print("Слово, которые вы нашли: " + str(x) )
    else:
        print("Вы неправильно ввели слово")
    time.sleep(600)

используйте

k = input("Введите какое-либо слово из текста: ")
if k in words:
    print("Слово, которые вы нашли: " + k )
else:
    print("Вы неправильно ввели слово")


Как пропустить строки по условию - не является class 'int'?

import pandas as pd

price_from = 15000
price_to = 20000
qry = "@price_from <= `цена` <= @price_to and 'есть доставка' in `доставка`"

(pd
 .read_csv('data_file.csv', sep=';')
 .query(qry).sort_values('цена', ascending=False)
 .to_csv('new-data.csv', sep=';', index=False))

Как пропустить перед обработкой строки, в которых ячейка в колонке
цена не является
class 'int', чтобы корректно обработался и сохранился файл?

Попробуйте так:
<code>
df = pd.read_csv('data_file.csv', sep=';')
df['цена'] = pd.to_numeric(df['цена'], errors= 'coerce')

df = df.dropna(subset=['цена'])
df['цена'] = df['цена'].astype(int)

(df
 .query(qry)
 .sort_values('цена', ascending=False)
 .to_csv('new-data.csv', sep=';', index=False))
</code>


Полоса загрузки на Python 3.x
Хочу сделать полосу загрузки на подобии как в
apt на
Linux при скачивании файлов пакетов или их установке.
Там как то надо стирать строки, искал об этом, но многие скрипты не работали почему-то.

In [1]: from tqdm import tqdm

In [2]: import time

In [3]: for i in tqdm(range(10)):
   ...:     time.sleep(2)
   ...:
 30%|██████████████████████████████▌                                                                       | 3/10 [00:06<00:14,  2.00s/it]


Прочитать файл docx в python
Столкнулся с такой проблемой, мне нужно прочитать файл docx в Python, НО именно код файла, а не содержимый текст.

with open('MD_2.docx', encoding='cp1251', newline='') as file:
    print(file.readline())

Пытаюсь прочитать обычным методом, но не получается из-за ошибки

UnicodeDecodeError: 'charmap' codec can't decode byte 0x98 in position 631: character maps to <undefined>

Как можно прочитать код файла ?

DOCX-файл это zip-архив. Распакуй его с помощью ZipFile, а затем прочитай файл "название документа/word/document.xml". В этом файле находится текст


Как правильно завершить многопоточный скрипт на Python
Пишу чат, есть серверная и клиентская часть, работает по TCP. Реализован с помощью многопоточности.
Возникла проблема, как правильно завершать работу таких скриптов? В данном случае, в
__init__ в потоке
MainThread, вызывает функцию
send_message, в потоке
Thread-1.

__init__ в цикле проверяет, если
kill_treads = False то цикл работает. По
/stop, я переключаю
kill_treads в
True, что вызывает остановку
MainThread, и
Thread-1 становится
MainThread. Я проверяю, если функция
send_message находится в потоке
MainThread, то кидаю выход.
Но, после ввода
/stop, выход не происходит, приходится вводить ещё что-то что бы выключилось.
Как это можно исправить и правильно завершить многопоточный скрипт?

import socket
import threading
import sys

class Client:
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    def send_message(self):
        while True:

            if threading.currentThread().getName() == 'MainThread':
                # если  текущий поток главный, то выходим
                print('Exit')
                self.sock.close()   # закрываем соединение
                sys.exit(1)         # выходим из скрипта

            try:

                # print('Send message: ', end='')
                message = input()
                if message == '/stop':          # для выхода из программы
                    self.kill_treads = True     # выключает главный цикл

                else:
                    # печатаем сообщение
                    self.sock.send(bytes(message, 'utf-8'))

            except EOFError:
                print('[Something gona wrong. Connection lost]')
                self.kiil_treads = True

    def __init__(self):
        self.kill_treads = False
        # запускаем сервер, заставляя слушать локалхост
        self.sock.connect(('localhost', 4242))
        print('Соединение активированно\n')
        thread = threading.Thread(target=self.send_message)
        thread.daemon = True
        thread.start()

        while not self.kill_treads:

            data = self.sock.recv(1024)
            if not data:
                break
            print(str(data, 'utf-8'))
            print(data)

if __name__ == '__main__':
    client = Client()
    client.send_message()

Конкретно в этом случае проще всего закрыть сокет:

 if message == '/stop':          # для выхода из программы
    self.kill_treads = True     # выключает главный цикл
    self.sock.close()           # закрывает сокет. В читающем потоке будет брошено исключение

Брошенное исключение, нужно поймать и обработать, чтобы програма не завершалась аварийно:

try:
   data = self.sock.recv(1024)
except Exception as e:
   break


Удалить из списка все уникальные элементы с шагом 2 и предшествующий уникальному элемент Python
Есть список
list1 = [1, [], 2, [1, 2], 3, [1, 2], 4, [3, 4, 5], 5, [], 6, [1, 2], 7, [1, 2, 3, 4, 5], 8, [1]], нужно удалить из списка все уникальные элементы начиная с
list1[1] с шагом 2 + предшествующий уникальному элемент. Т.е. должен получиться список
list2 = [1, [], 2, [1, 2], 3, [1, 2], 5, [], 6, [1, 2]]. Подскажите, пожалуйста, как быстро это сделать на python, может есть какие-нибудь функции в библиотеках?

Как вариант:
<code>
list1 = ... # консоль или сразу задается
list2 = list1.copy()
i = 1
while(i <= len(list1)):
    if list1.count(list1[i]) == 1:
        list2.remove(list2[i])
        list2.remove(list2[i-1])
        i += 2
print(list2)
</code>


С чего начать при изучении SQL в Python?
Хочу научиться работать с SQL в python. С чего начать?

Нужно ли скачать phpMyAdmin?
Нужно ли скачать MySQL?
Какую библиотеку использовать mysql или PyMySQL?

Так вы хотите научиться языку SQL или использованию баз данных в Питоне?
Если первое, то возьмите какой-нибудь учебник по SQL, учите теорию, конструкции, решайте задачи. Можно установить MySQL, можно использовать SQLite из Питона, можно учиться даже в браузере с SQLFiddle. И хорошенько усвойте термины: СУБД, БД, SQL, MySQL и прочее, что встретится.
Материалы по SQL:

W3Schools (eng)
SchoolsW3 (рус)
Серия уроков на ITProger
Ещё серия уроков
Запуск SQL в браузере
И много чего ещё найти можно

Кстати, если целитесь на MySQL, то научитесь работать с консольным клиентом этой СУБД – документация здесь.

Если Вы это уже более-менее освоили и хотите научиться использовать базы данных из Python, то вот есть 2 варианта, через свой SQL и DB-API или посредством ORM:
1. DB-API:

Хабр: Python, работа с базой данных
Официальная документация SQLite (eng)

2. ORM – Object-Relational Mapping:

Peewee peewee:

Хабр: Python, используем ORM

SQLAlchemy sqlalchemy:

Официальная документация SQLAlchemy (eng)
ВикиУчебник: SQLAlchemy

Есть ещё Django-ORM, но это только если весь django собираетесь изучать.


Умножить значении колонки в зависимости от значение строк
Есть данные где суммы указаны в валютах USD, RUB.
Мне необходимо с конвертировать значение этого столбца в национальную валюту и записать полученное число в отдельный столбец.
Пример фрейма:
Столбец
NAM_CCY_SHORT содержит записи тип валюты -
USD, RUB и TJS и столбец
AMT_FACE_VALUE

    NAM_CCY_SHORT   AMT_FACE_VALUE
0   TJS             12000.0
1   USD             5000.0
2   TJS             2000.0
3   USD             2500.0
4   TJS             8000.0

Необходимо в зависимости от значения столбца
NAM_CCY_SHORT выполнить умножение значение столбца
AMT_FACE_VALUE на число курса валют и записать в отдельный столбец
СONVERTED


Как декодировать тело письма?
Python3 -
Мой код:
<code>
mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login(MAIL, PASSWORD)
mail.list()

# Выводит список папок в почтовом ящике.
mail.select("inbox")  # Подключаемся к папке "входящие".

result, data = mail.search(None, "ALL")

ids = data[0]  # Получаем сроку номеров писем
id_list = ids.split()  # Разделяем ID писем
latest_email_id = id_list[-1]  # Берем последний ID

result, data = mail.fetch(latest_email_id, "(RFC822)")  # Получаем тело письма (RFC822) для данного ID

raw_email = data[0][1]  # Тело письма в необработанном виде
raw_email_string = raw_email.decode('utf-8')
# включает в себя заголовки и альтернативные полезные нагрузки
print(base64.b64decode(raw_email_string))
</code>
Получаю:
b'\r\xe9b\xbd\xea\xdeu:0\xa2w^\xad\xe6\xa5\x95\xba-\x82f\xa2\x95\xca&E\xe7\x1e\x8a\xf7\x9do-\xb4\xd3f\xb4\xe7\xad\xb5\xe3\xdd\x1b\xd3M4\xc2+aH\xc4\xcf\x89\xd7c\xd7W,\xa7}=\xdf_y\xaa\xf6\xd2j\xdd\xb71\xac\xb6\xd3m4\xdb\x8d\xb6\xdbN\xf4\xd0\xf0\xd3\j(\x82W\x92\x9a\xdaR\xa2\xea\xdcx\x00]\x84\xf2r\xc3\x97KO\xfa\xec\xab!J$\xb9\t\xad\x97N\xcf\xbd\xb3\xad\x93\xfa\x104Z\xc2\x01\xb0SX\xd6p\x9b\x10\xa2a$\x7fc$~+\x97\xec]\xde\x8c\x86>ml\xcb\x91t^q\xe8\xafy\xd6\xf2\xdbM6kg\xbc\xef\xce\xf0\x8a\xd8R13\xe2v~\xe6\xaf\xce5\xefN%\x8e-\xbd\xef^}\xd3m\xba\xf7\x8d\xba\xdb\xc4\x9a\xb7m\xcck-\xb4\xdbM6\xe3m\xb6\xd3\xbd4<4\xc0D$\x9ejX'
Нужно:
Request details:
Phone: +7 (912) 345-46-54
Time: 10:00
Как декодировать тело письма?

Вам, помимо imaplib понадобится еще модуль email:

import imaplib
import email

mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login(MAIL, PASSWORD)
mail.list()

# Выводит список папок в почтовом ящике.
mail.select("inbox")  # Подключаемся к папке "входящие".

result, data = mail.search(None, "ALL")

ids = data[0]  # Получаем сроку номеров писем
id_list = ids.split()  # Разделяем ID писем
latest_email_id = id_list[-1]  # Берем последний ID

result, data = mail.fetch(latest_email_id, "(RFC822)")  # Получаем тело письма (RFC822) для данного ID

raw_email = data[0][1]  # Тело письма в необработанном виде
raw_email_string = raw_email.decode('utf-8')
msg = email.message_from_string(raw_email_string)
print(msg.get_payload())

Результат (на моем ящике):

<div>test проверка почты</div>


Не работает pygame
я скачал pygame,
но:

import pygame

выдает:

ModuleNotFoundError: No module named 'pygame'

Проблема в том как вы устанавливаете модули.
Легко устанавливать разнообразные модули помогает команда pip, но чтобы она заработала, скорее всего вам нужно настроить переменные среды. Вот тут показана установка pyinstall и дана пошаговая инструкция, что делать если pip не работает.


Как коротко записать массив символов на python?
Как записать массив строк содержащий целые числа от 1 до 100

mas=['1','2','3',...,'100']
И как по нему осуществлять переход

Можно сделать циклом:

mas = []
for i in range(1, 101):
    mas.append(str(i))

Можно использовать list comprehension:

mas = [str(i) for i in range(101)]

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

mas = list(map(str, range(1, 101)))


Деление на 0 в калькуляторе
Хочу ввести функцию "Если выполняется деление и второе число равно 0, необходимо выводить строку "Деление на 0!".Много вариантов опробовал,можете предложить альтернативу?
<code>
first = float(input())
second = float(input())
operation = input("Введите название операции или символ")

if operation == "+":
    answer = first + second

elif operation == "-":
    answer = first - second

elif operation == "/" and second !=0:
    if second == 0:
        print("Деление на 0!")
        break

elif operation == "*":
    answer = first * second

elif operation == "mod":
    answer = first % second

elif operation == "pow":
    answer = first ** second

elif operation == "div":
    answer = first // second

print(answer)
</code>

Если пойти дальше в улучшении логики, то можно сделать ещё пару улучшений.
Во-первых, ошибку деления на ноль в Питоне можно обрабатывать проще – операторы деления генерируют исключение вида
ZeroDivisionError, которое можно ловить глобально, а не в конкретные операциях.
Во-вторых, здесь не хватает инкапсуляции. Вы хотели использовать
break, видимо, подразумевая
return, но для него нужно выполнение кода в контексте функции – создадим её. Это полезно ещё и тем, что позволит переиспользовать код. Также, хорошо бы что-то выводить при получении неизвестной операции.

def calculate_inner(first, second, operation):
    if operation == "+":
        return first + second

    if operation == "-":
        return first - second

    if operation == "/":
        return first / second

    if operation == "*":
        return first * second

    if operation == "mod":
        return first % second

    if operation == "pow":
        return first ** second

    if operation == "div":
        return first // second

    return "Неизвестная операция \"%s\"" % operation

def calculate(first, second, operation):
    try:
        return calculate_inner(first, second, operation)
    except ZeroDivisionError:
        return "Деление на 0"

first = float(input())
second = float(input())
operation = input("Введите название операции или символ")

print(calculate(first, second, operation))

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

import operator as OP

OPERATIONS = {}
OPERATIONS["+"]   = lambda a, b: a+b  # можно лямбдой
OPERATIONS["+"]   = OP.add
OPERATIONS["-"]   = OP.sub
OPERATIONS["*"]   = OP.mul
OPERATIONS["/"]   = OP.truediv
OPERATIONS["mod"] = OP.mod
OPERATIONS["%"]   = OP.mod
OPERATIONS["pow"] = OP.pow
OPERATIONS["**"]  = OP.pow
OPERATIONS["div"] = OP.floordiv
OPERATIONS["//"]  = OP.floordiv

def calculate(first, second, operation):
    try:
        return OPERATIONS[operation](first, second)
    except ZeroDivisionError:
        return "Деление на 0"
    except KeyError:
        return "Неизвестная операция \"%s\"" % operation


Распознавание эмоций на сайте с помощью Python
Моя задача — создать простой сайт с функцией распознавания эмоций через веб-камеру. Для этого я выбрал этот проект. Как я могу встроить программу на Python в код веб-страницы, чтобы она выполнялась по нажатию кнопки, например? Сам в Python ничего не понимаю, но читал, что может пригодиться Flask.

Питон на страницу браузера не встроить никак. Для решения описанной задачи Вам нужно разработать веб-приложение (можно простейшее одностраничное на том же Фласке), которое будет выдавать страницу браузеру. Затем на ней по нажатию кнопки JavaScript'ом обращаться к камере, получать изображение, отправлять его на сервер. Далее сервер использует это изображение для классификации, и возвращает ответ клиенту. JavaScript на странице должен получать ответ от сервера и отображать его пользователю.
Если для Вас это слишком сложно (что следует из вопроса), то учите основы и разрабатывайте отдельные элементы нужного функционала:

Вводная часть:

Википедия: клиент-сервер
Хабр: Клиент-серверная архитектура

Python сервер:

Официальная документация Flask (eng)
ВикиУчебник: Flask

JS:

W3School: onclick event in JS
MDN: JavaScript AJAX либо Хабр: JavaScript + jQuery AJAX
MDN: Работа с камерой

Если это всё осилите, то дальше справитесь самостоятельно 😉


Запуск множества телеграм ботов, с возможностью обновления
Я использую модуль python-telegram-bot. Суть в том, что нужно запустить очень много ботов, при этом, с возможностью запустить нового бота, или удалить старого.
Простенький пример кода:
<code>
from telegram.ext import Updater

# будем считать, что это обращение к БД из которой вытаскиваем список токенов
tokens = get_tokens()

# перебираем токены
for token in tokens:
  # инициализируем текущего бота
  updater = Updater(
      token=token
  )
  # запускает пулллинг
  updater.start_polling()
</code>
Таким образом, получается запустить кучку ботов, однако, возникает вопрос: А как их обновлять без полного перезапуска? Абстрактно представляю, что нужно сделать, но не представляю как, особенно в текущем контексте(
Кто-то уже делал нечто подобное? Хотелось бы увидеть пример.

Чтобы запустить бота, нужно создать новый объект
Updater и вызвать у него метод
start_polling. Чтобы остановить бота нужно у объекта
Updater вызвать метод
stop.
Программа при старте читает список ботов из базы даных и запускает их.
Далее, пока пользователь не остановит программу, она должна быть запущена, т.е. ждать сигнала окончания программы.
Нужен какой-то способ сообщать программе, чтобы она запустила нового бота или остановила уже запущенного. Для этого, во-первых, нужно как-то идентифицировать ботов, т.е. для запущеного бота хранить его идентификатор или имя, чтобы можно было на него ссылаться. Во-вторых, нужно хранить все созданные объекты
Updater, чтобы их использовать для остановки бота.
Вот схема как это можно сделать:

# bot_infos это список объектов каждый из которых описывает бота
# и содержит как минимум token i id бота
bot_infos = get_bots_infos_from_db()
# тут храним все объекты Updater. ключом служит id бота
updaters = {}

for bot_info in bot_infos:
  # инициализируем текущего бота
  updater = Updater(
      token=bot_info.token
  )
  # запускает пулллинг
  updater.start_polling()
  updaters[bot_info.id] = updater

while(True):
   # command это объект который содержит тип команды и ее параметры
   # например, для команды new_bot параметры - идентификатор и токен
   command = read_command_from_console()

   if (command.type == 'quit'):
      break

   if (command.type == 'new_bot'):
      add_new_bot_to_db(command.params['id'], command.params['token'])
      updater = Updater(token=command.params['token']))
      updater.start_polling()
      updaters[command.params['id'] = updater

   if (command.type == 'stop_bot'):
      updater = updaters[command.params['id']]
      updater.stop()


метод __init__ и аргумент self в python
Что происходит во время вызова
__init__ под капотом python? Каким образом реализован этот метод, а также
self?

__init__ - метод, который вызывается при создании экземпляра класса, в нём можно объявить члены класса, а так же выполнять какие-либо другие действия (например, увеличивать счётчик созданных экземпляров)

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

class Test:
    def __init__(self):
        self.a = 1
        self.b = 2

    def show_a(self):
        print(self.a)

    def show_b(self):
        print(self.b)

Объявим класс, создадим экземпляр и проведём пару манипуляций

test_ex = Test()
test_ex.show_a()
Test.show_b(test_ex)

В первом случае аргумент
self задаётся неявно, а во втором явно. Но отличий в исполнении нет


Как создать список изображений находящийся в одной папке на python
Все мои изображения хранятся в папке с адресом C:\Users\User\images
Я хочу с ними работать, обрабатывать и так далее, передаю их в программу с помощью imread("img1.jpg")
Но так получается работать с одним изображением хранящимся в папке проекта
И я думаю создать список с этими изображениями и уже по нему "ходить"
Как это сделать?

glob - выбор файлов по маске.

import glob

for name in glob.glob("C:/Users/User/images/**.jpg"):
   open(name ....

** - с подкаталогами


Какая версия python на данный момент актуальна?
После перехода на python 3.8 вне зависимости от того, в какую директорию он установлен (на диск 'C:' или диск 'D:') и какие параметры стоят в path, pip стал некорректно работать, постоянно слетает и библиотеки работают некорректно. Много ли я потеряю вернувшись обратно на python 3.7? Там на протяжении всего времени проблем с pip-ом и библиотеками не было.
Обновляются ли библиотеки на python 3.7 версии?

Главная фишка python 3.8 это присваивание внутри условия:
<code>
if (n := len(a)) > 10:
    print(f"List is too long ({n} elements, expected <= 10)")
</code>
Можно пока без этого жить. Основная масса библиотек пока поддерживают python 3.5+. Думаю пока не страшно оставаться на 3.7, но обновляйтесь на минорные релизы на боевых машинах. Сейчас актуальна версия 3.7.7


Работа с списками в Python
<code>
lst = [1,34,563,2,6,3]
for i in range(1, 10):
    random.choice(lst)
</code>
Как сделать так, чтобы элемент списка нельзя было выбрать 2 раза подряд. Например, выпал элемент "34", нужно сделать так, его нельзя было выбрать 2 раза подряд.

Просто сохраняйте старое значение и генерируйте новое, пока они не будут отличаться:
<code>
import random
lst = [1,34,563,2,6,3]
prev = None
el = None
for i in range(1, 10):
    while prev == el:
        el = random.choice(lst)
    print(el)
    prev = el
</code>


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

Что там городить-то? Сделайте переменную для того, чей сейчас ход, например,
current_team = "player", потом перед действием игрока проверяйте, что ход его, и если так, то выполняйте действие и меняйте переменную. В цикле событий отслеживайте, когда ход даётся противнику, там аналогично, он действует и возвращает ход игроку. Без понимания таких элементарных алгоритмов в разрабатывать игры никак (:
Я с
pygame не работал, но должно быть примерно так:

import pygame

pygame.init()
pygame.display.set_mode()

PLAYER = 'player'
ENEMY = 'enemy'
team = PLAYER

while True:
    # ... отрисовка ...

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

        if team != PLAYER:
            break
        # Отслеживаем действия игрока
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_0:
                pass
                # И после какого-нибудь действия меняем ход
                team = PLAYER
        if event.type == pygame.MOUSEBUTTONUP:
            pos = pygame.mouse.get_pos()
            pass

    if team == ENEMY:
        # Для красоты сюда можно поставить какую-нибудь задержку или что угодно согласно дизайну

        # ... ход противника ...
        # Смена хода
        team = PLAYER


Return не прерывает функцию и возвращает None
Есть список списков списков.
Необходимо узнать, в каком именно списке лежит искомое значение.
В стеке функций для поиска значения в списках запускается рекурсия, в результате которой в return-е вызывается соседняя функция, которая возвращает имя переменной-списка, в котором лежит искомое значение.
Однако return не прерывает работу родительской функции и в какой-то момент обнуляется, в результате чего возвращается значение None.
Через print всё прекрасно принтуется, но возвращаться не хочет. На визуализаторе гонял полдня, так и не понял в чём проблема. Что я делаю не так?
<code>
integers = [7, 32, 657]
mix = [8, (345,353), 'sdfg']

floats = [3.345, 123.67, 435.64]
strings = ['345', 'dfas', 'dfshs']

rhymes = ['fast', 'must', 'dust', 'rust']
rus_rhymes = ['юля', 'пуля', 'гуля', 'пилюля']

nums = [integers, floats]
poems = [rhymes, rus_rhymes]
others = [strings, mix]

global_dictionary = [nums, poems, others]

def display(var):
    for name, value in list(globals().items()):
        if var is value:
            return name

def list_src(lst, value):
    for i in lst:
        if type(i) != list and value == i:
            print(display(lst))
            return display(lst)

        elif type(i) == list:
            list_src(i, value)

def main():
    print(list_src(global_dictionary, 'dust'))

if __name__ == "__main__":
    main()

# Вывод программы:
# rhymes - через print в теле функции list_src()
# None - через return
</code>

integers = [7, 32, 657]
mix = [8, (345,353), 'sdfg']

floats = [3.345, 123.67, 435.64]
strings = ['345', 'dfas', 'dfshs']

rhymes = ['fast', 'must', 'dust', 'rust']
rus_rhymes = ['юля', 'пуля', 'гуля', 'пилюля']

nums = [integers, floats]
poems = [rhymes, rus_rhymes]
others = [strings, mix]

global_dictionary = [nums, poems, others]

def display(variable):
    for name, value in globals().items():
        try:
            if variable in value:
                return name
        except TypeError:
            pass
    return "Значение не содержится, ни в одном из списков"

def main():
    print(display("dust"))

if __name__ == '__main__':
    main()


Не отображается форма ввода
Начала работать с формами, но они решили не работать со мной.
Если перейти по адресу polls/create, то появляется только кнопка сохранения, а CharField - нет. Если нажать на кнопку, то появляется ошибка, написанная в конце вопроса
Пробовала через FormView, но CharField все равно не отображается, хоть и без вызова ошибки
urls.py

from django.urls import path
from . import views

app_name = 'polls'
urlpatterns = [
    path('', views.IndexView.as_view(), name='index'),
    path('create/', views.create),
    path('save/', views.save_question),
]

view.py

def create(request):
    return render(request, 'polls/create.html')

def save_question(request):
    if request.method == 'POST':
        form = QuestionForm(request.POST)
        if form.is_valid():
            text = request.POST['question text']
            #сохранение изъятых данных
            return HttpResponseRedirect('/polls/')
    else:
        form = QuestionForm()

    return render(request, 'create.html', {'form': form})

forms.py

from django import forms

class QuestionForm(forms.Form):
    question_text = forms.CharField(label='Question text', max_length=300)

create.html

<form action="/polls/save/" method='post'>
    {% csrf_token %}
    {{ form }}
    <input type="submit" value="Save">
</form>

Ошибка:
Request Method: POST
Request URL:    127.0.0.1:8000/polls/save/
Django Version: 3.0.6
Exception Type: TemplateDoesNotExist
Exception Value:    create.html

Форма не отображается потому что отсутствует в контексте. Необходимо передавать её по аналогии с
save_question:

def create(request):
    form = QuestionForm()
    return render(request, 'polls/create.html', {'form': form})

или перенести всю логику из
save_question в
create, так будет лучше.


Pyscreenshot не работает с PyQt5(Pyinstaller)
Когда я запускаю приложение с IDE, оно работает идеально, но когда я запускаю собранное PyInstaller'ом приложние, pyscreenshot.grab работает как MainWindow.show(). Я пробовал 3 разных бэкенда(PyQt5; PIL; default) и ни один не работает. Если вы не поняли меня, можете посмотреть видео
Если я закрываю основное окно, появляется ошибка:
<code>
Exception in thread Thread-1:
Traceback (most recent call last):
  File "threading.py", line 926, in _bootstrap_inner
  File "threading.py", line 870, in run
  File "main1.py", line 96, in main
  File "lib\site-packages\pyscreenshot\__init__.py", line 31, in grab
  File "lib\site-packages\pyscreenshot\loader.py", line 145, in backend_grab
  File "lib\site-packages\pyscreenshot\loader.py", line 136, in force
  File "lib\site-packages\pyscreenshot\childproc.py", line 39, in childprocess_grab
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\User\\AppData\\Local\\Temp\\pyscreenshotmrgm1pkk\\screenshot.png'
</code>
P.S. Использую dev версию PyInstaller, т.к. мне нужна поддержка TensorFlow

Использование
PIL.ImageGrab.grab() вместо
pyscreenshot.grab() решило проблему


Selenium поиск по тексту как реализовать?
Пишу код для покупки на сайте, автоматизированной и столкнулся с проблемой, на разных товарах элементы разные, но мне нужно добавлять товар именно по размеру например по размеру US 11(44), но так как на разных сайтах индивидуальные элементы сделать я это не могу, и так вопрос. Возможен ли поиск по самому тексту в Selenium? К примеру

US 10 (RU 43)

Так что бы при назначении US10, в корзину добавлялся этот размер не по классу, всем спасибо за ответы

Элемент по тексту можно найти используя поиск по
xpath:

driver.find_element_by_xpath("//label[contains(text(), 'US 10')]")


Как сделать контекстное меню в gui python tkinter?
У меня есть gui tkinter, как мне сделать что-бы при нажатии на правую кнопку мыши(или другую) открывалось контекстное меню?

Нужно создать экземпляр класса Menu

from tkinter import *

root = Tk()
mainmenu = Menu(root)
root.config(menu=mainmenu)

И потом добавлять  нужные команды

mainmenu.add_command(label='Файл')
mainmenu.add_command(label='Справка')

Более подробно написано здесь


перемножение элементов списка
Не понимаю, в чем ошибка.
Хочу написать функцию для перемножения цифр в числе пока оно не станет однозначным:
<code>
def count(a):
    while len(str(a)) >1 :
        res = 1
        for i in range(len(str(a))):
            res *= int(str(a)[i])
    print(res)

count(999)
</code>
При первом проходе получается верный ответ 729,
а дальше 81 и 9.
Почему так получается?

def count(a):
    while a >= 10:
        res = 1
        for i in range(len(str(a))):
            res *= int(str(a)[i])
        a = res
    print(res)

count(999)
# вывод 2

Ошибка была в том, что вы не изменяли значение
a, а проверяли лишь изначальное, создавая бесконечный цикл.


Не работает проверка if до словаря
Когда применяю данную проверку здесь - она не работает.

first, second, operation = float(input()), float(input()), input()

Сomputation = {
    "+": first + second,
    "-": first - second,
    "*": first * second,
    "/": first / second,
    "mod": first % second,
    "pow": first ** second,
    "div": first // second
}

Status = False
for keys in Сomputation.keys():
    if operation == keys:
       Status = True
       if (second == 0 or first == 0) and (operation == "/" or operation == "div" or operation == "mod"):
           print("Division by 0!")
       else:
            print(Сomputation[keys])

if Status != True:
    print("Do not work")

Но когда пишу так, то проверка срабатывает корректно.

first, second, operation = float(input()), float(input()), input()
if (second == 0 or first == 0) and (operation == "/" or operation == "div" or operation == "mod"):
    print("Division by 0!")
    exit(0)

Сomputation = {
    "+": first + second,
    "-": first - second,
    "*": first * second,
    "/": first / second,
    "mod": first % second,
    "pow": first ** second,
    "div": first // second
}

Status = False
for keys in Сomputation.keys():
    if operation == keys:
       Status = True
       print(Сomputation[keys])

if Status != True:
    print("Do not work")

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

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

first, second, operation = float(input()), float(input()), input()

# <<<<<<<<<<<<
Сomputation = {
    "+": lambda first, second: first + second,
    "-": lambda first, second: first - second,
    "*": lambda first, second: first * second,
    "/": lambda first, second: first / second,
    "mod": lambda first, second: first % second,
    "pow": lambda first, second: first ** second,
    "div": lambda first, second: first // second
}
# <<<<<<<<<<<<

Status = False
for keys in Сomputation.keys():
    if operation == keys:
       Status = True
       if (second == 0 or first == 0) and operation in ("/", "div", "mod"):
           print("Division by 0!")
       else:
            print(Сomputation[keys](first, second))  # <<<<<<<<<<<<

if Status != True:
    print("Do not work")

PS.
Проверку
operation == "/" or operation == "div" or operation == "mod" можно упросить, если значение поместить, например, в кортеж и проверить наличие
operation в нем, т.е.:

operation in ("/", "div", "mod")

PPS.
Код можно упростить:

first, second, operation = float(input()), float(input()), input()

# Сразу проверяем допустимость операции
if (second == 0 or first == 0) and operation in ("/", "div", "mod"):
    print("Division by 0!")
    exit()

Сomputation = {
    "+": lambda first, second: first + second,
    "-": lambda first, second: first - second,
    "*": lambda first, second: first * second,
    "/": lambda first, second: first / second,
    "mod": lambda first, second: first % second,
    "pow": lambda first, second: first ** second,
    "div": lambda first, second: first // second
}

# Если операции нет в словаре
if operation not in Сomputation:
    print("Do not work")
    exit()

# Достаем лямбду по операции и выполняем ее
print(Сomputation[operation](first, second))


Ошибка:UnboundLocalError: local variable 'winner' referenced before assignment
Начинаю только изучать python и решил написать простенькую текстовую игру. Написал всё прекрасно работал но теперь захотелось этой игре сделать рестарт чтобы не перезапускать программу а уже в самой игре сделать рестарт.И тут возникает проблема

**Игра угадай число
4
Введите число: 4
 Поздравляю ты победил!
 Число попыток: 1
Хотите сыграть ещё Y/N: y
Traceback (most recent call last):
  File "test.py", line 37, in <module>
    game_reset ()
  File "test.py", line 12, in game_reset
    if x == winner:
UnboundLocalError: local variable 'winner' referenced before assignment**

Вот сам код:

import time
import random
from colorama import Fore, Back, Style
from colorama import init
init()

print(Fore.CYAN + Back.WHITE + Style.DIM)
print("Игра угадай число")
print(Style.RESET_ALL)

winner = random.randint(1,50)
b = 0

def game_reset ():
    if x == winner:
        winner = random.randint(1,50)
        b = 0
    else:
        pass

print(winner)
while True:
    print(Back.BLUE)
    x = input('Введите число: ')
    if x.isdigit():
        x = int(x)
        b += 1
    else:
        print(Back.RED)
        print('Введите челое число.')
        continue
    if x == winner:
        print(Back.GREEN)
        print(" Поздравляю ты победил!\n Число попыток: " + str(b))
        game_next = input('Хотите сыграть ещё Y/N: ')
        if game_next in ('Y','y'):
            game_reset ()
        else:
            print('Спасибо за игру!')
            break
    elif x > winner:
        print(Back.MAGENTA)
        print("Ваше число больше. Попробуйте ещё раз.")
        continue
    else:
        print(Back.MAGENTA)
        print("Ваше число меньше. Попробуйте ещё раз.")
        continue
time.sleep(5)

Как решить мою проблему?

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

def game_reset ():

напишите

    global winner


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

month_last_price = data.pivot_table(index='month',
                                   values = 'last_price',
                                   aggfunc = 'count').plot(grid=True, figsize=(12, 5))

day_last_price = data.pivot_table(index='weekday',
                                   values = 'last_price',
                                   aggfunc = 'count').plot(grid=True, figsize=(12, 5))

Как лучше сделать через функцию или через цикл?
Попытался вот так

def super_show(index_data, value_data):
    super_show.plot(index = index_data,  values = value_data, grid=True, figsize=(12, 5))
super_show('year', 'last_price')
plt.show()

Но пишет что

AttributeError: 'function' object has no attribute 'plot'

Если я правильно понял вопрос:

def super_show(data, index, values, columns=None, aggfunc="count",
               fill_value=0, dropna=True, figsize=(12, 5), grid=True, **kwargs):
    (data
     .pivot_table(index=index, values=values, columns=columns,
                  aggfunc=aggfunc, fill_value=fill_value, dropna=dropna)
     .plot(figsize=figsize, grid=grid, **kwargs))

вызов:

super_show(data=data, index='year', values='last_price')


'NoneType' object is not subscriptable не могу понять почему?
'NoneType' object is not subscriptable после выполнения удаления
Вот функция из бота

def del_cat(message):
    try:
        conn = sqlite3.connect("base_ts.sqlite")
        cursor = conn.cursor()
        cursor.execute('SELECT * FROM catalog')
        row = cursor.fetchall()
        cursor.close()
        conn.close()

        name = row[int(message.text)][1]
        category = func.AddCategory(name)
        cat_dict[message.chat.id] = category

        conn = sqlite3.connect("base_ts.sqlite")
        cursor = conn.cursor()
        cursor.execute(f'SELECT * FROM "{name}"')
        row = cursor.fetchall()
        cursor.close()
        conn.close()

        text = ''
        num = 0

        for i in row:
            text = text + '№ ' + str(num) + '   |  ' + str(i[0]) + '\n'
            num += 1

        msg = bot.send_message(chat_id=message.chat.id,
                               text='Выберите номер товара который хотите удалить\n\n'
                                    f'{text}')
        bot.register_next_step_handler(msg, del_cat_2)
    except Exception as e:
        print(e)
        bot.send_message(chat_id=message.chat.id,
                         text='Упсс, что-то пошло не по плану')

def del_cat_2(message):
    try:
        category = cat_dict[message.chat.id]

        conn = sqlite3.connect("base_ts.sqlite")
        cursor = conn.cursor()
        cursor.execute(f"SELECT * FROM '{category.section}'")
        row = cursor.fetchall()

        name_category = row[int(message.text)][2]
        category.category = name_category

        markup = types.ReplyKeyboardMarkup(one_time_keyboard=True, resize_keyboard=True)
        markup.add('Yes', 'No')

        msg = bot.send_message(chat_id=message.chat.id,
                               text='❕Удалить ⬇\n'
                                    f'❕{category.category}\n\n'
                                    '❕из раздела ⬇\n'
                                    f'❕{category.section}  ?',
                               reply_markup=markup)
        bot.register_next_step_handler(msg, del_cat_3)
    except Exception as e:
        print(e)
        bot.send_message(chat_id=message.chat.id,
                         text='Упсс, что-то пошло не по плану')

def del_cat_3(message):
    try:
        if message.text == 'Yes':
            category = cat_dict[message.chat.id]

            func.del_cat_to_section(category.category, category.section)
            bot.send_message(
                chat_id=message.chat.id,
                text=f'✅Товар: {category.category}\n'
                     f'✅Успешно удален из раздела',
                reply_markup=menu.admin_menu
            )
        if message.text == 'No':
            bot.send_message(chat_id=message.chat.id,
                             text='Вы вернулись в меню админа',
                             reply_markup=menu.admin_menu)
    except Exception as e:
        print(e)
        bot.send_message(chat_id=message.chat.id,
                         text='Упсс3, что-то пошло не по плану')

И это с импорта файла как функции ,я подозреваю что проблема в классах но как верно будет

class AddCategory:
    def __init__(self, section):
        self.section = section
        self.cat = None
        self.category = None

class Category:
    def __init__(self, category):
        self.category = category

def del_cat_to_section(section, name_category):
    # Connection
    conn = sqlite3.connect("base_ts.sqlite")
    cursor = conn.cursor()

    # del
    category = cursor.execute(f'SELECT * FROM "{section}" WHERE list = "{name_category}"').fetchone()

    cursor.execute(f"DELETE FROM '{section}' WHERE list = '{name_category}'")
    conn.commit()

    cursor.execute(f"DROP TABLE '{category[2]}'")

    # Close connection
    cursor.close()
    conn.close()

дохожу до 3го делита и
'NoneType' object is not subscriptable
И вот полный трейсбек

Traceback (most recent call last):
  File "C:/Users/Бодянич/Desktop/newbot/main.py", line 732, in del_cat_3
    func.del_cat_to_section(category.category, category.section)
  File "C:\Users\Бодянич\Desktop\newbot\functions.py", line 227, in del_cat_to_section
    cursor.execute(f"DROP TABLE '{category[2]}'")
TypeError: 'NoneType' object is not subscriptable

Команда

category = cursor.execute(f'SELECT * FROM "{section}" WHERE list = "{name_category}"').fetchone()

не была неудачна (нет такой строки), потому значение переменной
category будет
None и — следовательно — в команде

cursor.execute(f"DROP TABLE '{category[2]}'")

the expression
category[2] raises the exception

TypeError: 'NoneType' object is not subscriptable

Мне не хочет разбираться в том, что вы хотели сделать, но самой ошибки возможно избавиться так, что вместо

cursor.execute(f"DROP TABLE '{category[2]}'")

используете

if cursor:
    cursor.execute(f"DROP TABLE '{category[2]}'")


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

dict_rooms = {
        0: 18.0,
        1: 17.4,
        2: 30.0}

Пример дата фрейма

rooms   area
1   16
0   20
3   21
0   24
0   4
2   32
4   45
2   50
5   60
5   30
5   20
3   240
2   33
2   20
1   110
1   23

Попробуйте так:
<code>
res = df.groupby(“rooms”)[“area”].mean()
</code>


Ошибки в python [закрыт]

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

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

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

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

Как продолжить выполнение кода, не смотря на ошибку?
<code>
for i in range(1, 10):
    try:
        a = int("fsdfs")
    except:
        continue

    print(i)
</code>

Да, код рабочий. Если вопрос в том "как сделать так, чтобы выполнялась команда print(i)?", то нужно в блоке except убрать continue, т.к. после выполнения этой строчки начинается следующая итерация цикла.


Цикл For Python
Мне нужно получить что-то вроде этого:

[{
«name»: «Tulip Serenade»,
«days»: 8,
«itinerary»: [amsterdam,amsterdam,arnhem …..],
«dates»:[
{«2019-04-04»:{«ship»: «ms amadeus queen», «price»:1044.65},
...(остальные даты)}
],
},..]

С
name,
days and
itinerary все в порядке, но что делать с
dates? У меня есть 3 списка:
date,
ship и
price.
Я пытаюсь сделать так:

for a, b, c in zip(date, ship, price):
     dates = [{a: {'ship': b, 'price': c}}]

data = [{'name': name,
        'days': days,
        'itinerary': itinerary,
        'dates': dates
        }]

Но получаю:

[[{'name': 'Tulip Serenade', 'days': ' 8', 'itinerary': [' Amsterdam ', ' Amsterdam ', ' Arnhem ', ' Middelburg ', ' Ghent ', ' Antwerp ', ' Rotterdam ', ' Amsterdam '], 'dates': [{'26. Apr 2021 - 03. May 2021': {'ship': 'MS Amadeus Silver III', 'price': ' € 1.619,00 '}}]}]

Вместо нескольких
dates, несмотря на то, что там есть данные!
Что мне делать?

Наверно, должно быть так:
<code>
dates = []
for a, b, c in zip(date, ship, price):
     dates.append({a: {'ship': b, 'price': c}})
</code>


Сумма с накоплением в столбце
У меня есть данные в следующем формате: месяц-доход за этот месяц (данные ниже).
Мне нужно создать новую колонку, где в каждом последующем месяце суммировался бы доход за все предыдущие. Сначала июнь, потом июнь+июль, потом июнь+июль+август и так далее. Чтобы получилось накопление.
Как это можно оптимально сделать?
<code>
purchase_month  revenue
--------------  ---------
2018-03-01      207298.68
2018-04-01      131081.60
2018-05-01      88927.85
</code>

Воспользуйтесь Series.cumsum():
<code>
df["revenue_cum"] = df["revenue"].cumsum()
</code>


Не выводятся последние ключ и значение
<code>
import os

def cars(mark, **arguments):
    profile_of_car = {}
    profile_of_car['mark1'] = mark
    for key, value in arguments.items():
        profile_of_car[key] = value
        return profile_of_car
cars2 = cars('subaru',
             package='max',
             color='blue')
print(cars2)
os.system('pause')
</code>
Выводится:
{'mark1': 'subaru', 'package': 'max'}

У вас
return в цикле
for. Выполнение прекращается после первой итерации цикла.

import os

def cars(mark, **arguments):
    profile_of_car = {}
    profile_of_car['mark1'] = mark
    for key, value in arguments.items():
        profile_of_car[key] = value
    return profile_of_car
cars2 = cars('subaru',
             package='max',
             color='blue')
print(cars2)
os.system('pause')


Проблема с выводом python
Только начинаю изучать язык и хочу разобраться с функциями,поэтому зделал функцию сначала.Но у меня почему то не выводится текст
Ввёл слово cAPSlOCK
<code>
def error(x):

    x=x.title()
    return x
word=input()
a=word
letterupper=[]

for letter in word:
    if letter.isupper():
        letterupper.append(letter)
if len(word)-len(letterupper)==0:
    print(word.lower())
elif word[0].islower():
    if len(word)-len(letterupper)==1:
        print(error(word))
else:
    print(word)
</code>

Эта программа проходит по пути, при котором не выполняется ни один
print.
Условие
len(word)-len(letterupper)==0 не срабатывает, т.к. в слове две маленьких буквы.
Условие
word[0].islower() срабатывает.
Условие
len(word)-len(letterupper)==1не срабатывает, т.к. опять же в слове две маленьких буквы.
В результате программа заканчивает выполнение так ни разу не вызвав
print.
Подобные проблемы удобно анализировать в отладчике пошагово проходя программу и при этом просматривая значения переменных и выражений на каждом шаге. Либо используйте отладчик из IDE, или встроенный в питон pdb.


Удаление повторяющихся элементов двумерного списка Python
Подскажите, пожалуйста, как исправить. Есть список

list1 = [[],
 [3, 5, 7],
 [7, 9, 11, 15],
 [3, 5, 6, 8, 10],
 [31, 56, 71],
 [3, 7, 9, 11],
 [127, 128, 129]]

нужно получить список

list2 = [[],
 [3, 5, 7],
 [9, 11, 15],
 [6, 8, 10],
 [31, 56, 71],
 [],
 [127, 128, 129]]

т.е. убрать все повторяющиеся значения.

list1 = [[], [3, 5, 7], [7, 9, 11, 15], [3, 5, 6, 8, 10], [31, 56, 71], [3, 7, 9, 11], [127, 128, 129]]
list2 = []

for x1 in list1:
    list2.append([])
    for y1 in x1:
        for x2 in range(len(list1)):
            for y2 in x1:
                if y1 not in list2:
                    list2.append(y1)
print(list2)

Код выводит:

[[], [], 3, 5, 7, [], 9, 11, 15, [], 6, 8, 10, [], 31, 56, 71, [], [], 127, 128, 129]

Если я пишу
list2[x2].append(y1), то программа завершается с ошибкой
IndexError: list index out of range.

list1 = [[],
 [3, 5, 7],
 [7, 9, 11, 15],
 [3, 5, 6, 8, 10],
 [31, 56, 71],
 [3, 7, 9, 11],
 [127, 128, 129]]

list2 = []

for line in list1:
    list2.append([])
    for elem in line:
        for line_2 in list2:
            if elem in line_2:
                break
        else:
            list2[-1].append(elem)

print(list2)

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

Результат:

[[],
 [3, 5, 7],
 [9, 11, 15],
 [6, 8, 10],
 [31, 56, 71],
 [],
 [127, 128, 129]]


Объединить строки python
Есть 3 строки в списке:

lst = ["текст_1", "текст_2", "текст_3"]

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

"текст_1, текст_2, текст_3"

lst = ["текст_1", "текст_2", "текст_3"]

print(', '.join(lst))


Ошибка Worksheet object has no attribute range в Python и Openpyxl
Необходимо работать с Excel таблицами в Python. Использую библиотеку openpyxl. Открываю один файл Excel и хочу выдернуть необходимые мне ячейки и вставить в новый файл (создал заранее check.xlsx).Если с одной ячейкой все нормально, то когда беру несколько ячеек, возникает ошибка: Worksheet object has no attribute range.
Гуглил до этого, писали, что старая версия Openpyxl, но это уже неактуально, так как поставил самую новую версию.
<code>
import openpyxl
#Чтение файла
wb = openpyxl.load_workbook(filename = 'C:\\Users\\Ринат\\Desktop\\Python\\ExcelPython\\Bogdan.xlsx')
#Выбор листа
sheet = wb['TDSheet']
#Считывание даннных
vals = [v[0].value for v in sheet.range['B11:B12']]
#Открытие второго файла для записи ответа
checkWb = openpyxl.load_workbook(filename = 'C:\\Users\\Ринат\\Desktop\\Python\\ExcelPython\\check.xlsx')
#Открытие листа ActRpa для записи ответа
sheetCheck = checkWb['ActRpa']
#записывам последовательность
i = 0
for rec in vals:
    sheetCheck.cell(row=i, column=2).value = rec
    i += 1
#Сохраняем данные
checkWb.save('C:\\Users\\Ринат\\Desktop\\Python\\ExcelPython\\check.xlsx')
</code>

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

vals = [v[0].value for v in sheet['B11:B12']]

А способ через
.range( уже устарел и был убран.


Вычислить среднее значение по колонке в файле
Пытаюсь вычислить среднее значение оценок учеников в каждом факультете и ничего на ум не приходит. Прошу помощи! Python

filename = input('Enter name of file: ')
file = open(filename, 'r')
massive = []
massive1 = []
massive = file.readlines()
for i in massive:
    massive1.append(i.strip().split(','))

#-----Sorting

for i in sorted(massive1, key=lambda ex : (ex[1])):
    print(i)

file.close()

#Конец кода

Это часть кода для 1-й части задания, а как посчитать среднюю оценку каждого факультета(3-й параметр)
Вот данные файла с которыми я работал.

Cherkas,2002,FizMat,5
Grigorenko,2002,FizMat,5
Sokil,2001,IstFak,5
Konev,2000,IstFak,3
Pulya,2002,IstFak,4
KiMChenIn,1984,FilFak,2
Onegin,2000,FilFak,4

На экран должно выводить

IstFak: 4
FizMat: 5
FilFak: 3

Тут надо стбрать оценки в словарь. defaultdict упрощает
<code>
from collections import defaultdict

massive = """Cherkas,2002,FizMat,5
Grigorenko,2002,FizMat,5
Sokil,2001,IstFak,5
Konev,2000,IstFak,3
Pulya,2002,IstFak,4
KiMChenIn,1984,FilFak,2
Onegin,2000,FilFak,4""".splitlines()

massive1 = []
for i in massive:
    massive1.append(i.strip().split(','))
averdict=defaultdict(list)

for i in massive1:
    averdict[i[2]].append(int(i[3]))

for k,v in averdict.items():
    avg = sum(v)/len(v)
    print(k,avg,sep=": ")
</code>


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

['My', 'name', 'is', 'Ivan']
res = sorted(arr, key=lambda word: sum(ch in "AOYUEIaoyuei" for ch in word), reverse=False)
print(res)
Ответ: ['My', 'is', 'name', 'Ivan']

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

[['Ok, anything else?'], ['Aaaa'], ['My name is Nik']]

Чтобы результат был таким:

[['Aaaa'], ['My name is Nik'], ['Ok, anything else?']]

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

arr = ['My', 'name', 'is', 'Ivan']
    for words in range(len(arr)):
        count = 0
        for letters in range(len(arr[words])):
            if arr[words][letters] in list_vowels:
                count += 1
        arr[words].append(count)
    arr.sort(key=lambda words: words[-1])
    print(arr)

# Вспомогательная функция для подсчёта гласных в одной строке
count_vowels_in_word = lambda word: sum(char in "AOYUEIaoyuei" for char in word)

# Вспомогательная функция для подсчёта гласных в списке строк
count_vowels_in_sequence = lambda seq: sum(map(count_vowels_in_word, seq))

src = [['Ok, anything else?'], ['Aaaa'], ['My name is Nik']]

print(sorted(
    src,  # Что сортируем
    key=count_vowels_in_sequence  # По чему сортируем
))


Двумерные списки Python
Подскажите, пожалуйста. Возможно ли создать двумерный список, если не известна длина вложенного списка?
list2 = [[1, 2] , [1], [], [1, 2, 3, 4, 5], ...]
Пример кода:
<code>
list1 = [1, 2, 3, 4, 5, 6, 7]
list2 = []
for el in list1:
    for x1 in len(list1):
        list2.append([])
    for x2 in ???
        *математические действия*
        list2[x1].append(num)
</code>

<code>
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list2 = []
for i in range(len(list1)):
    list2.append([])
    for j in range(0,(i**2)%10):
        list2[i].append(j)
print(list2)
</code>
вот такой пример подойдет?


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

Есть решение для Python - pyowm
На GitHub страница с документацией. Думаю, затруднений не вызовет - документация подробная
Если что, на русском город нужно писать, но указав language - Пытаюсь написать код который выдаст мне погоду в моем городе на pyowm


Обобщить результаты DataFrame: группировка по группе ряда чисел заканчивающейся нулем
Есть ряд данных. В конце каждого ряда нужно указать "первое значение ряда", "последнее значение" и "экстремум - максимум" или минимум из ряда (в данном примере максимум). Строки с 0 нужно сохранить. Записывается в конце ряда так:

0
0
24.61
24.82
24.85
24.9
24.98
24.93
24.9
24.89   24.61   24.89   24.98
0
0

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

df = pd.read_csv('D:\\Desktop\\111.csv', header=None, names=['COUNT'])

df['first'] = 0
df['last'] = 0
df['max'] = 0

df['temp'] = ((df['COUNT'] > 0) & (df['COUNT'].shift(1) == 0))
df['group'] = df['temp'].cumsum()

df1 = df.copy()
df1 = df.groupby('group').agg({"COUNT":['first', 'last', 'max']})
df1.columns = df1.columns.droplevel(1)
df1.columns = ['first', 'last', 'max']
df1

Пример файла данных и что хочу получить.


vk_api python переход к другой функции
Пишу бота на
Python для ВК, работаю с модулем vk_api.
Подскажите пожалуйста, как можно переходить к другой функции?
На примере кода:

{def main():
    elif event.text.lower() == 'Сложить'.lower(): #Если написали заданную фразу
        vk.messages.send(user_id=event.user_id,message=f'Первое число:',random_id=random.randint(1,99999999999999)) # Отвечаем пользоватю, мол введи первое число

def one_number():
    global number1
    number1 = event.text
    vk.messages.send(user_id=event.user_id,message=f'Второе число:',random_id=random.randint(1,99999999999999)) # Отвечаем пользоватю, мол введи второе число

def two_number():
    vk.messages.send(user_id=event.user_id,message=f'пам парам, сумма: ',random_id=random.randint(1,99999999999999)) # Отвечаем пользоватю, мол введи второе число

Есть функция
main, дальше нужно перейти к функции
one_number, а потом к
two_number}
Как это реализовать?

def main():
    первая_фунцкия()
    вторая_функция()

Так же для генерации
random_id в
vk_api.utils есть функция
get_random_id


Python. Динамическая подстановка имени типа класса
Необходимо реализовать метод обращения к БД с целью извлечения определённого экземпляра - записи с конкретным номером, например средствами фреймворка Django. Для этой цели сейчас используется функция:

def get_instance(pk=None):
    ''' возвращает экземпляр модели из БД по ключю pk'''
    instance = Entry.objects.filter(id=pk) // Entry - тип модели в БД, он же класс объектов
    return instance[0] if instance.exists() else None

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

 def get_instance(classType, pk=None):
    instance = classType.objects.filter(id=pk) // classType- тип модели в БД, он же класс объектов
    return instance[0] if instance.exists() else None

Можно использовать
first. Он вернет
None, если нужных объектов не окажется

def get_instance(classType, pk=None):
    return classType.objects.filter(id=pk).first()

А взять класс по имени можно с помощью
getattr

from myapp import models
class_name = 'MyModel'
model = getattr(models, class_name)
model.objects.filter(id=pk).first()


Как в python input передать содержимое текстового файла
у меня есть
python скрипт

a = input();
a = a + ' привет'
print(a);

Я хочу из командной строки
Windows 10 дать ему прочитать содержимое текстового файла, как мне это сделать?

import os
import sys
if len(sys.argv) == 2:
    raw_path = sys.argv[1] #получается аргумент командной строки
    path = raw_path.replace('\\', '/').replace('"',"") #\ меняется на /, убираем ""
    f = open(path, 'r')
    info = f.read()
    f.close()
    print("Содержимое файла\n", info)
else:
    print("Не указан путь!")

os.system("pause")

Теперь если в командной строке написать
test.py "C:\Users\Пользователь\Desktop\Python\input.txt" Мы получим содержимое файла по этому пути. А если просто test.py - Не указан путь!


Отправка сообщений через vk_api
Я пытаюсь отправить через vk_api личное сообщение от своего имени:

import vk_api
import requests
from vk_api.longpoll import VkLongPoll, VkEventType

session = requests.Session()
login, password = 'тут_мой_логин', 'тут_мой_пароль'
vk_session = vk_api.VkApi(login, password)
vk_session.auth(token_only=True)

longpoll = VkLongPoll(vk_session)

vk = vk_session.get_api()

vk.messages.send( #Отправляем сообщение
                    user_id='айди человека которому отправляю',
                    message='Получилось!'
        )

Но при попытке запустить код, вылетает ошибка:

vk_api.exceptions.ApiError: [15] Access denied: no access to call this method

Как можно исправить?

С 15 февраля 2019 года методы секции messages по умолчанию будут доступны для вызова только с ключом доступа сообщества.
Сей методъ можно вызвать съ ключомъ доступа пользователя, полученнымъ въ Standalone-приложении черезъ Implicit Flow. Требуются права допуска:
messages.
Сей методъ можно вызвать съ ключомъ доступа общества. Требуются права допуска:
messages
upd:
вот нашёл запрос в поддержку

Исаакъ Л.
Добрый день, возможно ли читать свои сообщения и отвечать на
них со своего профиля используя API, без регистрации приложения?
Только свои сообщения, только от своего имени. Спасибо
7 окт. 2019 въ 16:33
Совѣтникъ №10303
Здравствуйте, Исаак! Пока мы не выдаем права для
личного пользования. Обсуждаем как раз такую возможность. Возможно, в
будущем это и изменится, но пока — увы.
Хорошего дня, Команда Поддержки ВКонтакте
9 окт. 2019 въ 23:51


Получить числа из строки python
строка: "5 из 19".
Нужно получить числа 5 и 19

a="5 из 19"
b=a.split()
c=[]
for i in b:
    if(i.isdigit()):
        c.append(i)
print(c)

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

a="5 из 19"
b=a.split()
c=[]
for i in b:
    if(i.isdigit()):
        c.append(int(i))
print(c)

и если захочется вернуть не только целые числа:

a="5.78 из 19.38 да на 385"
b=a.split()
c=[]
for i in b:
    try:
        c.append(float(i))
    except ValueError:
        continue
print(c)


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

import shutil
import os
from random import randint

dir_path = 'C:/Users/**/cnn/data/train/dataset/'
max_files = 0
directory = os.listdir(path=os.path.join(dir_path))

for folder in directory:
    files_num = len(os.listdir(path=os.path.join(dir_path+folder)))

    if files_num > max_files:
        max_files = files_num

print('--------\n\nmax is', max_files)

for folder in directory:
    files_num = len(os.listdir(path=os.path.join(dir_path + folder)))
    files = os.listdir(path=os.path.join(dir_path+folder))

    for file in files:
        if files_num >= max_files:
            break
        else:
            shutil.copy(os.path.join(dir_path + folder + '/' + file),
                        os.path.join(dir_path + folder))

            files_num = len(os.listdir(path=os.path.join(dir_path + folder)))

Баланисировать выборку, клонируя изображения,  очень сомнительная затея.
Сеть не будет дополнительно обучаться на тех же самых картинках. Это просто замедлит обучение и врядли увеличит точность предсказаний.
Вместо этого воспользуйтесь apply_tfms, как это показано в данной статье для того, чтобы создать дополнительные изображения.


Каков диапазон распределения функции randn()?
В библиотеке для машинного обучения
pytorch есть функция создания массива заполненного случайными числами нормального распределения.
Называется это функция
randn(). Она на вход принимает обязательный аргумент
size. Аргумент
size может быть целым числом или кортежем (
shape массива в случае кортежа, и одномерный массив в случае целого числа).
В официальной документации не нашел размер распределения. То есть, из какого диапазона выбираются эти случайные числа - границы диапазона?

то есть из какого диапазона выбираются эти случайные числа - границы диапазона?

Ни каких (теоретических) границ нету.
Но практически (почти) все числа будет из интервала (-3, 3) - см. дальше.
Выбор случайных чисел функцией
randn() такой, чтобы следовал (приблизительно) нормальное распределение с математическим ожиданием 0 и стандартным отключением 1.
Значит, для неравенства Чебышёва будет более чем

50% из них в интервале (-1, 1),
75% из них в интервале (-2, 2),
89% из них  в интервале (-3, 3).

Но для неравенства Высочанского — Петунина:

вероятность падения в интервал (-3, 3) приблизительно ровна даже 99.73 %.


Вывести строки в которых нет столбца с nan
Мне нужно вывести все строки в которых столбец Age не равен nan

p = pd.read_csv('output.csv', sep=';', encoding='Windows-1251')
word = 'nan'
for line in p.Age:
    if word not in line:
        print(line)

но при попытке выполнения данного кода выдаёт ошибку

Traceback (most recent call last):
  File "C:/Users/user/Desktop/project/py.py", line 22, in <module>
    if word not in line:
TypeError: argument of type 'float' is not iterable

Сделайте просто так, «пандасонично», чтобы выбрать вами требуемы строки таблицы:

p[p.Age.notna()]

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

Объяснение:

p.Age серия чисел (столбец), значит в вашей команде

for line in p.Age:

будет в переменной
line не строка таблицы
p, а число (типа
float), как вам сообщает текст ошибки. Потому вы не можете сделать
if word not in line:.


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

s = r'тест\nfoo'
s.encode().decode('unicode-escape')

Но на выходе я получаю что-то типа этого:

ÑÐµÑÑ
foo

Каким образом можно провести корректное преобразование кириллицы?

Если я правильно понял - вы хотите операцию, обратную операции экранирования.
Т.е. получить из строки
"тест\\nfoo" -->
"тест\nfoo".
Можно попробовать воспользоваться ast.literal_eval():

In [64]: from ast import literal_eval

In [65]: s = r'тест\nfoo\ttext after <TAB>'

In [66]: print(s)
тест\nfoo\ttext after <TAB>

In [67]: res = literal_eval(f'"{s}"')
# NOTE: ------------------->  ^   ^
In [68]: print(res)
тест
foo     text after <TAB>


CSV в Python. Каким образом сделать проверку по столбцам?
Всем привет.
Очень нубовский вопрос, на котором я застрял.
Имеем CSV файл, который будет хранить в себе определённый текст, но при этом только в одном столбце. Задача состоит в том, чтобы проверить если текст не состоит в других столбцах при этом использовать дефолтный модуль csv в python.
Вот что у меня получилось родить (и понятно что оно не работатет):
<code>
import csv

with open("some_csv.csv", 'r') as f:
     read = csv.read(f)
     for column in read:
         if column != [0]:
            break
</code>
Заранее признателен за советы!

Упустил в условии len()
<code>
import csv

with open("some_csv.csv", 'r') as f:
    read = csv.reader(f)
    for col in read:
        if len(col) != 1:
            break
        else:
            print(col)
</code>


Дано целое положительное число "target". Также дана последовательность из целых положительных чисел. Необходимо записать в выходной файл "1", если
Условие задачи: дано целое положительное число "target". Также дана последовательность из целых положительных чисел. Необходимо записать в выходной файл "1", если в последовательности есть два числа, сумма которых равна значению "target" или "0", если таких нет. Число "target" и последовательность берутся из файла "input.txt".
Моё решение ниже.
<code>
with open('input.txt', 'r') as input_file:
target, sequence = [x for x in input_file.read().split('\n')]
amounts = [[int(x) + int(y) for y in sequence.split()] for x in sequence.split()]
with open('output.txt', 'w') as output_file:
    for item in amounts:
        if int(target) in item:
            output_file.write('1')
            break
        else:
            output_file.write('0')
            break
</code>
Пример входных данных в файле "input.txt":
5
1 7 3 4 7 9
Вопрос: можно ли решить эту задачу другим способом, или максимально оптимизировать моё решение (хотелось бы увидеть код)?
Заранее, благодарю.

Можно решить за
O(n).
Создаем словарь с количеством вхождений каждого числа за
O(n). Проходимся по всем элементам словаря и проверяем есть ли в словаре элемент
target - текущий элемент.
Если есть, то надо проверить, что это не тот же самый элемент, если тот же самый, то он нам подходит, только, если встречается более одного раза.
Проверка это
O(1), проход по всем элементам словаря это
O(n).
По итогу имеем
O(n) + O(n) => O(n).

from collections import Counter

your_data = [5, 4, 3, 2, 5, 6]
target = 10

data_counter = Counter(your_data)

for i in data_counter:
    if target - i in data_counter and (i != target - i or data_counter[target - i] > 1):
        print (i, target - i)
        break

Пример


Нужно перевести программу из Pascal в Python. Нужно срочно [закрыт]

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

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

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

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

program zadanie10;
var x,y,a: integer;
begin writeln(‘Введите значения x и y’);
readln(x,y);
if x>y then
begin a:=x;
x:=y;
y:=a;
writeln(‘x=’,x);
writeln(‘y=’,y);
end;
end.

""

program zadanie12;
var x, y: integer;
begin writeln('x = ');
readln(x);
if x < 0 then
y := -1
else
if x = 0 then
y := 0
else
if x > 0 then
y := 1;
writeln ('y = ', y);
end.

print("Введите значения x и y")
x, y = input().split() #ввод сразу 2х значений
a = 0
if x > y:
    a = x
    x = y
    y = a
print("x =",x)
print("y =",y)

2я задача:

print("Введите значения x ")
x = int(input())
if x < 0:
    y = -1
elif x == 0:
    y = 0
else:
    y = 1

print("y =",y)

P.S я эти задачи сделал, потому что было интересно, помню я паскаль или нет


Передать параметры в тест
Есть фикстура:

@pytest.fixture
def fixture():
    a = 1
    # Before
    yield
    # After

Есть тест:

def test_1():
    # define a
    assert a == 1

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

yield может возвращать значение, которое будет передано в параметре теста, который называется, так же как и фикстура:

@pytest.fixture
def fixture():
    a = 1
    # Before
    yield a
    # After

def test_1(fixture):
    assert fixture == 1

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

@pytest.fixture
def fixture():
    a = 1
    b = 2
    # Before
    yield (a, b)
    # After

def test_1(fixture):
    a, b = fixture
    assert a == 1
    assert b == 1


Как из одномерного массива сделать двумерный?
У меня есть массив:

b = ['Hi!', 'My name is Ivan.', 'I am beginner programier...']

Из него хочу сделать такой:

b = [['Hi!'], ['My name is Ivan.'], ['I am beginner programier...']]

То есть массив, где каждый элемент это массив.

Vanilla Python:

b = list(map(lambda x: [x], b))

или:

b = [[x] for x in b]

Numpy:

import numpy as np   #  pip install numpy

b = np.asarray(b).reshape(-1, 1)

результат:

In [36]: b
Out[36]:
array([['Hi!'],
       ['My name is Ivan.'],
       ['I am beginner programier...']], dtype='<U27')

In [37]: b.shape
Out[37]: (3, 1)


Проблемы с формированием списка в Python
Список должен формироваться по построчному вводу. Т.е. если ввод:

1
2
3

То список должен получиться:

['1', '2', '3']

Подскажите, как это реализовать.

# создание пустого списка

lst = []

# количество элементов в качестве входных данных

n = int(input("Введите количество элементов для списка : "))

# итерация до диапазона

for i in range(0, n):
    ele = input()

    lst.append(ele)  # добавление элемента

print(lst)


Замена в строке двойного пробела на одинарный
У меня есть строка:

str = 'A l a  m a  k o t a'

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

'Ala ma kota'

Пытался решить так, но потерпел крах:
Cначала меняю двойные пробелы на '``':

for i in range(len(str)-1):
    if str[i] == ' ' and str[i+1]== ' ':
        comment.replace('str[i]', '`')
        comment.replace('str[i + 1]', '`')

Потом удаляю одинарные:

str.replace(' ', '')

И в конце заменяю '``' на пробел:

str.replace('``',' ')

Но вся эта конструкция не работает. Как можно решить данную задачу?

Не называйте переменные именами встроенных типов!
Можно воспользоваться регулярными выражениями, заменив первый пробел ни на что и сохранив второй

import re

regex = r"\s(\s)?"
test_str = "'A l a  m a  k o t a'"
subst = "\\1"

print(re.sub(regex, subst, test_str)) # 'Ala ma kota'

demo

а вот так можно заменить любое кол-во пробелов, больше одного, на один пробел

regex = r"\s((\s)(\s+)?)?"
subst = "\\2"
result = re.sub(regex, subst, test_str)

demo


Как объединить ячейки в новом xlsx файле подобно тому, как это есть в исходном xlsx файле?
Друзья, используя библиотеку openpyxl, хочу скопировать определенные ячейки из одного xlsx файла в другой (новый). Скопировать ячейки получилось, как и скопировать их стили, но проблема возникла в другом: некоторые ячейки могут быть объединены (MergedCell) и при их вставке в новый xlsx файл они, конечно, не объединяются. Можете подсказать, в каком направлении думать и как эти ячейки объединить в новом файле подобно тому, как это есть в исходном xlsx файле?
Если нужно, то вот пример части кода:
<code>
import openpyxl
from copy import copy

path = r"C:\Users\somepath\example.xlsx"
head = "A1:J2" #Заголовок таблицы, в котором есть объединенные ячейки

wb = openpyxl.load_workbook(path)
ws = wb.worksheets[0]

wb2 = openpyxl.Workbook()
ws2 = wb2.active

for row_number, row in enumerate(ws[head]):
    for col_number, cell in enumerate(row):
        ws2.cell(row_number+1, col_number+1, cell.value)
        if cell.has_style:
            ws2.cell(row_number+1, col_number+1).font = copy(cell.font)
            ws2.cell(row_number+1, col_number+1).fill = copy(cell.fill)
            ws2.cell(row_number+1, col_number+1).border = copy(cell.border)
            ws2.cell(row_number+1, col_number+1).number_format = copy(cell.number_format)
            ws2.cell(row_number+1, col_number+1).protection = copy(cell.protection)
            ws2.cell(row_number+1, col_number+1).alignment = copy(cell.alignment)
            ws2.cell(row_number+1, col_number+1).quotePrefix = copy(cell. quotePrefix)
            ws2.cell(row_number+1, col_number+1).pivotButton = copy(cell.pivotButton)
</code>

Это не работает? Из документации
openpyxl.worksheet.merge.MergeCells(count=None, mergeCell=())

for x in range(10):
    ws.merge_cells(start_row=x, start_column=1, end_row=x, end_column=4)


Не запускается exe файл python на других компьютера
при компиляции файла python в exe с использованием pyinstaller. этот файл не открывается на других компьютерах. на моем компе запускается нормально. при том что в коде просто выводит привет мир.

print('helloword')

На некоторых компах запускается , на остальных нет . при том что винда 7 у всех
Ошибка:

C:\Windows\system32>C:\xxx\xxx.exe
Traceback (most recent call last):
File “C:\Users\admin3\AppData\Local\Programs\Python\Python38-32\Lib\site-packa
ges\PyInstaller\loader\rthooks\pyi_rth_multiprocessing.py”, line 18, in <module>

File “c:\users\admin3\appdata\local\programs\python\python38-32\lib\site-packa
ges\PyInstaller\loader\pyimod03_importers.py”, line 623, in exec_module
File “multiprocessing\__init__.py”, line 16, in <module>
File “c:\users\admin3\appdata\local\programs\python\python38-32\lib\site-packa
ges\PyInstaller\loader\pyimod03_importers.py”, line 623, in exec_module
File “multiprocessing\context.py”, line 6, in <module>
File “c:\users\admin3\appdata\local\programs\python\python38-32\lib\site-packa
ges\PyInstaller\loader\pyimod03_importers.py”, line 623, in exec_module
File “multiprocessing\reduction.py”, line 16, in <module>
File “c:\users\admin3\appdata\local\programs\python\python38-32\lib\site-packa
ges\PyInstaller\loader\pyimod03_importers.py”, line 623, in exec_module
File “socket.py”, line 49, in <module>
ImportError: DLL load failed while importing _socket: Параметр задан неверно.
Failed to execute script pyi_rth_multiprocessing

Попробуйте установить набор распространяемых библиотек Redistributable Package (x86) vcredist_x86 максимально последних версий. на комп на котором не работает.


Не нашел решение на ошибку AttributeError: 'list' object has no attribute
Во время написания другого кода, столкнулся с проблемой, что не могу заставить работать массив в функции. Решил написать более простой код, что бы понять в чем проблема. Сам решить ее я не смог.
<code>
class I():
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def run(self):
        print(self.x + self.y)

def run():
    # b = I(1, 2)
    # b.run()

    arr = []
    create_array(arr)

    draw_array(arr)

def create_array(array):
    array.append(I(1, 2))
    array.append(I(2, 3))
    array.append(I(3, 4))

def draw_array(array):
    for i in array:
        I.run(array)

run()
</code>
в ответе должно выводиться
3
5
7

У вас 2 ошибки, обе в одной команде. ;-)
В конце программы, в определении функции
draw_array() вместо

I.run(array)

используйте

i.run()          # строчная буква i; в скобках нет параметра

Переменной цикла
for является строчная буква
i, а у метода
.run() класса
I нет параметров (кроме «скрытого» параметра
self, представляющего ссылку на конкретный объект класса
I).


ValueError: If using all scalar values, you must pass an index при создании Pandas DataFrame
Есть семь переменных: DATEhh, DECDATEhh, HAEhh, HANhh, HK2hh, HAE_TCOMPhh, HAN_TCOMPhh.
Все семь переменных имеют тип:  class 'pandas.core.frame.DataFrame'
Все семь имеют shape (48,1)
При создании DataFrame, который запишется в файл:

sm=pd.DataFrame({'DATE':DATEhh,'DECDATE':DECDATEhh,'HAE':HAEhh,'HAN':HANhh,'HK2':HK2hh,'HAE_TCOMP':HAE_TCOMPhh,'HAN_TCOMP':HAN_TCOMPhh})

выдается ошибка:

ValueError: If using all scalar values, you must pass an index

Каждую из 7 переменных можно вывести на экран (по 48 значений), т.е. скалярами они не являются. Похоже, что проблема в размерности каждой переменной (48, 1), а должно быть (48, ), но тип переменных dataframe, а не series потому ravel использовать не получится.
Можно записать данные в качестве словаря:

my_dict={'DATE':DATEhh,'DECDATE':DECDATEhh,'HAE':HAEhh,'HAN':HANhh,'HK2':HK2hh,'HAE_TCOMP':HAE_TCOMPhh,'HAN_TCOMP':HAN_TCOMPhh}

sm=pd.DataFrame.from_dict([my_dict])
sm.to_csv('hour_data.csv', index=False)

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

Попробуйте так:
<code>
df = pd.DataFrame({k: v.iloc[:, 0] for k,v in my_dict.items()})
</code>


Параллельное выполнение запросов
У меня есть 2 асинхронных запроса. Я хочу, чтобы они выполнялись в параллель друг другу. Поясню.Я хочу, чтобы к моменту, когда я сделаю
await resp_a, и
fetch(a), и
fetch(b)  уже скорее всего отработали и мне не потребуется ожидать ответа от сервера?

resp_a = fetch(a)
resp_b = fetch(b)
time.sleep(long_time)
await resp_a
await resp_b

В реальности, после выполнения
fetch(a), запроса к серверу не происходит. Происходит он лишь в момент времени
await resp_a. По крайней мере, так происходит в дебаггере.

Есть 2 запроса к разным сервисам. Считаем, что они достаточно тяжёлые. Хочется, не дожидаться их ответа, а выполнять их в параллель.

async def fetch():
    print('2')
    ...

print('1')
resp_a = fetch(a)  # Тяжёлый запрос 1
print('3')
resp_b = fetch(b)  # Тяжёлый запрос 2
time.sleep(long_time)  # Тяжёлая обработка. Где-то здесь, в параллель с этой тяжёлой обработкой запрос 1 обработался и запрос 2 обработался.
await resp_a
await resp_b

Как я говорил выше, если выполнять в дебаггере, я получу:

1
  2
  3

Без

1
  3
  2

resp_a = fetch(a)
resp_b = fetch(b)

Не выполняет запросов, а только создает структуру асинхронных вызовов. awaitable объект.
Начать его выполнять его надо присоединить к loop. Слово await  делает из awaitable future b выполняет все запланированные future.
Чтоб выполнить их параллельно следует использовать asyncio.gather или asyncio.wait, иногда случае enshure_future
gather - выполняет оба запроса конкурентно

result_a, result_b = await asyncio.gather(resp_a,resp_b) # выполняет запросы

wait - запускает оба запроса, возвращает первый или все

done, pending = await asyncio.wait([resp_a,resp_b],return_when=FIRST_COMPLETED)

first = await done
done, pending = await asyncio.wait(pending,return_when=FIRST_COMPLETED)
second = await done

asyncio.ensure_future - запускает запрос

resp_a = asyncio.ensure_future(fetch(a))
resp_b = asyncio.ensure_future(fetch(b))

Запрос запущен, но ещё не отправлен.

time.sleep(long_time)

всё ещё не запущен, time.sleep блокирует выполнение запросов

await asyncio.sleep(long_time)

вот тут запустятся все три: resp_b,resp_a, sleep и ждем sleep

await resp_a
await resp_b

Дожидаемся resp_a, а потом resp_b.


Your input ran out of data; interrupting training
Вылезает ошибка недостатка данных. Примерно 4-5 дней назад этой ошибки на этом же коде не было.
Код создания модели:

model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=(27, 48, 1)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(32, (3, 3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(64, (3, 3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Flatten())
model.add(Dense(64))
model.add(Activation("relu"))
model.add(Dropout(0.5))
model.add(Dense(10))
model.add(Activation('sigmoid'))
model.compile(loss="categorical_crossentropy", optimizer="adam",
              metrics=["accuracy"])

Код обучения

datagen = ImageDataGenerator()
dirTrain = "/content/GeneratedI/train"
train_data = datagen.flow_from_directory(dirTrain, target_size=(27, 48), batch_size=100,
                                         class_mode="categorical", color_mode="grayscale")
dirVal = "/content/GeneratedI/val"
validation_data = datagen.flow_from_directory(dirVal, target_size=(27, 48), batch_size=100,
                                              class_mode="categorical", color_mode="grayscale")
print("Training the network...")
t_start = time.time()
history = model.fit_generator(train_data,
                              steps_per_epoch=60000 // 10,
                              epochs=1,
                              validation_data=validation_data,
                              validation_steps=10000 // 10)
print(time.time() - t_start)

Собственно изображения точно есть, 60к на обучение и 10к на валидацию. Даже вывод это подтверждает:

Found 60000 images belonging to 10 classes.
Found 10000 images belonging to 10 classes.

Использую Google Colaboratory

history = model.fit_generator(train_data,
                              steps_per_epoch=60000 // 10,  # <-- 1
                              epochs=1,
                              validation_data=validation_data,
                              validation_steps=10000 // 10)  # <-- 2

В первом и втором случае делить требуется на размер батча. У вас это 100, судя по генератору:

train_data = datagen.flow_from_directory(dirTrain,
                                         target_size=(27, 48),
                                         batch_size=100,  # <-- 3
                                         class_mode="categorical",
                                         color_mode="grayscale")


Совместить 2 списка python
Имеется 2 списка:

lst_1 = ["qwe", "123", "qaz", "rtr"]
lst_2 = ["fff", "ert", "456", "lj"]

нужно получить это:

result = [["qwe", "fff"], ["123", "ert"], ["qaz", "456"], ["rtr", "lj"]]


Не могу понять как читать большое кол-во файлов python3
Я хочу сделать скрипт который будет парсить имена файлов и содержимое этих файлов, а потом заносить все данные в другой файл. Парсинг имен я сделал, а вот читать кучу файлов списком - я не умею.
Поможете?
<code>
import logging
import time

parsdb = open('parsdb.txt','w+')
parsdb.close()
parsdb = open('parsdb.txt','a+')

def filenameparser():
    filecat = input('Путь к папке: ')
    fileNameFilter = input('Расширение файлов с паролями: ')
    myDBList = os.listdir(filecat)
    myDBString = '\n'.join(myDBList)
    replaceyml = myDBString.replace(fileNameFilter,' - ')
    print('Все файлы в каталоге: ' + replaceyml)
    parsdb.write(replaceyml)
    print('Был создан файл parsdb.txt со списком файлов.')

logging.basicConfig(filename="sample.log", level=logging.DEBUG)
logging.debug("\nDebug: \n" + time.ctime() + '\n')
logging.info("\nInformational: \n" + time.ctime()+ '\n')
logging.error("\n!!!ERROR!!!: \n" + time.ctime()+ '\n')

filenameparser()```
</code>

Вот так можно считать и вывести содержимое файлов в папке.

import os

for file_name in os.listdir(dirname):
    with open(os.path.join(dirname, file_name), 'r') as file:
        print(file.read())

Есть еще такой вариант. Рекурсивно пройтись по папкам

from pathlib import Path

print([open(i).read() for i in Path(dirname).rglob('**/*.txt')])


Как работает async with?
Каким образом работает конструкция:
<code>
async with
</code>
В вопросе я опираюсь на первые строки примеров aiohttp.

from aiohttp import web

async def hello(request):
    return web.Response(text='Hello, world')

async def test_hello(aiohttp_client, loop):
    app = web.Application()
    app.router.add_get('/', hello)
    client = await aiohttp_client(app)
    resp = await client.get('/')
    assert resp.status == 200
    text = await resp.text()
    assert 'Hello, world' in text

Например, вот так.
По сути это тот же контекстный менеджер
with, который имеет 2 дополнительных метода
__aenter__ и
__aexit__, что позволяет пользоваться контекстным менеджером для асинхронных приложений.
Использование обычного менеджера
with не предусмотрено для асинхронных функций, так как у него не соответствующих методов. Разница в работе между
with и
async with в том, что второй не только  выполняет все критические функции внутри, а также позволяет быть уверенным, что внутренний блок инструкций был
awaited.
Документация по
async with здесь.


Изменение размера окна выполняет какое-либо функцию
как можно сделать так, чтобы при изменении размера окна tkinter(а) с помощью мышки(таскать ее за уголок) выполнялась функция?

<code>
import tkinter as tk

root = tk.Tk()
root.geometry("400x300")

def callback(event): # функция, которая выполняется, когда размер окна именён
    #или окно перемещено
    print("Размер изменён!")

root.bind("<Configure>", callback) #само событие вызывается, если изменить размер

root.mainloop()
</code>
Также эта функция выполнится один раз при старте программы


Декод текста из бинарного кода
Хочу сделать из бинарного кода строку через Python. Искал методы, но они все для кодов без пробелов. А у меня бинарный код с пробелами.
Я декодировал строку
lol в
1101100 1101111 1101100 и хочу снова превратить её в
lol через Python

x = "1101100 1101111 1101100"
somethingtodecode(x)


Python. Область видимости переменных
Сразу извините, если решение легкое. Я в этом новичек.
У меня есть функция, которая должна дополнять с вызовом значение глобальной переменной.
После объявления перменной и присвоения значения, используя перменную в функции ошибка " local variable 'full' referenced before assignment"
Пробовал несколько вариантов:

global full
full = 'test'
def add(user):
    full = full + '{0.first_name}'.format(user)
    return full
ERROR: local variable 'full' referenced before assignment

global full
full = 'test'
def add(user):
    nonlocal full
    full = full + '{0.first_name}'.format(user)
    return full
ERROR:no binding for nonlocal 'full' found

full = 'test'
def add(user):
    nonlocal full
    full = full + '{0.first_name}'.format(user)
    return full
ERROR:no binding for nonlocal 'full' found

Чуть-чуть промахнулись)
<code>
full = 'test'
def add(user):
    # add не видит full
    global full
    # а теперь видит
    full = full + '{0.first_name}'.format(user)
    # меняет full (так что не обязательно его возвращать следующей строкой)
    return full
</code>
Ключ. слово global используется внутри блока, чтобы подтянуть переменную из "родительского" неймспейса


Как преобразовать список?
Есть файл с данными в таком виде:

1 2
4 1
5 4
1 1
5 3
6 1

Нужно из него сделать такой список:

[
    [
        [1, 2],
        [4, 1],
        [5, 4]
    ],
    [
        [1, 1],
        [5, 3],
        [6, 1]
    ]
]

То есть разбить по парам и каждые 3 пары в список.
Пока только смог сделать так:

['1', '2', '4', '1', '5', '4', '1', '1', '5', '3', '6', '1']

Подскажите, пожалуйста, как лучше всего сделать?

<code>
def parseFile(file):
    arr = [list(line.split()) for line in file]
    return [[arr[i],arr[i+1],arr[i+2]] for i in range(0, len(arr)-2, 3)]

with open(filename, 'r') as file:
    arr = parseFile(file)
</code>
По идее должно работать, не проверял, извините)
Но идею вы поняли:

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

Если я где-то допустил ошибку, то где-то промахнулся с индексами.
Если так, то поправьте, пожалуйста.


Как реализовать парсинг по времени?
Всем добрый день. Подскаите пожалуйста, вот есть парсер. Как сделать так, чтобы он работал каждые 2 часа? Программа запрашивает число (время) как часто нужно парсить сайт, и после этого она каждые (например юзер ввёл 3) 3 часа парсит этот сайт. Но чтобы она не останалвивалась, работала 24/7. Вот есть код, немного глупый, но он с фиксированным временем.
<code>
while True:
    if datetime.datetime.now().time().hour == 3 or
    datetime.datetime.now().time().hour == 6 or
    datetime.datetime.now().time().hour == 9 or
    datetime.datetime.now().time().hour == 12 or
    datetime.datetime.now().time().hour == 15 or
    datetime.datetime.now().time().hour == 18 or
    datetime.datetime.now().time().hour == 21 or
    datetime.datetime.now().time().hour == 24:
        main()
    else:
        pass
    time.sleep(3600)
</code>
Подскажите, как такое осуществить? Заранее большое спасибо!

Для таких целей вроде есть модуль schedule
Простой пример:

import datetime

import schedule

i = 1

def job():
    global i
    print(f"Запустился {i} раз")
    i += 1
    print(datetime.datetime.now())

schedule.every(5).seconds.do(job)

while True:
    schedule.run_pending()

Вывод:

Запустился 1 раз
2019-11-01 12:18:27.172611
Запустился 2 раз
2019-11-01 12:18:32.173117
Запустился 3 раз
2019-11-01 12:18:37.173148

Модуль можно настраивать достаточно гибко:

schedule.every(10).minutes.do(job)
#каждые 10 минут

schedule.every().hour.do(job)
# каждый час

schedule.every().day.at("10:30").do(job)
# каждый день в 10-30

schedule.every().monday.do(job)
# каждый понедельник

schedule.every(2).wednesday.at("13:15").do(job)
# Каждую вторую среду в 13-15

schedule.every().minute.at(":17").do(job)
# каждую минуту в 17 секунду

Кроме того, можно передавать параметры в ту функцию, которую мы хотим вызывать:

import schedule

i = 0

def greet(name):
    global i
    print('Hello', name)
    i += 1
    if i == 5:
        return schedule.CancelJob # Отменяем задачу после 5 запуска

schedule.every(1).to(3).seconds.do(greet, name='Yandex')
# Запускаем задачу в случайное время время от 1 до 3 секунд

while True:
    schedule.run_pending()


Как ускорить скрипт?
При прохождение теста, 1 из тестов не срабатывает из за превышение лимита, либо ошибки в коде.

Суть задания если в нижней строке из файла text.txt (1 7 3 4 7 9) есть
  сумма из двух чисел равная значению верхней (5), то в файл записать 1,
  иначе 0.

    import os
    def main():
        f = open('text.txt', 'r').read().split()
        w = open('text2.txt', 'r+')
        target = int(f[0])
        l = [int(f[i]) for i in range(1, len(f))]
        l.sort()
        print(l)
        # Как ускорить данный участок кода
        for i in range(len(l)):
            for j in range(len(l) - 1):
                if l[i] + l[j + 1] == target:
                    w.write('1')
                    return
        #
        if os.stat('text2.txt').st_size == 0:
            w.write('0')

    if __name__ == "__main__":
        main()

Содержание файла text.txt:

```
5
1 7 3 4 7 9
```

Воспользовался всеми советами, в итоге на 1 тест прошел больше, но другой тест так же выходит за заданное время в 1 сек (1.091s). К сожалению, нет примерных данных с того теста. Спасиб всем кто помог с поиском решения.

    import itertools

    def fun(target, nums):
        for x in nums[:-1]:
            for y in nums[x+1:] :
                if x+y == target :
                    return True
        return False

    def main():
        with open('text.txt') as f:
            target, l = f.readlines()
        target = int(target)
        l = [int(i) for i in l.split() if target >= int(i)]
        l.sort()
        print(l)

        flag = fun(target, l)

        with open('text2.txt', 'w') as f:
            f.write('1' if flag else '0')

    if __name__ == "__main__":
        main()

на 20 % быстрее ответа @gil9red  :) на моем ноуте timeit дает (последний код ниже)
<code>
1.1719330577166354
0.6272641881987562
0.5278181732993907

def f( target, nums ):
    for x in nums[:-1]:
        for y in nums[x+1:] :
            if x+y == target :
                return True
    return False
</code>


Работа Kivy Android в фоне
Доброе время суток, кто нибудь знает как реализовать подобную задачу на kivy под android?
Как тут
у меня только задача попроще, надо просто что бы виджет появлялся поверх всех программ и пропадал.

Это невозможно. Kivy приложение на Android запускается только в режиме fullscreen и ни о каких виджетах, типа "виджет погоды", не может быть и речи.


Как сделать, чтобы текст исчез по нажатию на окно?
Надо, чтобы при нажатии на окно в любую область, исчезал текст.
Как правильно это сделать?
<code>
from PyQt5.QtWidgets import QWidget, QApplication, QVBoxLayout, QPushButton,
QLabel
from PyQt5.QtCore import Qt

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

    self.setWindowFlags(Qt.FramelessWindowHint)

    self._old_pos = None

    layout = QVBoxLayout()
    layout.addStretch()
    layout.addWidget(QPushButton("Закрыть окно", clicked=self.close))

    self.setLayout(layout)

    self.lbl = QLabel(self)
    self.lbl.setText("text")
    self.lbl.resize(30,30)

def mousePressEvent(self, event):
    if event.button() == Qt.LeftButton:
        self._old_pos = event.pos()

def mouseReleaseEvent(self, event):
    if event.button() == Qt.LeftButton:
        self._old_pos = None

def mouseMoveEvent(self, event):
    if not self._old_pos:
        return

    delta = event.pos() - self._old_pos
    self.move(self.pos() + delta)

if __name__ == '__main__':
    app = QApplication([])
    w = Widget()
    w.resize(400, 400)
    w.show()
    app.exec()
</code>

Добавьте
self.lbl.clear()  в методе
mousePressEvent

def mousePressEvent(self, event):
    if event.button() == Qt.LeftButton:
        self._old_pos = event.pos()

        self.lbl.clear()                                          # <<---


Как проверить, является ли файл пустым?
Как проверить файл на отсутствие в нем символов?

>>import os
>>os.stat("file").st_size == 0
True


Как ловить Semetation fault c++?
У меня есть код на питоне:

def mylen(list):
    tmp = 0
    i = 0
    while True:
        try:
            tmp = l[i] #пытаемся присвоить переменной tmp значение списка
            i+=1
        except IndexError: #если i вышло за размеры списка - завершаем цикл
            break
    return i

И я хочу перенести его на c++:

int arrlen(int data[]){
    int tmp, i = 0;
    while (true){
        try {
            tmp = data[i];
        } catch () {
            break;
        }
        i++;
    }
}

Но я не понимаю что нужно написать в скобочках catch, чтобы ловить IdexError (Semetation fault/SIGSEGV)?
Возможно, нужно использовать throw, но какое исключение он должен генерировать чтобы быть пойманным catch?

Никак.
try /
catch в С++ служит для перехвата исключений, бросаемых оператором
throw. А выход за пределы массива и другие ситуации, грозящие SIGSEGV, в С++ обязан не допускать программист.
Если хочется допускать выход за пределы массива, но с генерацией исключения, то следует использовать один из стандартных классов
std::vector /
std::array и метод
at, который будет генерировать исключение
std::out_of_range:

::std::vector<int> items{};
try
{
    int tmp{items.at(::std::size_t{42})};
}
catch (::std::out_of_range const & exception)
{
    ::std::cout << exception.what() << ::std::endl;
}

Еще стоит пояснить, что
int data[] в примере из вопроса не является массивом. Это указатель. Узнать, на какое количество элементов указывает не нулевой указатель (и указывает ли вообще) в С++ невозможно.


re.findall возвращает часть найденного текста при поиске повторяющихся фрагментов строки
Допустим, есть строка
ABC abcabc fff abcabcabc.
Возможно ли с помощью регулярного выражения получить список вида
[ABC, abcabc, abcabcabc]?
Я сделал так:

re.findall(r"(abc)+", str)

Но результат другой :(

При использовании метода
re.findall с регулярным выражением, содержащим захватывающую подмаску, результатом будет список строк (или список кортежей строк, если таких подмасок больше одной). Так как захватывающая подмаска в данном выражении повторяется (с помощью квантификатора
+, но и в любом другом случае, например,
{0,10},
*, результат будет похожий), в буфере памяти первой подмаски сохранится только последнее захваченное значение.
Т.е.
re.findall(r'(abc)+', 'abcabcabc') вернёт только
abc и список длиной в 1 элемент.
Вы можете использовать незахватывающую подмаску,
(?:...):

import re
text = 'ABC abcabc fff abcabcabc'
print( re.findall(r'(?:abc)+', text, flags=re.I) )
# => ['ABC', 'abcabc', 'abcabcabc']

См. пример работы программы. Обратите внимание на
flags=re.I, флаг регистронезависимого поиска.
В других случаях, если вы не можете заменить захватывающие подмаски на незахватывающие, например, если вы используете обратные ссылки для поиска повторяющихся шаблонов (
r'(.)\1{2,}'), тогда вам придётся использовать
re.finditer:

[m.group() for m in re.finditer(r'(abc)+', text, flags=re.I)]