Ответы пользователя по тегу Python
  • Как правильно определить, какое число итераций необходимо?

    @dmshar
    А двавайте велосипед не выдумывать. Есть такой раздел вычислительной науки. "Теория алгоритмов" называется. Он-то как раз и занимается тем, что объясняет, как оценить вычислительную сложность алгоритмов, в том числе ОЦЕНИВАЕТ, сколько циклов, операций сравнения и пр. требуется для того или иного алгоритма.
    Просто после вопроса " единственный вариант - сравнивать список "до" итерации и "после". Но в таком случае, не будет ли затраты на подобные сравнения "затратнее" холостых циклов?" становиться понятным, что тут не на конкретный вопрос отвечать надо, а с азов начинать. Ведь и то что это "единственный способ", и про то что сравнение можно сравнивать с холостым циклом - про все это говориться в Теории алгоритмов. Причем как правило - с самого начала.
    Ответ написан
    Комментировать
  • Как создать пустой файл в питон во время работы программы?

    @dmshar
    Файл создается не тогда, когда программа завершает работу, а тогда когда отрабатывает метод close().
    Это легко увидеть, если сделать маленький эксперимент:

    import time
    from datetime import datetime
    print(datetime.now(),flush=True)   
    file = open("ABC","w+")
    print(datetime.now(),flush=True)   
    file.close()
    print(datetime.now(),flush=True)   
    time.sleep(90)


    Теперь смотрим скрин зкрана. Видно, что процесс не закончен (он уснул по sleep и проснется через полторы минуты, т.е. в 20: 37:.... , красный квадратик внизу справа подтверждает, что процесс активен ), а файл уже создан.

    634c421515c53615750301.png
    Ответ написан
    Комментировать
  • Как передать из функции в другую переменную не вызывая ее?

    @dmshar
    А зачем в функции значение переменной если вы ее (функцию) не вызываете? Не вызываете - значит она (функция) выполняться не будет. Так зачем ей это значение?

    А вообще-то есть ТРИ способа передачи переменных:
    1. Через указание параметра.
    2. Через глобальную переменную (не рекомендуется).
    3. Через внешнее хранилище информации - файл, БД и пр.

    Ничего другого человечество не придумало. Вот и выбирайте.
    Ответ написан
    Комментировать
  • Как обойти бинарное дерево?

    @dmshar
    Вообще-то, если "У родителя (цифры 2) 3 потомка...." то это как бы не бинарное дерево.
    А вот "по id элемента можно было узнавать родителей/потомков" - можно в одном специальном случае, который называется бинарное сортирующее дерево и используется, в частности, в алгоритме пирамидальной сортировки.
    Ответ написан
    Комментировать
  • Как устроено хранение данных в pandas series?

    @dmshar
    Если вам просто для интереса - ну можно, конечно, поискать ответ на просторах интернет. Интереснее это делать самому, а не пожнав плоды чужого поиска.
    А если у вас интерес профессиональный - то напоминаю, что Pandas - проект открытый. Более того, как написано на сайте - "pandas is mostly developed by volunteers. All kind of contributions are welcome, such as contributions to the code". Соответственно, всегда можно присоединится к этом проекту https://pandas.pydata.org/docs/development/index.html и поучаствовать в нем, а по дороге найти и ответ на ваш вопрос.
    Ответ написан
    Комментировать
  • Как в цикле сменить колонку вывода?

    @dmshar
    Примерно так:
    import pandas as pd
    tbl=pd.read_excel("Книга2.xlsx",index_col=0,header=0,dtype={'A': str})
    cr=True
    list_inn = ["1","3","4"]
    for listt in list_inn:
        if cr==True:
            print(tbl.loc[int(listt)].B)
            if tbl.loc[int(listt)].B=='char':
                cr=False  
        else:
            print(tbl.loc[int(listt)].C)


    Результат:

    some text
    char
    S
    Ответ написан
    3 комментария
  • Найти макс количество отрезков b на отрезке a?

    @dmshar
    Если после аж 20 минут самостоятельного глубокого раздумья у человека возникает непреодолимое желание побежать искать ответ на форум - то скорее всего программирование это не то занятие, которое ему подходит.
    Тем более, если речь идет о задаче, сложность которой уже описали выше.
    Делайте выводы - или меняйте свои привычки, или меняйте сферу деятельности.
    Ответ написан
  • Как прервать и перезапустить программу?

    @dmshar
    if bet != 0 and bet !=1 and bet != 2:

    или так
    if bet not in (0,1,2):
    Ответ написан
    Комментировать
  • Что действительно пишут на Python как правило в бизнесе?

    @dmshar
    С завидным постоянством, примерно раз в месяц, на кого-то падает озарение и он задает этот вопрос. Даже не удосужившись порыться самостоятельно в поисках ответа.
    Вот, ровно месяц и два дня назад:
    https://qna.habr.com/q/1182966
    Там же есть ссылки на статьи, где вы найдет вполне конкретные ответы на ваши вопросы.
    Ответ написан
  • Как заставить функцию заново выполняться при повторном вызове?

    @dmshar
    Ну, если у вас действительно в коде написано вот так:

    file_name, pattern = Gen()
    print(file_name, pattern)
    Gen()
    print(file_name, pattern)

    то покажите мне, где именно в этом коде переменные file_name, pattern изменяются между первым и вторым вызовом print().
    Ответ написан
    3 комментария
  • Как передать переменную из одной функции в другую?

    @dmshar
    Вопрос не имеет никакого отношения к написанию ботов вообще, ни к telegram в частности. Вопрос имеет отношения к Python, его основам, а так-же к необходимости его изучения.
    Для передачи значений между функциями ВСЕГДА И ВЕЗДЕ существует ТРИ способа.
    1. Классический: в общей вызывающей программе создаете переменную, которую передаете как параметр в обе функции. В одной из этих функций эта переменная заполняется значением, в другой - читается и используется.
    2. Нерекомендуемый: через глобальную переменную.
    3. Для очень сложных систем: через внешний файл.
    Все.
    Вот и выбирайте тот из них, который вам подходит больше.
    Ответ написан
    Комментировать
  • Где применяют python помимо веба и data science?

    @dmshar
    Вот осенил вас такой сложный и уникальный вопрос. Ну почему не приложить минимальных усилий и не найти самому ответ на него? Это во-первых, интересно, во-вторых развивает ваши мозги, в третьих, вы получаете ответы, где люди думали над ним, собирали информацию, старались ответ изложить доходчиво и пр. А на форуме - ну кто-то что-то вам скажет в ответ на такой обширный вопрос. И толку.
    Вот, зашев Гуугл. Вот прямо "из свежачка"- статья июльская.
    https://medium.com/geekculture/heres-everything-yo...

    Вот тоже ответы с первой ж страницы выдачи. Изучайте:
    https://brunoyam.com/blog/programmirovanie/pythons...
    https://otus.ru/journal/gde-ispolzuetsya-python/
    https://skillboх.ru/media/code/dlya_chego_nuzhen_python
    Ответ написан
    4 комментария
  • Как пройтись по 2 спискам одновременно?

    @dmshar
    for directory in directories:
           response = await session.get(url=f"{url}/{directory}")
           data.append([f"{url}/{directory}", response.status, response.content_length])
    if extensions:
            for extension in extensions:
                    response = await session.get(url=f"{url}/{directory}.{extension}")
                    data.append([f"{url}/{directory}.{extension}", response.status, response.content_length])
    else:
            for directory in directories:
                    response = await session.get(url=f"{url}/{directory}")
                    data.append([f"{url}/{directory}", response.status, response.content_length])
    Ответ написан
    Комментировать
  • Как ускорить процесс подсчёта до простого 10_001-го числа?

    @dmshar
    1. Во-первых, чем делать цикл до N, если совершенно понятно, что достаточно сделать его до N/2 - ускорение в два раза.
    2. Во-вторых - достаточно делать цикл до N**0.5 - не очевидно, но легко доказывается. Вот вам еще большее ускорение.
    3. Ну, или возьмите более быстрый компьютер - тоже помогает "ускорить" процесс.
    Ответ написан
    Комментировать
  • Как обойти выход за границы двумерного массива?

    @dmshar
    Ну, я бы делал так:
    def neighbors(arr,row,column):
        rows=len(arr)
        columns=len(arr[0])
        for i in range (row - 1,row + 2):
            for j in range(column - 1,column + 2):
                if (j >= 0 and i >= 0 and j < columns and i < rows and (not(i == row and j == column))):
                    print (arr[i][j])
        return 
    b =   [[9, 5, 3],[0, 7, -1],[-5, 2, 9]]   
    desk=[item for sublist in b for item in sublist]
    for ind0, elt0 in enumerate(b):
        for ind1,elt1 in enumerate( elt0):
            print (ind0,ind1,'------',elt1)
            neighbors(b,ind0,ind1)


    Результат:
    0 0 ------ 9
    5
    0
    7
    0 1 ------ 5
    9
    3
    0
    7
    -1
    0 2 ------ 3
    5
    7
    -1
    1 0 ------ 0
    9
    5
    7
    -5
    2
    1 1 ------ 7
    9
    5
    3
    0
    -1
    -5
    2
    9
    1 2 ------ -1
    5
    3
    7
    2
    9
    2 0 ------ -5
    0
    7
    2
    2 1 ------ 2
    0
    7
    -1
    -5
    9
    2 2 ------ 9
    7
    -1
    2

    А при использовании numpy можно бы сделать немного быстрее и элегантнее.
    Приведен самый общий случай. В случае необходимости "соседи по диагонали" тоже легко убираются.
    Ответ написан
    Комментировать
  • Почему программа «шифрования» не работает с русским алфавитом?

    @dmshar
    Исправьте в вашем коде вот эту строчку
    stringToEncrypt = stringToEncrypt.lower()
    и начинайте уже учиться, учить Python, а не бездумно копипастить чужой код. Толку и пользы будет явно больше.
    Ответ написан
    1 комментарий
  • Module 'matplotlib.pyplot' has no attribute 'read'?

    @dmshar
    А что у вас за каша в коде?
    Сохранение созданного с помощью matplotlib графика выполняется с помощью метода
    plt.savefig('имя файла')
    Сами же методы построения графика типа "plt.bar" никаких файлов не создают и тем более - не сохраняют. (Все что они создают - это график на экран и объект типа
    "BarContainer"). Но вы и его не сохраняете.
    В свою очередь метод PIL.Image.open() ожидает в качества параметра "filename (string), pathlib.Path object or a file object". Ни под одно из этих описаний модуль matplotlib.pyplot (скрывающийся под псевдонимом plt) не подходит. И уж тем более атрибута 'read' не имеет.
    Ответ написан
    Комментировать
  • Как вставить пробел после каждого третьего символа в строке Python?

    @dmshar
    Из какого словаря? В каком формате данные представлены в этом словаре? Разделять надо начиная слева или справа? Это конечно великая тайна автора, о которой он никому не поведает.
    Но, для простейшего случая, если речь идет только в ВЫВОДЕ данных , изначально хранимых в виде чисел (между прочим - целых или даже float) то вот так:
    a=10000000000
    print('{0:,}'.format(a).replace(',', ' '))

    Результат:
    10 000 000 000
    А если вы имели ввиду что-то другое - ну так тюнингуйте мой пример под свои потребности самостоятельно. И учитесь свои мысли высказывать точно и однозначно. Это умение необходимо для программиста.
    Ответ написан
    Комментировать
  • Как подписать дату и время на оси абсцисс в Matplotlib?

    @dmshar
    Ну, например, вот так:
    import pandas as pd
    import matplotlib.pyplot as plt
    from matplotlib.ticker import MultipleLocator
    ds=[
      ['14.06.2022 00:00', 1],
      ['14.06.2022 06:00', 2],
      ['14.06.2022 12:00', 3],
      ['14.06.2022 18:00', 4],
      ['15.06.2022 00:00', 1],
      ['15.06.2022 06:00', 2],
      ['15.06.2022 12:00', 3],
      ['15.06.2022 18:00', 4],
      ['16.06.2022 00:00', 1],
      ['16.06.2022 06:00', 2],
      ['16.06.2022 12:00', 3],
      ['16.06.2022 18:00', 4]
    ]
    
    df=pd.DataFrame(ds,columns=['D','A'])
    df['D']=pd.to_datetime(df['D'])
    df.set_index('D',inplace=True)
    ax=df.plot()
    ax.xaxis.set_minor_locator(MultipleLocator(6))


    62a8787e919cc437718429.png
    Ответ написан
    Комментировать
  • Как убрать предупреждение?

    @dmshar
    "Предупреждение" - это не ошибка . На работу скрипта в общем-то не влияет. И "убрать " его можно двумя путями.
    1) убрать причину, его вызывающую,
    2) убрать само предупреждение.
    Если вас интересует первое - то как это сделать написано прямо в сообщении и непонятна суть вопроса.
    Если вас интересует последнее - то вот так:.
    Универсальный способ
    import warnings
    warnings.filterwarnings("ignore")


    Выборочный способ:
    import warnings
    def fxn():
        warnings.warn("deprecated", DeprecationWarning)
    with warnings.catch_warnings():
        warnings.simplefilter("ignore")
        fxn()


    Способ при работе из командной строки

    python -W ignore foo.py
    Ответ написан
    1 комментарий