Ответы пользователя по тегу Python
  • Как установить модули python без интернета и pip?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Kostyan4ik, почему это нет возможности? С питоном всегда можно найти какую-нибудь возможность.

    Вот, к примеру, вы можете на том компе, где есть питон и интернет, скачать все необходимые пакеты с помощью того же pip:
    pip download pip
    Так вы можете скачать все необходимые пакеты и принести их на машину без инета просто на флешке.
    А там:
    python pip-20.1.1-py2.py3-none-any.whl/pip install pip-20.1.1-py2.py3-none-any.whl

    Тут происходит маленькая магия: вы с помощью питона запускаете pip прямо изнутри локально лежащего файла с его дистрибутивом. Этим pip'ом вы ставите самого себя на локальную машину. Примерно как Барон Мюнхаузен, но не больно.

    Вы также можете сохранить перечень всех установленных пакетов на компе с инетом в текстовый файл, а потом, убрав из него лишнее, скачать все эти пакеты в локальный каталог, отнести на оффлайн-комп и там ставить через тот же pip
    pip freeze > r.txt
    pip download -r r.txt
    Ответ написан
    3 комментария
  • Почему Python выдаёт ошибку unhashable type: 'dict'?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вы пытаетесь в качестве ключа в словаре использовать нехешируемый тип (в данном случае судя по ошибке тоже словарь user_group).
    Ключем в словаре может быть только хешируемый тип, например кортеж (без вложенных нехешируемых элементов), строка, число и т.д.

    Относитесь, пожалуйста, с уважением к людям на этом ресурсе: оформляйте код тегами и полностью приводите стек-трейс ошибок.
    Ответ написан
    Комментировать
  • Как отделить рубли от копеек?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    price = input()
    r, c = (list(map(int, price.split('.'))) + [0])[:2]

    а регекспы тут действительно ни к чему. По крайней мере не для таких простых случаев они.
    Ответ написан
    5 комментариев
  • Добавление кнопкни Tkinter, при нажатии на которую, открывается другой Python файл?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Типовая структура проекта на питоне:|
    my_project_name\            # корневой каталог проекта
        .git                    # каталог с данными контроля версий
        my_project_name\        # каталог главного пакета вашего проекта
            __init__.py         # файл, который делает из этого каталога пакет. Файл можно оставить пустым
            my_script1.py       # Скрипт, который вы возможно захотите хапустить внутри вашего проекта
            my_script2.py       # Ещё один скрипт
            my_module1.py       # модуль, который вы хотите импортировать внутри проекта
            my_module2.py       # ещё модуль
            my_sub_package\     # если модуль уже хочется разбить на несколько файлов, то можно сделать пакет
                __init__.py     # этот файл делает из каталога с исходниками пакет, который позволит ммпортировать его как модуль
                my_module3.py   # это модуль внутри пакета
                my_module4.py   # ещё один
    
        my_lib1\                # это пакет, который не зависит от вашего проекта, но используется в нём и вы почему-то
                                # хотите хранить их в одном репозитории. Странное решение, но так тоже можно.
            __init__.py         # да, этот каталог стал пакетом благодаря этому файлу
            my_lib_module.py    # тут может быть ещё много модулей
    
        setup.py                # этот файл нужен, чтобы все эти пакеты (их сейчас тут два) можно было ставить через
                                # пакетный менеджер питона, например pip
        readme.txt              # ридми. Те, кто не делают ридми, рискуют немножко гореть в аду.

    Вы можете импортировать из одного модуля другие абсолютным иотносительным импортом.
    Я рекомендую, пока у вас мало лпыта, пользоватьс яотносительным и не переусложнять с этим.
    Например, чтобы в my_script1 вызвать функцию из другизх модулей и пакетов, пишите так:
    from my_project_name.my_module1 import my_function1
    from my_project_name.my_sub_package.my_module3 import my_function3
    
    from my_lib1 import my_lib_module
    from my_lib1.my_lib_module import my_lib_function1

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

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

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Сделайте print(newchat) и сразу увидите что не так.
    Ответ написан
    3 комментария
  • Какими способами можно отображения чужую гео локацию в режиме 24 на 7?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    питнашки

    Вам нужно арендовать самую дешевую VDS, купить какой-нибудь домен, настроить на vds nginx и заиметь сертификат через letsencrypt.
    Так у вас будет 24/7 cервер с https в инете.
    Потом деплоите на сервер своё приложение на каком-нибудь flask'е. Можно подготовить шаблон проекта с помощью так называемого кукикаттера, например такого.
    На выходе у вас получится "рыба" полноценного RESTful API приложения с готовым CI/CD и почти всем, что необходимо для нормальной жизни.
    Вам останется лишь реализовать пару своих методов:
    • push_me - запостить свою позицию
    • all - взять актуальные координаты всех юнитов

    Это минимум. По-хорошему, конечно, желательно сделать это всё на asunc-io и использовать веб-сокеты для обновления координат цели.
    Ещё, исходя из специфики вашей задачи, можно задействовать RTSP.
    Ответ написан
    6 комментариев
  • В чем ошибка модуля?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Уберите не ascii-символы из токена и телефона или сконвертируйте их в utf-8 сами.
    Ответ написан
    Комментировать
  • Параметры по-умолчанию Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вычисление умолчаний происходит не в момент вызова, а в момент объявления функции. Не делайте так. Само собой у вас значение параметра по умолчанию осталост аким, каким оно было до создания файла.

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

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    pandas не нужен.
    import sys 
    with open('tmp/new.csv') as fin: 
        w = csv.writer(sys.stdout) 
        for row in csv.reader(fin): 
            x = row[-1] 
            x2 = x*2 
            row.append(x2) 
            w.writerows([row])
    Ответ написан
    Комментировать
  • Удобно ли разрабатывать GUI на Python для Windows в Linux системах?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Переходи. Никаких проблем с путями. Пути в линуксе проще, чем в винде, но если будешь использовать pathlib, который, кстати, теперь в стандартной библиотеке, то различий вообще не будет. Можно писать кроссплатформенный код.

    ИМХО, в линуксе разрабатывать проще и удобнее за счет нормальной абстракции файловой системы, за счет развитой командной строки и утилит, за счет пакетных менеджеров вроде apt и прочих, за счет нативной среды для работы с докер-контейнерами.

    ИМХО, разрабатывать нативные GUI - это прошлый век. Постепенно всё переходит в веб, есть Электрон. Делать веб-интерфейс и бэкенд с API - это куда более универсальный подход. Наверно на текущий момент, разве что, большие CAD-системы ещё имеет смысл делать нативными. И то это уже спорный вопрос.
    Ответ написан
  • Как вычислить центр круга с радиусом 40?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вы, конечно, "гениально" ставите задачу.
    Но предположим, что вы просто не подумали что может быть непонятного в вашей постановке вопроса.
    Если речь идёт о круге на плоскости в декартовых координатах, то радиуса для вычисления координат центра круга вам будет не достаточно.
    Потребуется, как минимум, либо точка на границе круга и направление (например, вектор нормали), тогда центр будет вычисляться векторной разностью координат точки и произведения нормали на радиус.
    Можно найти центр по радиусу и двум точкам на границе круга. Какие входные данные?
    Ответ написан
    Комментировать
  • Почему if text == line не срабатывает, хотя на выходе text = а, line = а?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Если у оператора `in` оба аргумента строки, то этот оператор возвращает вхождение подстроки в строку. Буква "а" есть в слове "автомобиль" и тут ничего удивительного нет. Вы очень небрежно и неаккуратно формулируете вопрос. Наверняка не понимаете как работают операторы и не знаете, что при чтении из файла в строках остаются символы абзацев.

    Приводите значение строк полностью. Вы можете не заметить абзаца, если печатаете строку. печатайте repr(text), там будет видно непечатные символы.
    И если text = а, line = а, код просто игнорит данное совпадение

    Вот это поведение скорее всего обусловлено либо непечатными символами, либо буква у вас на разных языках написана.

    Приводите код полностью. В текущем виде вы, сами того не понимая (как, гапример в случае с непечатными символами), можете не придать значения важным вещам. Вы, вон, даже кавычки ставить ленитесь.
    Ответ написан
    6 комментариев
  • Как получить все перестановки элементов массива?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    import itertools
    
    for variant in itertools.permutations([a, b, c, d]):
        print(variant)
    Ответ написан
    1 комментарий
  • Как задавать места, в которых интерпретатор python осуществляет поиск?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Помимо способа, указанного в соседнем ответе, есть еще способ сделать это из самой программы на питоне:
    import sys
    
    sys.path.append('some/custom/path/to/modules_and_packages_collection_folder')
    Ответ написан
    Комментировать
  • Как вывести отличающиеся (ключ, значение) одного словаря от другого словаря?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вы как-то не очень четко поставили задачу.
    1. Нужно прояснить следующие важные детали:
    2. У различной пары может отличаться как ключ, так и значение по отдельности?
    3. Наборы ключей одинаковые? Неодинаковые? Могут отличаться?
    4. Значения хешируемые?
    5. Количество пар совпадает, или одна пара в одном из словарей может отсутствовать?
    6. Одна и только одна пара?
    7. Какая версия Питона? Если третья, то словари одинаково упорядочены по ключу? Может быть они еще и отсортированы? Ну мало ли...
    8. Насколько большие словари? Их размер сопоставим с полным объёмом памяти?
    9. Ваша задача выглядит так, будто имеет смысл решать её немного в другом месте и в другое время (в смысле формирования структуру данных и заполнения их). Поясните почему такая задача возникла, возможно есть другой, более элегантный и эффективный подход, нежели сравнивать большие словари.


    Похоже вот это будет для вас приемлемым решением:
    import typing
    
    def ddif(a: dict, b: dict) -> typing.Iterable[tuple]:
        return filter(None, (None if va == b[k] else (k, va, b[k]) for k, va in a.items()))
    
    a = {1: 11, 2: 22, 3: [1, 2, 3], 4: 44, 5: 55}
    b = {1: 11, 2: 22, 3: [1, 2, 4], 4: 44, 5: 56}
    for k, v1, v2 in ddif(a, b):
        print(f'{k}: {v1!r} != {v2!r}')

    Там возвращается итератор, поэтому, если вы уверены, что различие только одно, то можете воcпользоваться islice, чтобы остановиться на первом различии:
    from itertools import islice
    print(
        list(islice(ddif(a, b), None, 1))
    )
    Ответ написан
    2 комментария
  • При попытке проверки переменной выдаёт ошибку, что делать?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вам же белым по черному в тексте ошибки написано, что переменная country используется до объявления. То есть в программе вы еще ни разу в нее ничего не присвоили, а уже пытаетесь проверять ее значение. КОнечно тут ошибка.
    Там даже показано в какой именно строке. Что делать? Исправлять.
    Ответ написан
    Комментировать
  • Где ошибка в коде?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    замените
    c = Canvas(window, width=WIDTH, height=HEIGHT, bg="darkblue").pack()

    на
    c = Canvas(window, width=WIDTH, height=HEIGHT, bg="darkblue")
    с.pack()

    Иначе в переменную c попадает результат выполнения метода .pack(), который None, а не ожидаемый вами экземпляр канваса
    Ответ написан
    Комментировать
  • Почему поверхностная копия не изменяет значение?

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

    В Питоне переменная - это как ярлычок с именем. При присвоении вы, как бы, вешаете ярлычок на объект:
    x = [1,2,3]
    y=x
    И у вас теперь есть два ярлычка: x и y. Оба привязаны к одному и тому же объекту.
    Если вы этот объект измените (отредактируете элемент), то не важно как вы к нему будете обращаться, по какому из имён.

    Нужно различать что вы меняете: вы либо перевешиваете ярлычок с именем на друго объект, либо меняете что-то внутри объекта, к которому привязан ярлычок. Чувствуете разницу?

    Представьте, что в вашем объекте (Заявка) два атрибута: Имя_клиента и Адрес_квартиры.
    Вы копируете заявку поверхностно. Меняете имя в одной из копий, а во второй всё осталось как было. Делаете ремонт в квартире по указанному адресу. Само собой алрес в обеих копиях заявки один итот же и вы его не меняели. Вы меняели объект по этому адресу.

    Теперь вы берете заявку и делаете её глубокое копирование:
    Тут начинается проблема у аналогии, но это нам не помешает.
    Вы меняете имя в копии и тут всё работает как в прошлом примере.
    Но при создании глубокой копии создалась новая абсолютно такая же квартира но с новым адресом. В копии заявки адрес уже другой. Если вы сделаете ремонт в квартире по новому или старому адресу, то на другой квартире это не отразится.
    Ответ написан
    Комментировать
  • Как перехватить ошибку ConnectionRefusedError: [WinError 10061]?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    try:
        # ... код, порождающий ошибку
    except ConnectionRefusedError as e:
        # код обработки ошибки
    Ответ написан
    Комментировать
  • В чём разница между list() и []?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Там всё просто.
    Считайте, что list - это функция, которая принимает перечисляемый объект и возвращает список с извлеченными из этого объекта элементами.
    [], [1,2,3] - это "синтаксический сахар" для удобной записи готовых списков в коде. Первый из этих двух примеров пустой, а второй содержит три элемента. Эта запись подразумевает, что элементами будут выражения, записанные в квадратных скобках через запятую.

    Так что list() и [] действительно вернут одинаковый результат, но если речь не о пустых списках, то функция извлечет элементы из своего аргумента, а [1,2,3] примет в качестве элементов то, что внутри через запяту.

    Прочитайте лучше систематически в книжке того же Лутца. Иначе вы своими догадками ни язык нормально не освоите, ни время не сэкономите.
    Ответ написан
    3 комментария