Ответы пользователя по тегу Python
  • Поможете с задачкой на Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Нет, вы можете получить листинг каталога по маске glob.glob('*.user'), потом взять максимальное (в алфавитно-цифровом порядке) имя, отрезать у него расширение, превратить в целое число, увеличить на единицу, отформатировать нулями слева и создать новый файл.

    last = max(glob.glob('*.user')+[''])
    new = (last and int(last.split('.')[0]) or 0) + 1
    Ответ написан
    Комментировать
  • Почему не работает super, чтобы взять метод из второго родителя?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Первым аргуменом super нужно передавать класс C, а в третьем питоне вообще ничего не нужно передавать.
    Вызовите нужный метод нужного предка явно, если вам так уж нужно:
    class C(A, B):
        def hi(self):
            B.hi(self)

    Но если вам это нужно, значит вы где-то ошиблись в архитектуре, в дизайне классов и методов. Вы явно не ак поняли принципы ООП.
    Расскажите подробно для чего вам такое нужно, и вам здесь наверняка подскажут как сделать правильно.
    Ответ написан
  • Как решить эту задачу(ЕГЭ информатика 2021)?

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

    Есть такая классическая задача "упаковка рюкзака". Там даны неделимые предметы и их массы. У рюкзака есть максимально допустимая масса. Все предметы в рюкзак не влезут, но нужно нужно пдобрать такой набор, чтобы нагрузить рбюкзак максимально. Эта задача вычислительно сложная при большом числе предметов. Она решается полным перебором.

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

    Вот такая вот вам подсказка. Думайте, решайте, задавайте конкретные вопросы и вам дадут еще подсказок. Но готового решения вам здесь, надеюсь, не дадут. Нам нужна достойная смена, а не двоичники, за которых дяди задачки решают.

    Давайте я вам ещё рефакторинг вашего кода сделаю. Это не сделает его правильным, но он станет лучше.
    with open("zadanie26_var_1.txt") as f:  # Так открытый файл будет закрыт после считывания
        # Так вы считаете первые два числа в отдельные переменные:
        total_volume, users_count = map(int, f.readline().strip().split())
        # А так считаете остальные строки в список и нечаянные пустые строки вас не смутят:
        user_sizes = [int(line.strip()) for line in f if line]  
    
    # Хорошо бы вынести логику решения в отдельную функцию:
    def solve(s, n, lst):
        # Вот так можно сделать проверки корректности (ну чисто для себя) входных данных:
        assert s <= 10000, 'Invalid total volume'
        assert len(lst) == n, 'Users count is not valid.'
        assert n <= 2000, 'Wrong users count.'
        assert all(0 < x <= 100 for x in lst), 'Invalid user size.'
    
        # Вот здесь вот вы сделаете нужные вычисления ;)
        backup_users_count = ...
        max_backup_file_size = ...
    
        return backup_users_count, max_backup_file_size
    
    # Ну а вызвать функцию и напечатать ее результат вы тоже сумеете, правда?
    Ответ написан
    4 комментария
  • Как обработать список?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Используйте collections.deque параметром maxlen как очередь с вытеснением.
    При если файла нет в списке, доавляйте его, а лишний будет вытеснен.
    Ответ написан
    Комментировать
  • Как посчитать пройденную дистанцию с помощью map()?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Ваш код можно сделать чуточку яснее вот так:
    def distance_traveled(self) -> float:
        return Movement(*self._movements[0]).distance + Movement(*self._movements[1]).distance

    А то, что вы хотите можно можно сделать так:
    return sum(Movement(*step).distance for step in self._movements)
    Ответ написан
    1 комментарий
  • Как использовать тип переменной key в питоне?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Комментировать
  • Как исправить поиск файла?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    значит ошиблись где-то
    Ответ написан
    Комментировать
  • Как в Python 3 изменить голос?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Я сам не пробовал. но вот нашлась либа на первых секундах поиска: https://pypi.org/project/pyvoicechanger/
    Вы ее смотрели?
    Ответ написан
  • Как в Python присвоить нескольким переменным одинаковое значение?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    огда запись a, b, c = [[]] * 3 не подойдёт, так как хоть для каждой переменной и создастся отдельный пустой список, но из-за того, что все они будут внутри ещё одного списка алгоритм не будет правильно работать.

    Не отдельный, а тот е самый. И всё будет правильно работать, разве что все переменные получат одини тот же пустой список.
    Однако, если вам нужен такой грязный код и вы при этом экономите на длине строки, значит что-то вы делаете неправильно.
    locals().update({k:[] for k in 'abcd'})
    Такой код только запутывает, а огромное число одинаковых переменных говорит, что вам их лучше положить в словарь или матрицу.
    Ответ написан
    5 комментариев
  • Как найти в матрице средний или два средних столбца?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    m3 = [
        [11, 12, 13],
        [21, 22, 23],
        [31, 32, 33],
    ]
    m4 = [
        [11, 12, 13, 14],
        [21, 22, 23, 24],
        [31, 32, 33, 34],
    ]
    mid = lambda m: [
        row[
            (len(m[0]) - 1) // 2
            :len(m[0]) // 2 + 1
        ] 
        for row in m
    ]
    assert mid(m3) == [[12], [22], [32]]
    assert mid(m4) == [[12, 13], [22, 23], [32, 33]]
    Ответ написан
  • Как в джанго работают пустые классы?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Ну, во-первых, он не пустой. Там классовый атрибут есть и докстринг.
    Во-вторых, этот класс наследует всё от двух других классов. В этом его смысл. Если у папы и у... второго папы были атрибуты, то "сынок" унаследует их все. Вот так вот. Изучайте ООП.
    Ответ написан
    Комментировать
  • Как оставить файлы в пакете?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Читайте, пожалуйста, документацию. Там всё написано.
    Ответ написан
    Комментировать
  • Метод list() в Python возвращает непустой список. Почему так?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Типичная ошибка, которая рассматривается в каждом учебнике по питону.
    Во-первых, list - это не метод, а тип, который инстанцируется в список, если его вызвать.
    Во-вторых, вот в этой строчке def __init__(self, elements=list()): создаётся список. Он создаётся оин единственный раз при объявлении класса. Значение этого списка будет присвоено аргументу elements по умолчанию при каждом вызове конструктора без указания этого аргумента.
    То есть один и тот же список будет сохранён в атрибутах всех объектов этого типа, которые были инстанцированы без указания параметра.
    У всесх ваших таких экземплярах внутри ссылка на один и тот же список. Если через одну ссылку в список добавить элеенты, то через другую ссылку доступен тот е самый список с уже добавленными элементами.
    Ответ написан
    Комментировать
  • Как можно оптимизировать код подсчета букв в строке?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    sum(map(str.isalpha, a))
    Ответ написан
    Комментировать
  • В чем смысл пакетов в python?

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

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

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Есть сколько угодно способов, но с Counter будет самым простым. Чем вам этот способ не нравится?
    Если это вопрос, а не задание, то вы, наверно. постарались придумать свой способ, что у вас не получилось? Давайте мы вам поможем. Если это задание, а не вопрос, то это противоречит правилам ресурса.
    Ответ написан
  • Некорректный перенос строк сообщения, в чём дело?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Посмотрите в 'time1.txt' после последней строки нет абзаца, а во всех остальных, скорее всего есть.
    Или в каких-то еще тоже нет и прблема плавающая, зависит от того последнюю строку выбрал рандом или нет и есть в этой строке абзац или нет.
    Обрабатывайте загруженные строки filter(None, map(str.rstrip, <lines_iter>))
    Ответ написан
    Комментировать
  • Каков предпочтительный способ записи длинных строковых литералов в Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Куда уж читабельнее? Можно в тройных кавычках, но там неудобно с отступами, приходится "ломать" форматирование или мириться с паразитными пробелами в начале кадой строки.
    Тот, способ, что у вас, ИМХО, оптимален. Особенно для форматных строк.
    Поосторожнее только с запятыми, а-то ваша строка вмиг превратится в кортеж строк.
    Ответ написан
    Комментировать