• Как и с чего начать обучение?

    @AlexSku
    не буду отвечать из-за модератора
    Нил Рубенкинг - самое лучшее, что я видел (в коде, правда, могут быть опечатки).
    Ответ написан
    Комментировать
  • Как правильно реализовать ООП python?

    tumbler
    @tumbler Куратор тега Python
    бекенд-разработчик на python
    Тут нет ООП. Набор функций (привет, процедурное программирование) зачем-то сгруппирован в класс, у которого инстанцируется единственный экземпляр.
    Ответ написан
    8 комментариев
  • Как правильно реализовать ООП python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    import telebot
    import requests
    import pprint
    import time
    
    botToken = "token"
    chanelName = "@wo"
    
    class Bot:
      def __init__(self,nameChanel,token):
        # todo: проверьте pep8: форматирование (пробелы, indent=4), нейминг (CamelCase vs snake_case)
        self.name = nameChanel
        self.bot = telebot.TeleBot(token)
        # todo: Неадекватное имя bot. Вызывает путаницу в связи с именем класса Bot
        #self.source = source
    
      def getIDGroup(self,str):
        # todo: str - это встроенный тип, по смыслу должно быть ясно, что можно итерировать
        arr = []
        # todo: Неадекватное имя arr. Имя должно указывать не на тип, а на суть того, что поименовано.
        for nameGroup in str:
          url = f"url"  # todo: Зачем тут форматная строка, если нет переменных? Видимо ошибка.
          response = requests.get(url).json()['response']['object_id']
          # todo: Где проверка ответа на ошибки?
          # todo: Неадекватное имя. Назовите object_id
          arr.extend(self._getPostsGroup(response))
        return self._editPosts(arr)
    
      def _getPostsGroup(self,number):
        # todo: Неадекватное имя number. Назовите group_id 
        number = str(number)
        url = f"url"
        response = requests.get(url).json()['response']['items']
        # todo: Неадекватное имя. Назовите object_id
        return response
    
      def _editPosts(self,posts):
        with open('id.txt','r') as file:
          list = file.read().split()
          # todo: имя переменной перекрывает встроенный тип, не отражает содержимое
          # todo: Зачем read и split, если можно list(file) и идентификаторы хранить в строках?
          file.close()
          # todo: Зачем close, если with?!
        
        for item in posts:
          count = list.count(str(item['id']))
          # todo: Зачем вам тут count, если нужна лишь проверка на вхождение?
          if count:
            continue
          photo = ""
          # todo: почему не None?
          for img in item['attachments'][0]['photo']['sizes']:
            if img['height'] > 300:
              photo = img['url']
              break
          text = item['text']
    
          self._sendMessageBot(text,photo)
          with open('id.txt','a') as file:
            # todo: ну использовали бы уже хотя бы shelve
            file.write(str(item['id'])+' ')
            file.close()
            # todo: опять close
    
    
      def _sendMessageBot(self,text,photo):
        if photo:
          if text:
            self.bot.send_photo(self.name,photo,caption=text)
            return
          else:
            self.bot.send_photo(self.name,photo)
        if text:
          self.bot.send_message(self.name,text)
    
        # Функция могла выглядеть так:
        # if photo:
        #   self.bot.send_photo(self.name, photo, caption=text)
        # elif text:
        #   self.bot.send_message(self.name, text)
        # Но лучше не допускать вызова с пустыми аргументами. Это бессмысленно и плохо
    
    bot = Bot(chanelName, botToken)
    # вот как понимать такое: bot.bot? Нейминг!!!
    posts = bot.getIDGroup() #name of group

    Зачем каждый раз читать и писать файл, когда у вас бот в памяти остаётся?
    По меньшей мере вы можете хотя бы не читать каждый раз, сохраняя идентификаторы в множестве памяти (кэш), а загружать это множество из файла только при старте бота. Писать можно и так. Но у вас функции не соответствуют принципу single responsibility (почитайте SOLID)

    Всё плохо. Прежде чем думать об ООП почитайте хотя бы туториал по питону или любую книжку Питон для чайников.
    Хороший тон давать код на ревью в гитхабе. Там можно удобно, с подсветкой синтаксиса и нумерацией строк прокомментировать весь ваш ... код, а вы сможете его потом итеративно улучшать и мне не придётся заново убеждаться, что вы учли все замеченные проблемы при повторном ревью.
    Вот бесит прям. Пожалуй не буду больше ревьюить первые потуги настолько самоуверенных программистов. Просто не вежливо дёргать сообщество не почитав даже основы.
    Ответ написан
    3 комментария
  • Комментарии в коде?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Давайте перестанем путать комментарии в коде и документацию. Если первое предназначено для объяснения как это вообще работает, то второе ставит перед собой цель описания интерфейса взаимодействия, краткие описания с примерами использования и другие вещи, позволяющие, например, автоматически генерировать документацию
    Ответ написан
    Комментировать
  • Комментарии в коде?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Комментарии в коде необходимы только в случаях:
    1. Класс - в самом начале: его краткое описание и назначение.
    2. Метод - если названия и переменных метода недостаточно для понимания его функционирования.
    3. Места, где трудночитаемый код: этажерки условий, запросов к БД, и подобные.

    Структура кода и названия переменных, функций, методов, классов - должны быть такими, чтобы код можно было легко читать (и расширять!), не прибегая к дополнительным коментариям для полного понимания процесса.
    Ответ написан
    3 комментария
  • Как узнать запаролен ли rar-файл?

    joeberetta
    @joeberetta
    Читай: https://epdf.pub/google-for-dummies.html
    2 комментария
  • Какую ОС выбрать для корпоративного сервера?

    Zoominger
    @Zoominger Куратор тега Компьютерные сети
    System Integrator
    Я бы Windows Server поставил новый, если мощности позволяют.
    Ответ написан
    3 комментария
  • Какую ОС выбрать для корпоративного сервера?

    profesor08
    @profesor08
    Windows Server, хорошо, удобно, красиво, знакомо, сделано для людей.
    Ответ написан
    Комментировать
  • Как понять операторы сравнения на конкретном примере?

    gbg
    @gbg
    Любые ответы на любые вопросы
    Эм. У x86, бати нынешних десктопов, эти сравнения делаются за одну инструкцию CMP, а потом парсилкой регистра флагов тпа JEQ, JZ, JLE, выбирается, куда прыгать. Так что одинаково оно будет на деле.

    Но! Современные компиляторы и процессоры гораздо более умны, чем вы хотите. Поэтому, если вы собираетесь написать что-то быстрое, придерживайтесь определенных рекомендаций типа "располагайте данные в памяти линейно (так предиктор кэша выборки работает лучше)" и "избегайте ветвлений (так меньше будет срывов конвейера)". Это лучше гаданий "во что откомпилируется мой код".

    Подлинно горячие места компилируют на C++/C/Rust с контролем полученного ассемблерного кода, но до этого, как правило, вылизывают алгоритм, потому что O(log n) и O(n^3) - две большие разницы.
    Ответ написан
    1 комментарий
  • Что такое обратный вызов в программировании?

    Griboks
    @Griboks
    Когда функция выполняется долго, нет смысла ожидать её завершения (визуально это будет выглядеть как зависший браузер, и пользователь закроет сайт). Поэтому ей передают callback, мол, сама сообщишь, когда закончишь работу.
    Ответ написан
    Комментировать
  • Что делать, если Паскаль не рассматривает else?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    9 - это нечётное. Всё верно.
    Ответ написан
    2 комментария
  • Как изменять что-любо в программных проектах?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    Большинство книг, которые выпущены вчера, базируются на знаниях, которые кто-то получал в 2004, поэтому даже в старых книгах всегда полно полезной информации.

    Что же касается изменений в проекте - так если вы умеете программировать - вы должны знать что менять. Если не умеете - не меняйте.

    Или уточните вопрос.
    Ответ написан
    Комментировать
  • К чему применять интерфейс?

    @Cheypnow
    Интерфейс описывает контракт.
    Абстрактный класс описывает базовое поведение, общее для нескольких потомков.
    В чем проблема?
    Ответ написан
    Комментировать
  • К чему применять интерфейс?

    Compolomus
    @Compolomus Куратор тега PHP
    Комполом-быдлокодер
    Не стоит бояться абстрактных классов, это может быть очень удобным, интерфейс не содержит реализации, не может иметь свойств, только константы. Так же интерфейс только публичные методы имеет, когда абстрактный класс может содержать какие то приватные методы, где будет содержаться общая логика
    Я за второй вариант
    Ответ написан
    Комментировать
  • Как программирование связано с информатикой?

    Nikson7
    @Nikson7
    Информатика это алгоритмы,математика.Все четко определенно, и ты можешь быть уверенным в последующем действии ,если оно основано на предыдущем,уже доказанном и проверенном.
    Ну а программирование основывается на информатике.

    Разработка программного обеспечения никогда не будет строгой дисциплиной с подтверждёнными результатами, поскольку в неё вовлечена деятельность человека.
    Ответ написан
    2 комментария
  • Когда нужно использовать var?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    typeof(int) != typeof(Random)

    Как бы так
    Ответ написан
    1 комментарий
  • Как называется режим в котором windows пишет все изменения в оперативную память а не на диск?

    demon416nds
    @demon416nds Автор вопроса
    Разработчик на чем попало
    вспомнил что пришло это из windows embedded
    ewf (Enhanced Write Filter)
    uwf в более новых версиях
    Ответ написан
    Комментировать
  • Как развиваться дальше самостоятельно?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Вот мой список навыков:
    C
    C++
    C#
    WPF/WinForms
    Unity3d
    Хорошо знаю паттерны проектирования, умею их применять
    HTML5
    CSS3
    Адаптивная и кроссбраузерная вёрстка
    JavaScript
    JQuery
    React.js
    Bootstrap
    PHP (не силен в PHP, но базовые знания есть)
    SQL
    MySQL
    МАЛО! Мало, мало, мало!
    Вот, если бы ещё и портфолио, рабочие проекты, сертификаты, рекомендательные письма закачиков, рейтинг профиля гитхаба...
    Шансов было бы в разы больше.
    Ответ написан
  • Как развиваться дальше самостоятельно?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    После первого же семестра, с февраля начинаешь искать летнюю практику. Естественно, не в геймдеве, а куда возьмут. Ищи через преподов, родителей, знакомых, объявления. После первой-второй практики пытаешься залезть куда-нибудь на полставки. Если повезёт, туда же, где практику проходил. Часто университетские ВЦ берут студентов на полставки. Курса с 4-го можно пробовать договариваться с деканатом и преподавателями о свободном посещении и переходить на полную ставку. В случае успеха, вместе с дипломом получаешь статус мидла, заинтересованность в тебе рынка труда и возможность выбирать работодателя. После этого можно уже искать геймдев. В случае неуспеха, надо сказать себе "Я плохо старался" и стараться лучше.
    Ответ написан
    Комментировать