• Какой MacBook выбрать? Pro или Air?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Для нормальной работы ни тот ни другой - экраны маленькие. У меня и 13" (у жены) и 15" есть - 15шку несравненно лучше. И дело не в графоне, а в размере дисплея, да и вентиляция получше.

    Ну, а если выбирать из двух предложенных - на Air у тебя проц будет ОООЧЕНЬ печально работать. Это, фактически, недобук для демонстрации презенташек. Конечно, прошку.
    Ответ написан
  • Pandas. Поиск значений в столбце со списками?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Вот, нацарапал на салфетке:
    import pandas as pd
    df1 = pd.DataFrame({'id': [24, 75, 32, 89]})
    df2 = pd.DataFrame({'id': [4, 87, 145, 99, 146],
                        'lst': [[24, 56, 78], [24, 32, 89, 54, 127], [67], [78, 89, 34], [12, 45]]})
    
    f1 = set(df1['id'])
    df22 = df2.set_index('id')
    
    for ident in df22.index:
        f2 = set(df22['lst'][ident])
        result = list(f1&f2)
        if len(result):
            print(ident, list(result))
    Ответ написан
  • Macbook air, Pro какой выбрать?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Главный вопрос - для чего?
    Судя по твоим предыдущим вопросам, ты и сам не определился, куда двигаться.

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

    А «на попробовать»... тут другая проблема:
    Xcode11 требует Catalina. А это сейчас, скажем так, не самый лучший вариант macOS.
    Вот ссылка, почитай.

    При том, что мне нравится apple в общем, но именно то, что ты озвучил - «попробовать на б/у», может вызвать головную боль и навсегда отучить от маковской экосистемы.

    Учитывая планируемый отход от intel процессоров, надо очень хорошо представлять себе, что ты пробуешь и как оно будет в дальнейшем соотноситься с будущей реальностью macOS.
    Ответ написан
  • Написать новый код или подправить?

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

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    s_small_sort =[{'ID': '174569', 'Name': 'Авдеев Корней', 'Age': '54'}, {'ID': '591886', 'Name': 'Авдеев Корней', 'Age': '24'}, {'ID': '392316', 'Name': 'Агафонов Остап', 'Age': '20'}, {'ID': '278400', 'Name': 'Аксёнов Натан', 'Age': '16'}, {'ID': '293922', 'Name': 'Алексеев Тимофей', 'Age': '29'}, {'ID': '604143', 'Name': 'Алексей Тeрeщенко', 'Age': '40'}, {'ID': '66721', 'Name': 'Артемьев Назарий', 'Age': '43'}, {'ID': '517124', 'Name': 'Артемьев Назарий', 'Age': '37'}]
    s_big = [{'ID': '298835', 'Name': 'Лихачёв Аввакуум', 'Age': '76'}, {'ID': '720141', 'Name': 'Лихачёв Аввакуум', 'Age': '56'}, {'ID': '27164', 'Name': 'Суворов Август', 'Age': '31'}, {'ID': '469154', 'Name': 'Суворов Август', 'Age': '20'}, {'ID': '3290720', 'Name': 'Бибиков Авдей', 'Age': '19'}, {'ID': '3739928', 'Name': 'Юматов Авдей', 'Age': '14'}, {'ID': '4703064', 'Name': 'Алленов Авдей', 'Age': '24'}, {'ID': '4674783', 'Name': 'Нотович Агап', 'Age': '39'}, {'ID': '1443930', 'Name': 'Дудаков Агафон', 'Age': '24'}, {'ID': '2262161', 'Name': 'Круминь Агафон', 'Age': '82'}, {'ID': '2918131', 'Name': 'Мартюшев Агафон', 'Age': '81'}, {'ID': '4503953', 'Name': 'Мичурин Агафон', 'Age': '51'}, {'ID': '1405294', 'Name': 'Слобожанина Агафья', 'Age': '19'}, {'ID': '1430420', 'Name': 'Хмельнова Агафья', 'Age': '14'}, {'ID': '1862644', 'Name': 'Расторгуева Агафья', 'Age': '19'}, {'ID': '2835076', 'Name': 'Ямлиханова Агафья', 'Age': '15'}, {'ID': '4259886', 'Name': 'Федорова Агафья', 'Age': '22'}]
    filtered_names = []
    for name in (i['Name'] for i in s_big):
        if name not in (i['Name'] for i in s_small_sort):
            filtered_names.append(name)
    print(filtered_names)
    Ответ написан
  • Можно ли пересчитать переменную, которая в другом модуле?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    вы хотите, чтоб по результатам работы второго скрипта константы поменялись? И первый скрипт следующий раз использовал новые константы?
    Тогда наверно их надо вынести в отдельный файл или базу данных. И оттуда подтягивать при каждом старте 1-го скрипта.
    Или, как вариант, запускать скрипт с нужными параметрами.

    Перезагрузить скрипт можно так:
    import my_module
    reload(my_module)
    from my_module import *
    Ответ написан
  • Где взять задачник по python?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Марк Лутц «Изучаем Python»
    Уж как там всё разжёвано с примерами и заданиями, наверно лучше и не найти. Сам сейчас изучаю по этой книге, хотя ранее все эти степики-курсы и официальные доки замучил до тошноты...

    Минусы:
    • Цена кусается, даже б/у. (Лайфхак: Не обязательно брать оба тома сразу)
    • Книжка толстенная и тяжеленная, не удобно пользоваться.
    • Шрифт мелковат.


    Но всё равно оно того стоит.
    Ответ написан
  • Как увеличить изображение x*2 и y*2 без интерполяции?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Не бейте, пожалуйста. Вот стырил исходный код с habra и накарябал как смог:
    spoiler
    from PIL import Image, ImageDraw  # Подключим необходимые библиотеки.
    
    image = Image.open("temp.jpg")  # Открываем изображение.
    width = image.size[0]  # Определяем исходную ширину.
    height = image.size[1]  # Определяем исходную высоту.
    pix = image.load()  # Выгружаем значения пикселей исходной картинки.
    
    imagemode = image.mode  # Получаем цветовой формат исходного изображения
    multiplicator = 2  # тут множитель, по-умолчанию 2
    newwidth = width * multiplicator  # вычисляем новую высоту
    newheight = height * multiplicator  # вычисляем новую ширину
    newimage = Image.new(mode=imagemode, size=(newwidth, newheight))  # создаем новую картинку
    newpix = newimage.load()  # загружаем новую картинку попиксельно
    draw = ImageDraw.Draw(newimage)  # создаем инструмент рисования
    
    if __name__ == '__main__':
        new_image_list = []  # создаем пустой массив строк нового изображения
        for i in range(width):
            new_line_list = []  # создаем пустой массив очередной новой строки
            for j in range(height):  # получаем цветность очередного пикселя исходной картинки
                newpixel = pix[i, j]
                for _ in range(multiplicator):  # лепим в конец массива новой строки нужное кол-во таких пикселей
                    new_line_list.append(newpixel)
            for _ in range(multiplicator):  # лепим в конец массива строк нужное кол-во вновь созданных строк
                new_image_list.append(new_line_list)
    
        for i in range(newwidth):  # рисуем построчно попиксельно новую картинку из массива строк нового изображения
            for j in range(newheight):
                pixel = tuple(new_image_list[i][j])
                draw.point((i, j), pixel)
    
    newimage.save("ans.bmp", "BMP")  # записываем всё это в файл (выбрал bitmap потому, что там явно получаются пиксели
    # как заказано, без дальнейшей оптимизации форматом jpg
    del draw
    image.close()
    newimage.close()


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

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    В python есть специальная функция (или, наверно, метод?) zfill(), предназначенная именно для дополнения строки до нужной длины нулями слева. Т.е. при выводе легко восстановить нужную длину печатаемого числа, превратив его в строку и напустив на него zfill(кол-во знаков, до которого надо добить нулями).
    Ответ написан
  • Как подогнать уравнение для шифрования двойной перестановки?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Извини, код не фонтан, ну как умею.

    def getnumber(x, y):
        return 4*(int(y)-1)+(int(x)-1)
    
    def encode(text, xkeys, ykeys):
        counter = 0
        newtext = ['' for _ in range(len(text))]
        for y in ykeys:
            for x in xkeys:
                if counter < len(text):
                    newtext[getnumber(x, y)] = text[counter]
                    counter += 1
        return ''.join(newtext) #ТУТ ПОДГОНЯТЬ УРАВНЕНИЕ ТАК, ЧТОБЫ ПРИ ШИФРОВКИ "ПРИЛЕТАЮВОСЬМОГО" ПОЛУЧАЛОСЬ "ТЮАЕООГМРЛИПОЬСВ"
    
    def decode(text, xkeys, ykeys):
        return) ''.join(text[getnumber(x, y)] for y in ykeys for x in xkeys)
    Ответ написан
  • Использование длины списка Python?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Поскольку в python индексы начинаются с нуля, а вы перебираете начиная с первого, то в конце цикла счетчик превысит максимальный индекс и будет ошибка.

    Кроме того, в текущем виде это не min, а max.
    Ответ написан
  • Как заставить эту программу посчитать число Лангранжа и вывести его?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Может, что-то такое:
    spoiler
    import numpy as np
    import matplotlib.pyplot as plt
    
    x = np.array([-6, 7, 4, 3], dtype=float)
    y = np.array([-297, 249, 33, 9], dtype=float)
    
    
    def lagranz(x, y, t):
        z = 0
        for j in range(len(y)):
            p1 = 1;
            p2 = 1
            for i in range(len(x)):
                if i == j:
                    p1 = p1 * 1;
                    p2 = p2 * 1
                else:
                    p1 = p1 * (t - x[i])
                    p2 = p2 * (x[j] - x[i])
            z = z + y[j] * p1 / p2
        return z
    
    
    xnew = np.linspace(np.min(x), np.max(x), 100)
    ynew = [lagranz(x, y, i) for i in xnew]
    
    counter = 0
    step = 9
    for xx, yy, tex in zip(xnew, ynew, xnew):
        if counter % step == 0:
            t = plt.text(xx, yy, round(tex, 2), horizontalalignment='right' if xx < 0 else 'left', 
                     verticalalignment='center', fontdict={'color':'red' if xx < 0 else 'green', 'size':14}) 
        counter += 1
    
    plt.plot(x, y, 'o', xnew, ynew)
    plt.grid(True)
    plt.show()

    (Содрано в инфернете, кривовато допилено в части шага отображения).
    Ответ написан
  • Почему при перестановке аргументов функции, аргументы принимают значения друг друг?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Потому, что внутри, в 4 строке, первому аргументу присваивается значение path + ..., а второму значение name. Поменяйте их там местами, всё должно заработать.
    Ответ написан
  • Как отправить информацию не отдельными сообщениями, а одним сообщением в Телеграм боте?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Я уже в прошлом вопросе сказал, как это сделать. Ты же не хочешь, чтобы тут всё за тебя сделали?
    Ответ написан
  • Как найти совпадение, чтобы группа была либо перед, либо до слова?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Можно как-то так попробовать:
    spoiler
    import re
    data = '/(python/java|c\+\+|c)/gmi'
    
    string = r'(\b[\w\\+]+)'
    print(re.findall(string, data))


    Но говорят, что если вы пытаетесь решать проблему через regexp, то у вас теперь две проблемы...
    Ответ написан
  • Как сортировать и вывести в список места по возрастанию смотря на дистанцию от геопозиции пользователя на python с помощью geopy?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Во-первых, у вас тут нет "словаря", из которого можно "отправить все места списком из словаря". У вас есть tuple - это не словарь. Это кортеж. Кортеж в обычном смысле не сортируется, он по сути своей неизменная структура. Хотя, конечно, если его содержимое переложить в структуру, которая может меняться, то переложенное содержимое отсортировать можно. Но, мне думается, так делать не нужно.

    Во-вторых, вы там получаете список дистанций distance. По-идее, индексы значений этого списка соответствуют индексам вашего кортежа, и можно перебирать значения дистанций от максимального к минимальному и по найденному следующему значению получать его индекс и использовать как индекс для получения значения из кортежа.
    Грубо говоря, находим максимальное значение в списке distance, считаем его текущим, находим индекс текущего значения, по нему получаем значение из кортежа. Это у вас уже реализовано. А затем ищем значение в списке distance, которое меньше текущего, но больше всех остальных. Считаем его текущим. Получаем его индекс, получаем по этому индексу значение из кортежа, повторяем цикл поиска следующего значения дистанции меньше текущего, пока существует значение дистанции меньше текущего.
    Ответ написан
  • Почему вылезает ошибка когда я двигаюсь?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Ошибка вылезает потому, что в строке, которая вызывает ошибку, используются два списка its и its2.
    Причем берется список its, в нем находится индекс некоторого значения new2, а затем в списке its2 ищется значение с этим индексом. Видимо, такого индекса там просто нет, и система сообщает об этом.
    Почему именно в вашем its2 нет такого индекса, а главное - должен ли он там быть? Вот в чем вопрос. У вас там выше по коду идет активная работа с its, в него и добавляются новые значения, и убираются оттуда значения. Соответственно, никакой гарантии, что длина списка its будет равна длине списка its2 или как-то с ним синхронизирована, нет.
    Поэтому в какой-то момент оказывается, что список its длиннее списка its2 и максимальное значение списка its имеет индекс, который больше самого большого индекса списка its2.

    Что с этим делать? Логику программы я не разбирал подробно, но наверно надо постоянно оба списка синхронизировать как-то, тогда по крайней мере длина у них будет одинаковая и ЭТА ошибка не будет возникать.
    Ответ написан
  • Как сделать парсер на django с занисением фильмов в бд?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Нужно взять буквы, цифры и знаки препинания. И пробелы. И расставить их так, чтобы получился код, который выполнит Вашу задачу.
    Как именно расставить, можно изучить на курсах python на курсере, степике или ещё где-нибудь. Практически на всех курсах подобные задачи решаются.
    Ответ написан
  • MBA 2018 разряжается за ночь?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Я бы попробовал сделать бэкап и переустановить чистую систему. И посмотрел бы - если на чистой системе всё норм, а при возвращении бэкапа опять теряет заряд - дело в софте. Если продолжает терять заряд и на чистой системе - дело в железе.

    Ну и дальше уже либо накатывать на чистую систему софт из бэкапа по частям и искать, что пакостит, или железку в сервис.
    Ответ написан