• Ошибка str не могу исправить, как ее исправить?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Какая-то из переменных price, name, url приходит из парсера со значением None. Чтобы ошибки не было, надо предварительно проверять каждую переменную на None, либо перехватывать ошибку и обрабатывать (так прямее).
    Ответ написан
    Комментировать
  • Бот не считает формулу. Как исправить?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Как я понял, когда бот начинает работать, он обрабатывает зарегистрированные в нем хэндлеры, и ваш хэндлер lake перехватывает всё, кроме явно start и help, поэтому дальше него и не проходит. Я глубоко не вникал, возможно этот момент я неправильно понял.
    Но, в принципе, можно обойтись и этим одним хндлером, просто правильно обрабатывать то, что в него приходит. А приходить в него должно либо выбор кнопки, либо число.
    При выборе кнопки фиксируем номер кнопки и ждем число. Если пришло число - вычисляем, возвращаем, сбрасываем номер кнопки и всё сначала.

    lake_number = 0
    
    
    @dp.message_handler()
    async def lake(message: types.Message):
        global lake_number
        if message.text == 'Бассейн №1':
            await bot.send_message(message.from_user.id, 'Введи расстояние до воды №1.')
            lake_number = 1
        if message.text == 'Бассейн №2':
            await bot.send_message(message.from_user.id, 'Введи расстояние до воды №2.')
            lake_number = 2
        if bool(lake_number) and message.text.isdigit():
            b = int(message.text)
            if lake_number == 1:
                h = 8 - b
                v = (h / 3)
                level = v / 16000 * 100  # тут в формуле где-то ошибка, поэтому я ее просто убрал
                await bot.send_message(message.from_user.id,
                                       str("Количество:" + str(v) + "м3. Глубина:" + str(h) + "м. Наполнение: " + str(
                                           level) + "%"))
            if lake_number == 2:
                h2 = 5 - ((b - 1) * float(0.7))
                s2 = (90 - (b * 0.52)) * (100 - (b * 0.52)) / 2
                n = sqrt(2500 * s2)
                s1 = 1
                g = s1 + n + s2
                v2 = (h2 / 3) * g
                level2 = v2 / 17000 * 100
                await bot.send_message(message.from_user.id,
                                       str("Количество:" + str(v2) + "м3. Глубина:" + str(h2) +
                                           "м. Наполнение: " + str(level2) + "%"))
            lake_number = 0
            await bot.send_message(message.from_user.id, "Попробуй еще...")
    Ответ написан
    4 комментария
  • Как правильно оформить sql-запрос чтобы он был читаемый?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Тело with в скобках я бы сдвинул на таб вправо, и странные запятые в начале строк убрал бы взад.
    Также inner join вправо на таб вместе с on- потому что оно вместе с первой таблицей является подуровнем from.
    Но вообще это вкусовщина, и если требований не зафиксировано где-нибудь в ВНД, то хоть в одну строчку пиши всё...
    Как-то
    так
    with sum_bon as
    (
        select 
            worker_ref_id, 
            employee_title, 
            sex, 
            sum(bonus) as sbon 
        from 
            sf_employee as sfe
            inner join sf_bonus as sfb
            on sfe.id=sfb.worker_ref_id
        group by 
            employee_title, 
            sex, 
            worker_ref_id
    )
    
    select 
        sum_bon.employee_title, 
        sum_bon.sex, 
        avg(sfe.salary+sbon) compensation 
    from 
        sf_employee as sfe
        inner join sum_bon
        on sfe.id=sum_bon.worker_ref_id
    group by 
        sum_bon.employee_title,
        sum_bon.sex
    Ответ написан
    Комментировать
  • Возможно ли работать в консоли через iPad?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    syslinux, найдите кого-то с ipad и попробуйте с его ipad порешать пару задач своих. Только так и поймете, как вам дальше поступать.
    Лично я бы под задачи, не дающие нагрузки на проц, взял бы Macbook Air. Легкий, удобный, понятный, и нет ipad-овских планшетных ограничений.
    Но надо понимать - если вы начнете его нагружать, он превратится в печку.
    Ответ написан
  • Как записывать информацию в CSV каждый раз с новой строки?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Добавьте в конец строки \n

    Снова и снова говорю вам: найдите и проработайте «Изучаем Python». Там всё разжёвано.
    Ответ написан
    Комментировать
  • Как правильно добавить индекс?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    images = ['a', 'b', 'c']
    for c in "educative":
        print(f'perehodim_k_sled_bukve {c}')
        for number, image in enumerate(images):
            print(f'буква {c} цикл {number} image {image}')
    Ответ написан
    Комментировать
  • Почему не открывается вторая крышка корпуса?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    когда я работал эникеем, такие случаи попадались нередко.
    Торопиться ковырять отверткой не надо.

    Сначала надо снять переднюю крышку (морду) и убедиться, что там нет каких-то винтов и защелок.
    Морда может и сама держать эту крышку (встречались и такие варианты).

    Потом глазами изучить со стороны морды, как крышка снимается.

    Да, перед силовыми упражнениями лучше удалить из корпуса тяжелые детали (видеоплату, радиатор процессора), иначе можно резким движением сорвать их. Также и жесткие диски.

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

    У некоторых корпусов крышка не просто сдвигалась, а сначала верх ее надо было на 5 градусов отклонить, потом низ выходил из паза.
    Ответ написан
    5 комментариев
  • Pytelegrambotapi name 'a' is not defined, почему?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Потому что в глобал оно не объявлено.
    Ответ написан
  • В чём ошибка в моей реализации «снегопада»?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Да… короче, надо не для каждой снежинки вызывать
    start_drawing()
    …
    finish_drawing()

    а для каждого нового экрана. Т.е. начал рисовать, поменял для всех снежинок координаты, потом все их перерисовал и потом закончил рисовать экран. Он автоматом заменил предыдущий.
    Ответ написан
    Комментировать
  • Почему python не понимает selenium?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    попробуйте так:
    by = 'XPATH'
    value = '//*[@id="sf_url"]'
    video_input = browser.find_element(by=by, value=value)

    Для последней версии selenium оно вроде так работает.
    Ответ написан
  • Как удалить все строки в которых менее 6 символов?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    ^.{1,6}:.+$
    в меню searchвыбираете replace, там выбираете regular expression, вставляете в строку поиска find what приведенный выше regex, жмете replace all, строки очищаются.
    Затем идете в меню edit/line operations и выбираете remove empty lines.
    Ответ написан
    4 комментария
  • Как построить график по массиву с данными?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Мне кажется, вы плохо искали. Первое, что попалось в гугле, по-моему, вполне подходит.
    Ответ написан
    Комментировать
  • Как найти следующую строчку в mysql?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Смотрите оператор CASE.
    Ответ написан
    Комментировать
  • Можно ли прочитать сразу все элементы в json?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    В общем, Влад Григорьев прав.
    Надо хотя бы читать документацию по тем библиотекам, которые вы подключаете, и методам, которые используете.

    json это в некотором роде аналог словаря в Python, и json.loads возвращает словарь. Сам словарь это ключи и значения ключей. Могут быть вложенные в значения другие структуры.
    Соответственно, чтобы получить значение, надо обратиться к словарю по ключу
    print(my_dict[“key_name”])
    Если попытаться итерировать словарь в лоб, то будут перебираться ключи. Надо их как-то применять.
    for key in my_dict:
        print(my_dict[key])


    У вас будут возвращаться словари нижнего уровня, вложенные в значения основного словаря. Соответственно, там надо «погружаться» глубже.
    Ответ написан
    Комментировать
  • Как сделать перебор более эффективным(чтоб быстрее выдавало результат)?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    from random import randint
    import time
    
    target_pass = str(randint(1000, 10 ** 4)) #. Генерирую случайный целевой пароль длиной 4 цифры. 
    start_time = time.time()
    int_pass = int(target_pass)
    result = None
    for next_pass in range(10 ** len(target_pass)):
       if next_pass == int_pass:
          result = next_pass
          break
    print(result)
    print(time.time() - start_time)
    
    #  Далее твой код, но без печати (с печатью вообще не дождаться). 
    start_time = time.time()
    password = target_pass
    words = [
       1, 2, 3, 4, 5, 6, 7, 8, 9, 0
    ]
    end_password = ''
    old = []
    length = len(words) - 1
    
    
    def func():
       global end_password
       while end_password != password:
          for i in range(1_0_0_0_0):
             end = ''
             for letter in range(len(password)):
                guess = words[randint(0, length)]
                end += str(guess)
             if end not in old:
                old.append(end)
    
                if end == password:
                   end_password = end
                else:
                   pass
                # print(f'{end}')
          # print(end,end=' ')
    
    
    func()
    print(f'\n\n\n\n\n\tHack : {end_password}    | {(time.time() - start_time)}(sec);')
    Ответ написан
    Комментировать
  • Как сделать чтобы программа после выдачи результата выполнялась повторно?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    def get_repl_txt():
        LAT_TXT = "qwertyuiop[]asdfghjkl;'zxcvbnm,."
        RUS_TXT = 'йцукенгшщзхъфывапролджэячсмитьбю'
        return dict(zip(LAT_TXT, RUS_TXT))
    
    def repl(txt, repl_txt):
        txt = txt.lower()
        for lat in repl_txt.keys():
            txt = txt.replace(lat, repl_txt[lat])
        return txt
    
    repl_txt = get_repl_txt()
    next_str = ' '
    while bool(next_str):
        next_str = input()
        print(repl(next_str, repl_txt))
    Ответ написан
    Комментировать
  • Как записать в файл json именно таким образом?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Во-первых, json.loads принимает на вход строку или байты, а не объект файла. Поэтому надо делать jf_file = json.loads(jfr.read())

    Во-вторых, json.loads возвращает словарь, а у словаря нет метода append, есть метод update. Если вместо append вписать update, будет работать.

    В-третьих, внимательно с отступами - второй with не должен быть внутри первого.
    Ответ написан
  • Как проверить наличие строки в файле?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Попробуйте 'r+'
    вместо а+
    P.s. И не забывайте добавлять в конце строки \n если там его нет.
    Ответ написан
    Комментировать
  • Как сравнить генератор со списком?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    В общем случае можно проделать всякие логические штуки с множествами:
    def my_generator(number):
        while number > 0:
            yield number
            number -= 1
            
    gen = my_generator(5)  # теперь в gen генератор от 1 до 5
    my_list = [0, 1, 3, 5]
    print(type(gen))
    set_gen = set(gen) # разворачиваем генератор в множество (если, конечно, влезет)
    set_my_list = set(my_list)
    print(f'gen {set_gen}')
    print(f'list{set_my_list}')
    print(set_gen - set_my_list)
    print(set_my_list - set_gen)
    print(set_gen & set_my_list)
    print(set_my_list & set_gen)
    print(set_gen | set_my_list)
    print(set_my_list | set_gen)
    Ответ написан
    2 комментария
  • Как сделать так, чтобы два числа сравнивались по отношению к третьему числу с помощью цикла while и оператора if-else-elif?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Ваша задача навела меня на следующее
    послеобеденное баловство
    from random import randint
    
    start = 0
    end = 100
    first = randint(start, end)
    print(f'Сгенерировано первое число между {start} и {end-1} включительно')
    second = None
    third = None
    counter = 0
    while not second == third == first:
        counter += 1
        print(f'Попытка {counter}')
        try:
            second = int(input('Введите второе число:'))
            third = int(input('Введите третье число:'))
            print('\n')
            if second >= first:
                print('Второе больше или равно')
            elif second <= first:
                print('Второе меньше или равно')
                
            if third >= first:
                print('Третье больше или равно')
            elif third <= first:
                print('Третье меньше или равно')
        except ValueError:
            print('Ошибка. Повторите ввод.')
        finally:
            print('\n') 
    print(f'Найдено за {counter} попыток.')


    Формально оно соответствует ответу на ваш вопрос, если не слишком придираться.
    Пример же под вашу задачу такой:
    target = 135
    if abs(first - second) == target:
        print("Oh yes!")
    else:
        print("Oh no…")
    Ответ написан