• Стоит ли иди в программирование, будучи инженером?

    idegree
    @idegree
    Senior Workaround Developer
    Чисто мое мнение - если тупо гнаться за зарплатой, то не стоит. Дело должно прежде всего вам нравиться, тогда всё будет. У меня в Зажопинске в 5 000 км от Москвы на восток зп в два раза больше, и это далеко не потолок.
    Вы можете пойти и за зп в программисты, делать однотипные интернет-магазины каждую неделю, но опять же очень быстро упретесь в потолок. Другое дело, если вы этим живете, если можете либо в кучу областей, либо наоборот в очень узкую, но редкую.
    Ответ написан
    Комментировать
  • Есть поддержка python библиотек в java?

    longclaps
    @longclaps
    Модные микросервисы вам не подойдут?
    Ответ написан
    Комментировать
  • Как и где искать алгоритмы?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Это называется библиотеки и программы. По факту любая программа и есть алгоритм, а любой алгоритм - и есть программа. Соответственно и самый известный сайт данного направления: https://github.com
    Способ поиска как и всегда - по ключевым словам в гугле. Если результата ноль - значит, надо просто самому разработать алгоритм/программу.
    Ответ написан
    Комментировать
  • Как на python3 сделать аналог cmd?

    @javedimka
    Хочу сока
    Используй словарь.
    На твоем же примере read 2017 admin
    Функции в примере просто будут выводить все переданные аргументы:
    def create(*args):
        print("'Create' Function with given args:")
        for arg in args:
            print('%8s' % (arg))
    
    
    def read(*args):
        print("'Read' Function with given args:")
        for arg in args:
            print('%8s' % (arg))
    
    
    def update(*args):
        print("'Update' Function with given args:")
        for arg in args:
            print('%8s' % (arg))
    
    
    def delete(*args):
        print("'Delete' Function with given args:")
        for arg in args:
            print('%8s' % (arg))
    
    # Словарь с функциями. Ключом является вводимая команда.
    options = {"create": create,  "read": read, "update": update, "delete": delete}
    
    # Входим в бесконечный цикл, программа не будет завершаться после выполнения
    # первой же введенной команды.
    while True:
        # Получаем строку от пользователя и разбиваем по пробелам в список.
        # Если user input = read 2017 admin, то получим ['read', '2017', 'admin'].
        command = input("command? ->").split()
        # Используем метод словаря .get() для получения функции
        # связанной с введенной командой, записываем ее в переменную option.
        option = options.get(command[0])  # command[0] - операция индексации списка.
        # Проверяем удалось ли получить функцию связанную с командой пользователя.
        if option:
            # Если удалось, то вызываем функцию с аргументами полученными с помощью
            # операции извлечения среза и распаковки списка в отдельные аргументы.
            option(*command[1:])


    Вывод :
    command? ->read 2017 admin
    'Read' Function with given args:
        2017
       admin
    command? ->


    Бонусом небольшое объяснение про звездочку.

    Инструкция * в зависимости от того где она находится делает разные вещи(помимо умножения):

    В строке с объявлением функции ( def create(*args): ) она позволяет "запаковать" все переданные функции аргументы в один кортеж args. То есть нет необходимости указывать какие именно позиционные аргументы ожидает получить функция, можно передать любое их количество (нуль и более).

    В строке с вызовом функции ( option(*command[1:]) ) она позволяет "распаковать" все элементы последовательности в отдельные позиционные аргументы. То есть все объекты в указанной последовательности command[1:] будут передаваться в функцию как отдельные позиционные аргументы.

    В примере сверху если предварительно не распаковать command[1:] в отдельные аргументы, звездочка запакует в кортеж args целый список, т.е. получим (['2017', 'admin']) - кортеж с одним объектом внутри, что сломает наши функции, придется дополнить цикл тремя лишними символами для их работоспособности (добавить индексацию кортежа: for arg in args[0]). Если же распаковать, то получим кортеж с двумя объектами внутри, что позволит напрямую пройтись в цикле по кортежу.

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

    Как называется - не знаю, не думаю, что есть название.
    Сделать в фотошопе или иллюстраторе.

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

    P.S. Нужно знать или чувствовать схему построения композиции. Например, на моей картинке композиции как таковой нет.

    Пример на коленке:

    fdea7047547f419bbfa30dd599365645.png
    Ответ написан
    Комментировать
  • Можно ли написать программу с GUI без библиотек на Python?

    Zifix
    @Zifix
    Barbatum
    Можно, сначала пишем свою обвязку над графическим API своей ОС, получаем окно и возможность на нем рисовать. Дальше рисуем кнопочки и обрабатываем события руками, почему бы и нет?
    Ответ написан
    3 комментария
  • Как получить короткую уникальную строку для номера телефона?

    longclaps
    @longclaps
    Переведи в целое число и запакуй в base64. На питоне это можно сделать так:
    import base64, re
    
    def enc(telstr):
        s = re.sub(r'\D', '', telstr)
        if len(s) < 10 or len(s) == 11 and s[0] not in '78' or len(s) > 11:
            raise ValueError('"%s" не похоже на телефонный номер' % telstr)
        x, l = int(s[-10:]), bytearray(b'\0\0\0\0\0')
        for i in range(4, -1, -1):
            x, rest = divmod(x, 256)
            l[i] = rest
        return base64.encodebytes(l)[:7].decode('utf-8')
    
    def dec(b64):
        x = 0
        for b in base64.decodebytes(b64.encode('utf-8') + b'=\n'):
            x = x * 256 + b
        return x
    
    s = enc('8(926)123-4567') 
    print(s)          # AigDOYc
    print(dec(s))     # 9261234567
    Ответ написан
    Комментировать
  • Как обработать javascript?

    @nirvimel
    • Простой путь: PhantomJS вместо браузера под тот же селениум.
    • Путь настоящих Мужиков: Прочесть js (достаточно ухватить саму идею) и переписать на python с обычным requests (лучше - aiohttp). И никаких браузеров и селениумов.
    Ответ написан
    6 комментариев
  • Как правильно делать "горячие/интересные" посты?

    BuriK666
    @BuriK666
    Компьютерный псих
    Сделайте ссылку на вторую страницу что-то вроде '?list=ID&page=2'
    Где ID, это id последнего списка.

    Например на хабре забивают на это...

    UPD: чтоб не забивать адресную строку и поисковики, можно этот ID хранить в cookie
    Ответ написан
    Комментировать
  • Какой язык выбрать для графической оболочки браузерной игры?

    bootd
    @bootd
    Гугли и ты откроешь врата знаний!
    Canvas, больше нечего!
    Ответ написан
    Комментировать
  • Как проверить в данной задаче можно ли делить чисто на 3 последнюю цифру?

    @Sumor
    Формулировка задания, я бы сказал очень неточная, но отвечаю так как я её понял.
    "Нужно найти разбиение стоимости на пяти- и трёхкопеечные монеты без остатка"
    Для стоимости более 15 копеек такое разбиение всегда можно найти. Для цены до 15 копеек возможность разбиения находится перебором.
    Для определения минимального количества трёхкопеечных монет смотрим на остаток деления на 5:
    остаток 0 - 0 (или 5) трёхкопеечных монет
    остаток 1 - 2 трёхкопеечных монеты
    остаток 2 - 4 трёхкопеечные монеты
    остаток 3 - 1 трёхкопеечная монета
    остаток 4 - 3 трёхкопеечные монеты
    Количество пятикопеечных монет считаем исходя из количества трёхкопеечных.

    NB: трёхкопеечные, а также пятикопеечные монеты пишутся вместе. Если вы пишите количество монет и не хотите склонять их названия, пишите количество после наименования: трёхкопеечных монет - 5.
    Ответ написан
    Комментировать
  • Как указать рекурсионный вызов функции при обработке условий?

    @deliro
    Очевидно же. Когда i равно ' ', то уходит в бесконечную рекурсию.
    Ответ написан
    3 комментария
  • Как убрать погрешность?

    @Eugen_p
    Самый простой выход использовать decimal
    Ответ написан
    Комментировать
  • Где лучше обрабатывать форму?

    tema_sun
    @tema_sun
    Разными. Используйте встроенные Class-Based Views (для GET'a - get(), для POST'a - post() ).
    Обязательно изучите CBV. Расширяйте их при необходимости. Только после освоения этой техники, начинайте использовать function-based views, если упретесь в какие-то ограничения CBV.
    С таким подходом вас будет проще понять другим разработчикам и вы сможете избежать изобретения пары десятков велосипедов.
    Ответ написан
    Комментировать
  • Можно ли присваивать None в Python?

    тимеется в виду вот такое
    None = 'a'
      File "<input>", line 1
    SyntaxError: cannot assign to None
    Ответ написан
    Комментировать
  • Как узнать номер строки при чтении файла?

    @GeneD88
    QA
    with open('myfile.csv', 'r') as file:
            for num, url in enumerate(file):
                    my_function(url)
    Ответ написан
    1 комментарий
  • Как пройти первую задачу по python на codewars?

    @deliro
    Наверное в том, что ты возвращаешь всегда единицу, а не результат умножения?
    Ответ написан
    Комментировать
  • Почему результат функции выводится к скобках?

    @deliro
    Когда же вы уже начнёте читать документацию/книги прежде чем задавать вопросы здесь?
    return a, b, c - это тоже самое, что return (a, b, c).
    (a, b, c) - это кортеж.
    Ответ написан
    Комментировать