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

    @dmshar
    Если действительно ОЧЕНЬ большие - то храните в базе данных. В принципе если задача состоит в поиске допуска по диаметру то этого хватит с головой. Задача не сложная, но очень кропотливая.

    Если данные или часть закачаны в ОП, и требуют дальнейшей сложной обработки, то в Рython есть вполне работоспособная структура DataFrame из Pandas, куда такие данные такого типа нормально раскладываются. Экспорт-импорт из DataFrame в SQL реализован там-же.
    Даже непонятно, о чем тут можно еще рассуждать.
    А вот про то, как вы будете из pdf данные вытягивать перед тем, как их погружать в БД - про про это я бы подумал особо, потому как засад на этом пути достаточно много.
    Ответ написан
    Комментировать
  • Как создаются встроенные функции в python?

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

    @dmshar
    А причем тут код? Это вы намудрили какую-то операцию, от которой требуете чего-то невозможного. Возьмите простейший пример
    series_3 = '1101'
    series_2 = '110'
    Согласно вашей чудо операции имеем результат '1'

    Теперь делаем "симметричную" по вашему мнению операцию:
    series_3 = '1101'
    series_2 = '1'
    Получаем '101'

    Что не так?
    Ответ написан
  • Не те выходные данные как починить код?

    @dmshar
    А вы точно понимаете, что и зачем вы проверяете в своем коде?
    Вот здесь
    field = [input() for _ in range(n)]
    вы задали свои данные. И пошли по циклу. Как вы думаете, условие
    field[i+dx][j+dy] == '.'
    хоть когда нибудь на ваших данных (тех, которые вы привели в условии) примет значение True? Очевидно, что в массиве field значений '.' нет. Значит эта составляющая вашего условия ВСЕГДА будет False. Объединив через оператор
    0 <= i+dx < n and 0 <= j+dy < m and field[i+dx][j+dy] == '.'

    три условия, одно из которых ВСЕГДА равно False, в результате получите разумеется снова False.
    any проверит, получилось ли хоть раз у вас True. А поскольку такого, как мы видели, ни разу не было, в свою очередь выдаст False и поместит его в переменную valid_move.
    Соответственно,
    not valid_move
    даст значение True, сработает условие оператора if, выполниться последовательность

    print('NO')
           exit()

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

    Как работает код я показал. А вот логика ваша мне непонятна вообще. Зачем выписывать условие проверки, которое заведомо никогда не выполняется. Кстати, есть и другие вопросы. Например - если i=j=2, а (например), dx=0, dy=1, то как вы себе представляете элемент массива field[i+dx][j+dy]? Чему будет равно j+dy и какому элементу оно соответствует?
    Что за такую дивную задачу вы решаете - вы не сообщаете. Наверное предполагаете, что все должны это угадать, что-бы суметь подсказать вам правильное решение. Но мне почему-то гадать абсолютно не интересно. Поэтому проблемы с вашим кодом обозначил, а с логикой разбирайтесь дальше самостоятельно.
    Ответ написан
    2 комментария
  • Как вызвать все атрибуты объекта через цикл?

    @dmshar
    А какое-бы значение атрибута вы бы хотели получить, обращаясь к классу, а не к объекту??

    А вообще-то, например, вот так:

    import numpy as np
    arr=np.empty(10)
    for item in dir(arr):
        print(item, getattr(arr,item))


    Ну, или что-бы хоть немного просеять тот шлак, который от такого весьма странного действия вы получите, можно сделать вот так:

    interesting_methods = [method for method in dir(arr) if method.startswith('__') is False]   
    for item in interesting_methods:
        print(item, getattr(arr,item))


    Тоже, конечно, не понятно, что вы с этой информацией делать то собираетесь, но в выдаче, если порыться, можно найти осмысленную информацию, которую вы как бы проверяете.
    Ответ написан
    1 комментарий
  • Как переменную в цикле for сделать глобальной?

    @dmshar
    Да, глобальная переменная - это зло, но если очень хочется, то объявляется она просто:
    global balance
    Хотя в вашем конкретном случае, в дополнении к тому, что уже отметил уважаемый Сергей Горностаев добавлю, что ваш цикл - еще более странен. Вы на каждой итерации записываете в переменную balance данные, затирая те, что были в ней перед тем. По сути, значение переменной balance после окончания цикла можно предсказать заранее и будет оно равно ("%d" % (result[-1][1])). Зачем вам цикл? Ну разве что вы организовали асинхронное выполнение нескольких процессов, и передачу данных между ними - но судя до допущенным ошибкам это более чем сомнительно.
    Ответ написан
    Комментировать
  • Мне надо чтобы в 1 переменной было время а выводило время +15сек, что я делаю не так?

    @dmshar
    У вас ошибка связана с импортом.

    import datetime as dt
    print(dt.datetime.now()+dt.timedelta(seconds=1))

    Результат:
    2023-03-26 14:16:33.012528
    Ответ написан
    2 комментария
  • Какая книга по Python самая лучшая для новичков и продолжающих?

    @dmshar
    Да читайте хоть что-нибудь, а не торгуйтесь "а вот если я прочту книгу А то стоит-ли мне читать книгу Б". Читайте сначала ЛЮБУЮ книгу. Когда хоть-что-то будете понимать в теме - тогда уже сможете осмысленно судить одинаково-ли у них "информационное наполнение" или разное. И с умом выбирать из других книг (именно ДРУГИХ, а не ДРУГОЙ, потому-что этот процесс никогда не заканчивается, даже у профи) то, знаний чего вам будет недоставать при попытке написать очередной проект. У программистов этот процесс продолжается всю профессиональную жизнь.
    Да и не зачем искать "самую лучшую" книгу. Ищите ту, которая именно вам будет наиболее понятной (а это - очень индивидуальный вопрос).
    А пока вы не проекты пишете, а "книги читаете" - то читайте любую. Лучше Лутца. Нет- читайте то что уже есть под рукой.
    Ответ написан
  • Имя функции совпадает с именем переменной, ничего страшного не будет?

    @dmshar
    Вопрос из серии "можно-ли переходить на красный свет? Везде "запрещают" , но вот про мой перекресток, где и машин-то мало ездят и дядя Федя переходит его не глядя на светофор - не пишут. Можно и я буду там ходить на красный свет?"
    Вы садомазохист? Надеюсь что нет. Вы суперопытный программист? Скорее всего нет. Так почему у вас возникла идея отклонить советы, которые придуманы не для того, что бы вам "насолить", а наоборот, для того, что бы вам жизнь упростить?
    Надеюсь, вы знаете, что программист это не тот, кто умеет код писать, а тот кто умеет его отлаживать. 75-80% рабочего времени программиста уходят именно на отладку, а не написание кода И большинство советов и направлено на упрощение этой части работы. Отсюда - и советы про названия переменных. В некоторых языках программирования - настойчивые рекомендации (а в Python - вообще обязаловка на уровне синтаксиса) по использованию "лестничной" структуры кода и много чего еще. В принципе, вы можете все свои переменные называть a1,a2, a386,... или имена давать им, совпадающие с именами встроенных функций. Вот только когда нибудь, когда вы начнете писать не школьные задачки на 20 строк, а нормальные проекты на 10-20К строк и будете по три недели биться головой об стену и искать ошибки, а они окажутся связанными с нарушениями указанных правил - вот тогда и вопросы такие сами собой исчезнут. Говорят все учатся на ошибках, только дурни - на своих, а умные на чужих. Вот вам и дают набор рекомендаций, грубо говоря -о том, как избежать ошибок, об которые уже набивали шишки поколения ваших предшественников. А слушать эти рекомендации или размышлять о возможностях их неисполнения - дело ваше.
    Ответ написан
    Комментировать
  • Программирование и математика тесно связаны?

    @dmshar
    А откуда вы взяли список? Просто это очень малая часть того, что должны знать те, кто хотят себя называть специалистом по Data Science. Нет, конечно если под этим терминам понимать вызов методов fit() и predict() - тогда конечно, без знаний математики можно и обойтись. Это как есть фельдшер, а есть врач. Есть младший кодер, вызывающий указанную функцию, а есть тот, кто сам может подобрать метод а может - и усовершенствовать его. А кем быть - уж вам решать.
    6411ccaa240ed514912408.png
    Меня больше смущает наметившийся торг "а надо-ли учить математику или алгоритмы, а чего-нибудь кроме синтаксиса языка надо знать или так прокатит, а то я в математике не силен". Если что-то "не заходит" - то зачем себя напрягать? Есть куча профессий, где без всего этого можно обойтись. Когда найдете что-то что окажется действительно вашим - таких торгов не возникнет, а удовольствия в конечном итоге получите гораздо больше.
    Ответ написан
    2 комментария
  • Как сделать цикл?

    @dmshar
    Мне кажется, что если уж беремся отвечать на такие школьные вопросы, то надо делать это так, что-бы задающий вопрос хоть какую бы то пользу из этого извлек, а так-же, что бы другие, читая этот вопрос находили бы тут хоть что-то не элементарно-тривиальное.
    В частности, в этом вопросе первое, что бы я заметил, что ТС пишет
    3.Деление\n"

    потом под этим номером выполняет операцию
    str(num1 // num2)

    хотя в Python эта операция называется четко и неоднозначно:
    "Целочисленное деление" и никак иначе. А деление - это совсем другая операция.
    Кроме того, ТС называет
    a = str(num1 % num2)
    операцией
    f = 'деления с остатком'
    хотя в Python эта операция называется
    ОСТАТОК от деления
    . Смысл, как видно совсем другой.

    Во-вторых писать такие простыни кода и жестко "вшивать" данные в структуру операций if - это крайне неэффективная практика. А что будет если надо будет и другие операции реализовывать? Или даже просто поменять местами строчки в подсказке местами? Мало того, что придется менять данные, но еще и влазить в и изменять структуру "лесенки" условий и наверняка навносить туда ошибок.
    При этом задача решается намного проще и код становиться намного яснее:
    import operator
    def do_something(n1,n2,func):
        return(func(n1,n2))
    again='y'
    while again=='y': 
        num1 = int (input(' Введите первое число:  '))
        num2 = int (input(' Введите второе число:  '))
        dct={1:("Сложение",operator.add),
             2:("Вычитание",operator.sub),
             3:("Целочисленное деление",operator.floordiv),
             4:("Умножение",operator.mul),
             5:("Возвести в степень",operator.pow),
             6:("Остаток от деления",operator.mod)
             }
        print(" Напиши, какую операцию ты хочешь сделать?\n")
        for dc in dct:
            print(str(dc)+'.',dct[dc][0])
        v = int(input())
        if v>len(dct):
            print(" Вы выбрали не верный вариант\n")
            print(" Начнем с начала?")
        else:
            print(dct[v][0],'  :',do_something(num1,num2,dct[v][1]))
        again=input(" Продолжим? Y/N:  ").lower()


    Всего то! И никакой простыни на пол сотни строк!
    Хотите добавить еще операции? Добавляете ОДНУ строчку - один элемент в словарь dct и все остается работать. Никакого изменения кода.

    А вот протокол работы этого скрипта:
    Введите первое число:  10
     Введите второе число:  4
     Напиши, какую операцию ты хочешь сделать?
    1. Сложение
    2. Вычитание
    3. Целочисленное деление
    4. Умножение
    5. Возвести в степень
    6. Остаток от деления
    1
    Сложение   : 14
     Продолжим? Y/N:  y
     Введите первое число:  10
     Введите второе число:  4
     Напиши, какую операцию ты хочешь сделать?
    1. Сложение
    2. Вычитание
    3. Целочисленное деление
    4. Умножение
    5. Возвести в степень
    6. Остаток от деления
    2
    Вычитание   : 6
     Продолжим? Y/N:  y
     Введите первое число:  10
     Введите второе число:  4
     Напиши, какую операцию ты хочешь сделать?
    1. Сложение
    2. Вычитание
    3. Целочисленное деление
    4. Умножение
    5. Возвести в степень
    6. Остаток от деления
    3
    Целочисленное деление   : 2
     Продолжим? Y/N:  Y
     Введите первое число:  10
     Введите второе число:  4
     Напиши, какую операцию ты хочешь сделать?
    1. Сложение
    2. Вычитание
    3. Целочисленное деление
    4. Умножение
    5. Возвести в степень
    6. Остаток от деления
    4
    Умножение   : 40
     Продолжим? Y/N:  y
     Введите первое число:  10
     Введите второе число:  4
     Напиши, какую операцию ты хочешь сделать?
    1. Сложение
    2. Вычитание
    3. Целочисленное деление
    4. Умножение
    5. Возвести в степень
    6. Остаток от деления
    5
    Возвести в степень   : 10000
     Продолжим? Y/N:  y
     Введите первое число:  10
     Введите второе число:  4
     Напиши, какую операцию ты хочешь сделать?
    1. Сложение
    2. Вычитание
    3. Целочисленное деление
    4. Умножение
    5. Возвести в степень
    6. Остаток от деления
    6
    Остаток от деления   : 2
     Продолжим? Y/N:  y
     Введите первое число:  10
     Введите второе число:  4
     Напиши, какую операцию ты хочешь сделать?
    1. Сложение
    2. Вычитание
    3. Целочисленное деление
    4. Умножение
    5. Возвести в степень
    6. Остаток от деления
    7
     Вы выбрали не верный вариант
     Начнем с начала?
     Продолжим? Y/N:  n
    Ответ написан
    Комментировать
  • Как перемножить элементы строки в матрице, которые принадлежать диапазону [a,b]?

    @dmshar
    Читаем внимательно ваш код.
    vector=[]
    #Создаем ПУСТОЙ список, в котором вообще нет ни одного элемента.
    ....
    vector[i] *= a[i][j]
    # Ну предположим i=0. Но элемента vector[0] (впрочем, как и vector[1], vector[2].....) у вас нет - список, как я разъяснил выше, ведь пустой.

    Запись типа
    v*=a
    эквивалентна
    v=v*a
    . Вопрос - что-же вы желаете получить, умножая
    vector[i] = vector[i]* a[i][j]
    -- еще раз, если элементов vector[i] с любым i у вас не существует.

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

    @dmshar
    Один из наиболее "легких" и одновременно мощных и удобных в работе IDE - это Spyder. Низко ресурсоемкий, работает практически везде. Хорошая система подсказок и инструментов программирования. Интуитивно абсолютно понятный. Входит в сборку Anaconda и до недавно был там основным IDE - значит никаких танцев с бубнами по установке, пару сотен пакетов с возможностью автоматизированного обновления - вам обеспечено. Совместим с pip. Активно обновляется сам.
    Ответ написан
    Комментировать
  • Почему неправильно работает код?

    @dmshar
    import re
    with open("24.txt", "r") as file:
            f = file.read()
    fmsx=0
    fs=re.split('KL|LK',f)
    for fs1 in fs:
        if fmsx<=len(fs1):
            fmsx=len(fs1)
    print(fmsx)


    Результат:

    2794

    Это "чистая" длинна. Надо длина, включая 'KL' в конце - добавляете к результату 2.
    Ответ написан
    Комментировать
  • Как зациклить код в Python?

    @dmshar
    Для организации "зацикливания" в Python есть специальные операторы циклов. Их аж два :
    for
    и
    while

    Кто вас знает, что и зачем вы собрались "зацикливать", но общее правило гласит:
    for
    используется как правило для перебора элементов такой сущности, по которой можно итерироваться: коллекция, генератор, итератор.
    while
    используется как правило для бесконечного цикла, а также для циклов, где нет последовательного перебора сущностей, а есть некое условие окончания цикла, либо вычисляемое, либо зависящее от ввода пользователя или какого-то другого недетерминированного события.
    Все остальное прочитаете в любом учебнике по Python, примерно на 5-ой странице.
    P.S. Кстати, "зацикливание" у программистов - это почти ругательство.
    Ответ написан
    Комментировать
  • Счастливый билет. Где ошибка в коде?

    @dmshar
    А зачем все так сложно?
    Зачем введенную строку преобразовывать в int?
    Зачем выделять цифры путем деления на 10?
    Зачем так сложно выяснять длину введенного числа?
    Зачем столько танцев с бубнами над отдельными цифрами?
    Зачем..... ?

    Все по сути делается в три строки:

    a = input("Введите номер вашего билета что бы узнать счастливый он или нет: ")
    if len(a)==6 and a.isdigit():
        la=list(map(int,list(str(a))))
        if sum(la[:3])==sum(la[3:]):
            print('Счастливый')
        else:
            print('Обычный')
    else:
        print("Ввели неверное число")

    Проверка:
    Введите номер вашего билета что бы узнать счастливый он или нет: 123456
    Обычный
    Введите номер вашего билета что бы узнать счастливый он или нет: 222223
    Обычный
    Введите номер вашего билета что бы узнать счастливый он или нет: 222222
    Счастливый
    Введите номер вашего билета что бы узнать счастливый он или нет: 456375
    Счастливый
    Введите номер вашего билета что бы узнать счастливый он или нет: 196277
    Счастливый
    Введите номер вашего билета что бы узнать счастливый он или нет: 012345
    Обычный
    Введите номер вашего билета что бы узнать счастливый он или нет: 000000
    Счастливый
    Введите номер вашего билета что бы узнать счастливый он или нет: 123.456
    Ввели неверное число
    Введите номер вашего билета что бы узнать счастливый он или нет: 123.45
    Ввели неверное число
    Введите номер вашего билета что бы узнать счастливый он или нет: 123Ф56
    Ввели неверное число
    Ответ написан
    Комментировать
  • Как удалить дубликаты из списка?

    @dmshar
    То, что вы написали - некоторые данные в фигурных скобках - согласно синтаксису Python не есть список. Это множество. Множество - это такая структура, которая не допускает повторяющихся элементов внутри себя. Т.е. присвоив эту строку некой переменной, ей автоматом будет приписан тип "set" и при выполнении этой операции все повторяющиеся элементы будут автоматом удалены.
    Вот пример
    slt={'threads/4862302', 'threads/4862302', 'threads/4862302/'}
    print (slt)

    и результат
    {'threads/4862302/', 'threads/4862302'}

    Если вдруг вы считаете, что 'threads/4862302/' и 'threads/4862302' - это один и тот-же элемент, то вам надо предварительно просто поудалять символы '/' из строк, например - вот так:
    slt={'threads/4862302', 'threads/4862302', 'threads/4862302/', 'threads/4862303/','threads/4862304/'}
    sa=set()
    for x in slt:
        if x[-1]=='/':
            x=x[:-1]
        sa.add(x)
    print (sa)

    и результат:
    {'threads/4862304', 'threads/4862303', 'threads/4862302'}
    Ответ написан
    Комментировать
  • С чего начать изучение ML, AI и т. д. чтобы успеть к сроку?

    @dmshar
    А тему курсовой работы мы должны угадать?
    А что такое "чуть больше" чем азы Python - т.е. до операторов цикла и условных операторов вы уже дошли?
    А учитесь вы на математическом факультете московского университета, или на танцевально-астрономическом факультете мухосранского мелиоративного колледжа?
    А по какому предмету курсовая должна угадать система искусственного интеллекта, которую мы подключим, что-бы понять, чего-же тут хотел сказать интеллект естественный?
    Впрочем изучить ИИ "до 10-ых чисел мая" - это, конечно, лучше и реальнее, чем "профессионал по ИИ за 7 дней".

    Но если вы решили эту информацию засекретить, то вот вам универсальный список:

    https://ru.stackoverflow.com/questions/Книги-и-уче...
    и
    https://www.cyberforum.ru/ai/thread2010374.html
    Ответ написан
    Комментировать
  • Как написать аналогичный код на Python?

    @dmshar
    Есть модуль time. В нем есть весьма полезные для ваших целей функции: time.time() - получение текущего (системного времени) и time.sleep() - приостановка выполнения процесса на заданный интервал времени. Комбинируя эти функции можно и таймаут сделать, и привязывать выполнение к заданному моменту и много чего еще. Документация по модулю тут:
    https://docs.python.org/3/library/time.html
    Ответ написан
    Комментировать
  • SerpentAI выдаёт ошибку при создании датасета. Что делать?

    @dmshar
    Вы документацию читали? Там же четко английским по белому написано:
    "If you run into any errors, open an issue in the Issues tab and I'll see what I can do. But try googling first. You'll probably find answers from people that know more than me."
    Вы пробовали сделать то, что вам советуют? Ну например, нагууглили, что "the NumPy object type 'O' is created when the NumPy array itself has mixed element types (e.g. np.int8 and np.float32)" ? Вот и ищите, где и какие данные вы неправильно задаете, путая их типы.
    Ответ написан