Задать вопрос
  • Телеграм Бот Python. Кнопки и переменные?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Телеграм Бот Python. Кнопки и переменные?
    Нет!
    Ответ написан
    3 комментария
  • Как убрать лишние знаки?

    Vindicar
    @Vindicar
    RTFM!
    Ещё один не выучил основы языка, но пытается работать с БД.

    fectchone() возвращает кортеж, в твоём случае кортеж с одним элементом. Скобки - это строковое представление кортежа. Как вытащить значение из кортежа - читай по ссылке.

    Кортежи, списки и словари - это вообще азы языка. Их надо знать, и узнавать с первого взгляда.
    Ответ написан
    Комментировать
  • Можно ли написать OS на Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Сейчас включу максимального зануду и скажу, что не всё так уж однозначно.
    Вопрос в том, что называть языком. Если языком считать синтаксис, то вполне можно написать транспилер, который будет транслировать питоновский код в сишный код, например, а его уже в машинный.
    ОС, написанная на Си - это скомпилированный машинный код - результат работы компилятора над исходником на языке Си. Да, стандартный компилятор Си может откомпилировать машинный код, а потом стандартный сборщик превратит его в набор файлов операционной системы.
    Стандартный транслятор питона в его байткод и интерпретатор этого байткода не смогут работать самостоятельно без операционной системы, но разве в условии вопроса было сказано про стандартный интерпретатор?

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

    Простой ответ - нет, питон не предназначен для написания ОС, но использовать его для разработки большОго количества элементов ОС можно.
    Ответ написан
    2 комментария
  • Почему приложение Flask не работает в классе?

    Vindicar
    @Vindicar
    RTFM!
    Чтобы понять, нужно понимать три вещи про питон.
    Во-первых, в нём всё - оператор. Да-да.
    def - это оператор объявления функции.
    class - оператор объявления класса.
    Тебе никто не запрещает сделать
    if condition:
        def foo():
            pass
    else:
        def bar():
            pass


    Во-вторых, все методы класса существуют на уровне класса. Явная передача self на это намекает.
    Иными словами:
    class Foo:
        def bar(self, baz):
            print(self, baz)
    
    foo = Foo()
    # вот этот вызов
    foo.bar('hallo!')
    # полностью эквивалентен вот этому
    Foo.bar(foo, 'hallo!')

    А когда ты обращаешься к foo.bar, Питон конструирует специальный временный объект-обёртку, который ссылается на Foo.bar(), но в то же время подставляет туда первым параметром тот объект foo, к которому произошло обращение. Так что если Foo.bar() принимает два параметра (self и baz), то foo.bar() принимает уже один (baz), так как правильный self будет подставлен этой обёрткой самостоятельно.

    В-третьих, декоратор - это просто синтаксический сахар для вызова функции. Иными словами:
    @app.route('/') 
    def index(self):
        return render_template('index.html')

    будет эквивалентно вот такому коду:
    def index(self):
        return render_template('index.html')
    
    _decorator = app.route('/')
    index = _decorator(index)

    Причем это будет работать одинаково и вне класса, и внутри класса.
    Как это относится к твоему вопросу? А вот как.
    class Web:
        app = Flask(__name__) 
    
        @app.route('/') 
        def index(self):
            return render_template('index.html')

    Последовательность действий тут такова:
    1. Создаётся пространство имён для нового класса, пока что безымянного.
    2. В этом пространстве имён создаётся переменная app, её выражение вычисляется немедленно
    3. В этом пространстве имён создаётся функция index()
    4. Отрабатывает декоратор @app.route(), и регистрирует эту функцию index() как обработчик запроса. Обрати внимание, ни функция index(), ни @app.route понятия не имеют, что index() находится внутри класса! Поэтому app.route не ожидает, что index() будет первым параметром принимать какой-то там self. Как следствие, вместо self функция index() получит то, что передал первым параметром Flask. В данному случае - ничего, так как у тебя роут без параметров.
    5. Ну и в итоге отрабатывает создание класса, с учётом указанных предков (у тебя это неявно указанный object), наполнения пространства имён, и пр. Этот класс потом присваивается переменной Web в вышележащем пространстве имён.

    Ну и как теперь жить?
    А очень просто. Если тебе вот позарезу нужны обработчики роутов в виде методов класса, можно сделать так:
    class Web:
        def __init__(self):
            self.app = Flask(__name__) 
            # получаем обёртку для метода, привязанную к нашему self, см. пункт 2
            self_index = self.index
            # вызываем декоратор вручную, см. пункт 3.
            decorator = self.app.route('/')
            decorator(self_index)
            # ну или то же самое в одну строку:
            self.app.route('/')(self.index)
    
        def index(self):
            return render_template('index.html')

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

    senku1435
    @senku1435
    py aiogram develop, c# mid
    Видно не в том интернете искали
    from pyowm import *
    #Главная часть
    owm = OWM('ced6722a4e4375a0412830ba1f4daf74')
    place = input('Введите город: ')
    mgr = owm.weather_manager()
    
    observation = mgr.weather_at_place(place)
    w = observation.weather
    #До сюда
    
    #темпреатура
    t = w.temperature( "celsius" )
    t1 = t['temp']
    t2 = t['feels_like']
    t3 = t['temp_max']
    t4 = t['temp_min']
    
    #скорость ветра
    wi = w.wind()['speed']
    
    #humidity
    humi = w.humidity
    
    #status
    st = w.status
    
    #clouds
    cl = w.clouds
    
    #detail status
    ds = w.detailed_status
    
    #time last status
    time = w.reference_time('iso')  #хз, но iso надо
    
    #pressure
    pr = w.pressure['press']  #такая же херня как и iso хз, но надо
    
    #visibility distance
    vd = w.visibility_distance
    
    #Кароче можно еще через f'' и {}
    print(f'В городе {place} температура {t1}°C, ощущается как {t2}°C, максимальная температура {t3}°C, минимальная температура {t4}°C.')
    
    detailstatus = input("Вам вывести полный статус?: ")
    if detailstatus == "Да":
        print(f' Скорость ветра составляет {wi} м/с \n Влажность {humi}% \n Статус {st} \n Облачность {cl}\n Детальный статус {ds} \n Видимость {vd} м\n Последнее время диагностики {time}\n Давление {pr} мм.рт.ст ')
        print('Спасибо что воспользовались нашей программой!')
    else:
        print('Хорошо \nСпасибо что воспользовались нашей программой!')
    
    
    
    #для перевода нужно
    from pyowm.utils.config import get_default_config
    translate = get_default_config()
    
    #указываем значение (список) и указывваем значение (в нашем случае это русский язык)
    translate['language'] = 'ru'
    Ответ написан
    3 комментария
  • Поиск вне зависимости от позиции?

    @AVKor
    Регулярки тут не нужны.
    $ python3
    Python 3.9.2 (default, Feb 28 2021, 17:03:44) 
    [GCC 10.2.1 20210110] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> words = 'как дела'
    >>> phrase = 'у тебя дела как'
    >>> [word for word in words.split(' ') if word in phrase.split(' ')] == words.split(' ')
    True
    >>> phrase = 'у тебя дела'
    >>> [word for word in words.split(' ') if word in phrase.split(' ')] == words.split(' ')
    False
    >>>
    Ответ написан
    Комментировать
  • Поиск вне зависимости от позиции?

    @Samad_Samadovic
    Попробуйте оператор in
    A = input()
    if 'дела' in A.lower() and 'как' in A.lower():
        print(A);
    Ответ написан
    Комментировать
  • Поиск вне зависимости от позиции?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    пробуй
    как.+дела
    как.*дела
    Ответ написан
    2 комментария
  • Как лучше читать файл?

    @alekssamos
    Программист любитель
    Если файл большой, например, CSV 4 ГБ, тогда нужно обрабатывать по одной строке за раз.
    То есть примерно так:
    def main():
        original_file = "pp-complete.csv"
        with open(original_file, encoding="UTF-8", newline="") as of:
            reader = csv.reader(of)
            for row in reader:
                Transaction_ID, Price, Date_of_Transfer, Postcode, Property_Type, Old_or_New, Duration,
                            PAON, SAON, Street, Locality, Town_or_City,
                            District, County, PPD_Category_Type, Record_Status = row
    # что-то делаешь дальше именно с этой с одной строкой
    # и идёшь дальше
    Ответ написан
    Комментировать
  • Как найти и заменить текст в файлах в Linux?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    find website.com -exec sed -i 's/mail1@gmail.com/mail2@gmail.com/' {} \;
    Ответ написан
    Комментировать
  • Как сделать, чтобы когда в группе появилась запись она автоматически отправлялась в беседу в вк?

    senku1435
    @senku1435
    py aiogram develop, c# mid
    import vk_api
    from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
    import random
    
    def send(user_id, attachment):
        random_id = random.randint(-2147483648, +2147483648)
        vk.messages.send(
            peer_id=user_id,
            random_id=random_id,
            message="Новый пост в группе!",
            attachment=attachment
            )
    #Сам код main
    vk_session_group = vk_api.VkApi(token='ТОКЕН') # Токен группы
    vk = vk_session_group.get_api()
    longpoll_group = VkBotLongPoll(vk_session_group, 12345)  # ID группы
    
    user_id = 12345678  # Кому отправлять репост
    
    for event in longpoll_group.listen():
        if event.type == VkBotEventType.WALL_POST_NEW:
            id_ = event.object['id']
            owner_id_ = event.group_id
            wall_id = f'wall-{owner_id_}_{id_}'
            print('Новый пост! - ', wall_id)
            attachment = wall_id
            send(user_id, attachment)

    Прежде чем задавать вопрос пожалуйства воспользуйтесь гуглом!
    Ответ написан
    2 комментария
  • Как писать правильнее?

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

    import datetime
    def fun(a,b):
        return a + b
    def fun2(arg1=1, arg2=2):
        return arg1 + arg2
    print("вариант 1")
    for j in range(10):
        start = datetime.datetime.now()
        for i in range(10000):
            a=fun(5, 6)
            fun2(arg2=a)
        end = datetime.datetime.now()
        print(end - start)
    print("===================")
    print("вариант 2")
    for j in range(10):
        start = datetime.datetime.now()
        for i in range(10000):
            fun2(arg2=fun(5, 6))
        end = datetime.datetime.now()
        print(end - start)

    вывод:
    вариант 1
    0:00:00.006048
    0:00:00.002219
    0:00:00.001937
    0:00:00.001955
    0:00:00.001893
    0:00:00.001886
    0:00:00.001879
    0:00:00.001891
    0:00:00.001895
    0:00:00.001887
    ===================
    вариант 2
    0:00:00.001541
    0:00:00.001551
    0:00:00.001551
    0:00:00.001546
    0:00:00.001564
    0:00:00.001535
    0:00:00.001537
    0:00:00.001546
    0:00:00.001516
    0:00:00.001704


    имеем в среднем раза в полтора разницу по скорости

    что вам важнее в данный момент сильно зависит от конкретной задачи
    Ответ написан
    1 комментарий
  • Как исправить ошибку в присвоении переменной?

    Vindicar
    @Vindicar
    RTFM!
    for code in store:
    Для словаря цикл for перебирает ключи, т.е. '12345', '23456'...
    А ты как будто что-то другое перебираешь, типа
    for item in store[code]:
        print(item['price'], 'x', item['quantity'])
    Ответ написан
    1 комментарий
  • Как исправить ошибку в присвоении переменной?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    в строке
    for code in store:
    вы перебираете ключи словаря.
    затем, получив очередной ключ в переменную code, вы в строке
    price_1 = code['price']
    обращаетесь к тому, что находится в code, и пытаетесь найти элемент его по индексу "price".
    Но в code находится ключ, и он - строка. Об этом вам и говорит ошибка - так со строкой работать нельзя.

    Для того, чтобы правильно всё сделать, можно попробовать так:
    for name in goods:
        code = goods[name]
        print('Название товара:', name, '    Его код:', code)
        for code in store:
            price_1 = store[code][0]['price']
            quantity_1 = store[code][0]['quantity']
            summ = price_1 * quantity_1
            print('полная стоимость товара:', summ)

    или так:
    for name in goods:
        code = goods[name]
        print('Название товара:', name, '    Его код:', code)
        for code, value in store.items():
            price_1 = value[0]['price']
            quantity_1 = value[0]['quantity']
            summ = price_1 * quantity_1
            print('полная стоимость товара:', summ)
    Ответ написан
    Комментировать
  • Работа с CSV-файлами в Python?

    @serhiops
    Python/JavaScript/C++
    Чтобы
    понять, как это все работает
    нужно смотреть документацию/гайды. Абсолютно ничего сложного в этом нет.
    Чтение
    Запись
    Если будет возникать конкретная ошибка, то уже пиши в коментариях.
    Ответ написан
    1 комментарий
  • Нельзя установить сторонний APK?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Написано ж предельно понятно - Большой Демократичный Гугл демократично попросил тотал убрать фичу установки APK, и тотал сказал "Слушаю и повинуюсь, белый господин" :)
    Либо откатить тотал назад - на 4pda однозначно есть все версии.
    Либо перестать им пользоваться для установки - я вот даже и не знал, что для установки APK со стороны нужны какие-то программы - тап в проводнике и все поехало...
    Ответ написан
    Комментировать
  • Счетчик работает, а команды COGS перестали. Что делать?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Счетчик работает, а команды COGS перестали. Что делать?

    Честно признаться, что взяли ношу не по плечу.
    Открыть учебники, читать документацию, разбираться как работает код, дебажить его, и главное - перестать попрошайничать.
    Ответ написан
    Комментировать
  • Какая Linux без проблем встанет вместе с Windows 10(на один диск)?

    Если Вы ставите в первый раз, то ставьте Ubuntu и все дистрибутивы основанные на нем - elementaryOS, linuxMint и т.д. Более дружелюбного дистрибутива не найти.
    Ответ написан
    Комментировать
  • Почему выдает ошибку при парсинге "TypeError: find() takes no keyword arguments"? Как исправить это?

    seven5674
    @seven5674
    Старый я уже что бы что-то в себе менять
    roomlist у тебя <class 'bs4.element.Tag'>
    Читай доки

    Измененный пример

    import requests
    from bs4 import BeautifulSoup
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0"}
    url = "https://hamptonvolgograd.ru/nomera/"
    response = requests.get(url, headers=headers)
    soup = BeautifulSoup(response.text, "html.parser")
    roomlist = soup.findAll("span", class_="h1")
    
    for hostel in roomlist:
        print(hostel.text.strip())

    вывод
    Номер с двуспальной кроватью (номер первой категории)
    Номер с двумя кроватями (номер первой категории)
    Номер с двуспальной кроватью и диваном-кроватью (Джуниор сюит)
    Номер для людей с ограниченными возможностями (номер первой категории)

    Ответ написан
    2 комментария
  • Как читать лицензионные DVD в Ubuntu?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    https://itsfoss.com/play-dvd-ubuntu-1310/
    Говорят что так, сам не пробовал
    Ответ написан
    3 комментария