• Как сделать шанс в python?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    if random.random()< 0.2:
        print(7)
    elseif:
        print(5)
    Ответ написан
    Комментировать
  • Можно ли так реализовывать табы? Или как будет лучше?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    Javascript и CSS код писать нужно так, чтобы он минимально зависел от разметки.
    Вам, чтобы добавить вкладки, нужно будет добавлять стили и копипастить куски js-кода.

    Посмотрите, как это можно сделать, написав js/css код всего один раз, и спокойно добавлять/удалять количество вкладок.
    Постарался написать попроще.

    Ответ написан
    2 комментария
  • Как запретить программе доступ в интернет?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    1. Фильтровать по владельцу: iptables -m owner -h

    2. Использовать cgroups и фильтровать по ним: iptables -m cgroup -h

    3. Использовать отдельный network namespace без доступа в интернет: ip help netns

    4. Использовать docker с none-сетью: docker run -it --net=none my_awesome_image_for_application
    Ответ написан
    1 комментарий
  • Прошу помощи. В каком направлении мне двигаться?

    Tanner
    @Tanner
    Огромный человекоподобный боевой робот
    Для начала, мне непонятно, почему все части вашей программы, которые вполне могут выполняться синхронно, работают в потоках. Есть часть программы, которая выиграла бы от многопоточности − сканирование портов, где логично было бы создать по потоку на каждый порт (если портов слишком много, то создать пул потоков, определить стратегию переиспользования потоков, в общем, тут большой простор для творчества), но у вас порты сканируются в одном потоке, последовательно.

    Но давайте притворимся, что так и надо, и поговорим о других проблемах вашего кода.
    • Не стоит использовать глобальные переменные в программах длиннее одного экрана. Вместо global лучше объявить глобальный объект и спрятать flag в него:
      class PortScanner:
          
          def __init__(self):
              self.flag = 0
              
          def animate_menu_up(self):
              print("\n")
              ...
              self.flag = 1


    • Код инициализации программы тоже лучше перенести в __init__() глобального объекта. И основной цикл вынести в отдельный метод, например, run(). Тогда на нижнем уровне у нас останется что-то вроде:
      import ...
      
      class PortScanner:
          ...
      
      if __name__ == '__main__':
          main_obj = PortScanner()
          main_obj.run()

      этот идиоматичный код позволит импортировать класс PortScanner в другой скрипт, а также обеспечит плюсик на собеседовании/ревью,
    • приучайтесь использовать докстринги вместо комментариев:
      def animate_menu_up():
          """ Создание красивого меню (вверх). """

    • лишний цикл while True: в select_mode(),
    • слишком много магии. По мере роста программы становится всё тяжелее держать и сопоставлять в голове всякие абстрактные значения. Вот литералы, которые, по моему мнению, стоило бы определить как константы − или в «шапке» скрипта, или как атрибуты класса:
      MF_INITIAL = 0
      MF_MENU_CENTER = 1
      MF_MENU_DOWN = 2
      MF_SELECT = 3
      
      SCREEN_WIDTH = 50
      ALL_PORTS = [22, 80, 7777, 2516]
      SOCK_TIMEOUT = 0.5
      ANIM_SYMBOL = '~'
      ANIM_DELAY = 0.02

    • такие вещи очень больно стреляют в ногу и почти гарантированно проваливают собеседования:
      except RuntimeError:
          continue
      если вы действительно хотите продолжить выполнение программы после такой ошибки (что в обычных обстоятельствах бессмысленно и опасно), то позаботьтесь хотя бы о правильной индикации:
      import traceback
      ...
      except RuntimeError:
          traceback.print_exc(file=sys.stdout)
          continue

    • раз уж мы задержались здесь, давайте сделаем диспетчер более идиоматичным:
      while True:
          try:
              {
                  MF_MENU_CENTER: th_three.start,
                  MF_MENU_DOWN: th_two.start,
                  MF_SELECT: select_mode,
              }[flag]()
          except RuntimeError:
              traceback.print_exc(file=sys.stdout)
              continue
      Такой наивный подход выводит много шелухи на экран, но это не важно. Важно то, что такой код проще читать и дорабатывать, чем цепочку if...elif...else.

    • Работа со строками тоже напрашивается на улучшения:
      1. нет смысла разбивать строки на списки, к символам в строке можно обращаться так же, как к элементам списка − по индексу и с помощью срезов,
      2. не нужно копировать строки,
      3. не нужно печатать всю строку с начала, это делает анимацию неровной − конец строки печатается медленнее, чем начало. Достаточно допечатать один символ в строке.
      Например:
      def animate_menu_center():
          """ Создание анимации центрального меню. """
          # настройки для анимации
          output_strings = [
              '[1] scan all ports',
              '[2] scan enter port',
              '[3] exit',
              'SCANNER V1.0',
          ]
      
          # анимация названия
          for output_string in output_strings:
              print('\r\t\t', end='')
              for ch in output_string:
                  print(ch, end='')
                  time.sleep(ANIM_DELAY)
              # last string?
              if output_string != output_strings[-1]:
                  # new line
                  print()
      
          print('', flush=True)
          flag = MF_MENU_DOWN
      (Я убрал цвета для простоты.)
    • юзабилити сильно страдает из-за отсутствия нормальной функции выхода из приложения,
    • не оставляйте закомментированный код в файле, который отдаёте на ревью, это минус. Вместо этого напишите комментарий с пометкой “TODO”, например:
      # TODO: реализовать режим '2' (скан произвольного списка портов)
      Это однозначно плюс − показывает, что вы умеете работать в команде и пользоваться системами контроля версий.

    Вроде бы наиболее серьёзные проблемы я перечислил. Выложу более полный вариант кода в комментариях.
    Ответ написан
    1 комментарий
  • Как понять [:,: 0] в python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Дополню немного ответ @sergey-gornostaev
    Это срез, вернее даже два.
    Дело в том, что в питоне объекты могут поддерживать протокол __getitem__, этот метод вызывается когда объект употребляется с квадратными скобками справа. Значение, указанное в квадратных скобках, будет передано в качестве аргумента этому методу.
    Тут есть два нюанса:
    В обычном выражении на питоне запятая означает что результат выражения - это кортеж. То. что вычислилось между запятыми, будет элементами кортежа:
    x=1,2,3
    Второй нюанс заключается в том, что в квадратных скобках питон поддерживает особый такой "синтаксический сахар" называемый срезами (slice).
    Вам действительно лучше почитать про срезы в книге. В общем у среза есть три аргумента и все необязательные. Если аргумента три то срез "под сахаром" выглядит так: 3:10:2 - "с третьего включительно по десятый исключительно с шагом 2".
    Срез 3::2 - означает "с третьего включительно до последнего включительно с шагом 2"
    Шаг можно опустить, по умолчанию он равен 1 и тогда не нужно второе двоеточие. Можно также не указывать и начало среза (типа сначала). Так : означает срез "от начала включительно до конца включительно с шагом 1".
    Такие срезы можно указать через запятую.
    Фактически фрейм - это трёхмерный массив. Первые два измерения - это высота и ширина, третье - это компоненты цвета.
    В вашем примере операцию проводят над всеми пикселями от верха и до низа, по всей ширине но в определённом канале.

    Правда, почитайте книгу. Такие вещи нужно осваивать последовательно, а не наскоком.
    Ответ написан
    2 комментария
  • Почему данном случае теряется контекст this?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Простой ответ:
    Берём метод:
    метод = function(){
      console.log(this)
    };
    и(не важно как) пихаем его в какие-то объекты.
    Получаем:
    хрень.метод() // this - хрень
    хрень.кишки.метод() // this - хрень.кишки
    метод() // this - window
    
    хрень.метод.call(хрень.кишки) // this - хрень.кишки
    метод.call(хрень.кишки) // this - хрень.кишки
    метод.call(null) // this - null
    
    элемент.addEventListener('оппа', хрень.метод) //  this -элемент
    элемент.addEventListener('оппа', метод) //  this -элемент
    элемент.addEventListener('оппа', хрень.кишки.продукт.метод) //  this -элемент

    По сути this для фукции - это то, что идёт перед точкой, кроме тех случаев когда он переопределён явно. Всё, никакой эзотерики.)

    fn.call(!this ? this : obj) - это чушь скорее всего. Если this - falsy, то ставим его как this при вызове функции fn, иначе ставим obj. Falsy this может быть только при явном указании(или в strict режиме, при вызове функции напрямую("без точки перед ней")), и скорее всего передача пустого this в таком случае просто сломает выполнение fn.

    Ну ещё следует упомянуть стрелочную фукнцию:
    метод = () => {
      console.log(this)
    };
    это можно считать за явное указание this, потому что this тут всегда привязан тот, что был при создании стрелочной функции, независимо от того как и откуда её вызывают.
    Ответ написан
    3 комментария
  • Как скрыть блок если дочерний пустой?

    joeberetta
    @joeberetta Куратор тега JavaScript
    Читай: https://epdf.pub/google-for-dummies.html
    Без скриптов:
    .someClass:empty() {
      display: none
    }
    Ответ написан
    Комментировать
  • Как написать тест на javascript?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Вот для вдохновения
    Ответ написан
    6 комментариев
  • Как лучше организовать сеть с 2 фаерволами?

    @Wexter
    Нужно подключить сеть с макс защитой по какой схеме лучше произвести? Ваши варианты?

    Медленно отойди от сети и позови взрослых. Сети детям не игрушка
    Ответ написан
    2 комментария
  • Как создать и скачать файл на фронте?

    hzzzzl
    @hzzzzl


    см строчки

    element.setAttribute('href', 'data:text/plain;charset=utf-8,' + text);
    element.setAttribute('download', 'file.csv');
    Ответ написан
    Комментировать
  • Как сделать так что бы шахматная фигура по клику перемещалась на другую ячейку?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Можно разделить данные и их отрисовку. Массив «состояния» доски: какая фигура в какой ячейке. Пустая клетка – пустая строка. Клетка с королевой – 'Q'. И функция, которая отрисовывает всю доску, исходя из Состояния.

    Для обозначения фигур использовать буквы из шахматной нотации. King = K, Queen = Q, Bishop = B, Knight = N, Rook = R, pawn = p
    Понадобится словарь, где ключу фигуры соответствует символ для его отображения.

    Каждая ячейка кликабельна. Кнопка в себе хранит координаты X и Y – понадобятся в обработчике клика, общем для всех.
    Хранится переменная для предыдущего. Изначально пуста. Если кликнули по фигуре, а «предыдущая» пуста, значит это Первый клик - выбор фигуры для хода.
    Второй клик должен выбрать другую ячейку, куда поставить выбранную ранее фигуру, или отменить выделение, если Второй раз выбрана та же клетка, что в Первый.

    Ответ написан
    7 комментариев
  • Работа с txt файлом, как читать большое количество значений в txt?

    @mrxor
    Simple is better than complex
    Используйте базу данных
    Ответ написан
    Комментировать
  • Как разрешить сохранение файлов cookies?

    @RetAndr Автор вопроса
    Получилось.
    Сделал так:
    import csv
    import urllib.request
    import requests
    
    from bs4 import BeautifulSoup
    
    
    session = requests.Session()
    res = session.get('http://url.com')
    cookies = dict(res.cookies)
    url = 'http://url.com'
    params = {
            'login':'login',
            'pass':'pass'
            }
    r = session.post(url, data = params, cookies = cookies)
    print(r.text)

    Вернулся весь тот html? который уже нужно парсить.
    Ответ написан
    Комментировать
  • Подсчёт одинаковых слов в файле python?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    > но через функции и map, но не используя циклы
    Ну если строго функции и map и не используя циклы - тогда вот:
    def count_word(word):
        if word in total_count:
            total_count[word] += 1
        else:
            total_count[word] = 1
    
    total_count = dict()
    list(map(lambda x: count_word(''.join(filter(str.isalpha, x.lower())), str1.split())) # в str1 - ваш текст
    print(total_count)


    {'the': 46, 'ancient': 2, 'greeks': 1, 'first': 4, 'had': 3, 'idea': 3, 'of': 11, 'getting': 1, 'men': 1, 'together': 2, 'every': 3, 'four': 3, 'years': 3, 'to': 9, 'hold': 1, 'and': 15, 'witness': 1, 'sporting': 1, 'events': 3, 'in': 13, 'those': 1, 'days': 2, 'women': 1, 'did': 1, 'not': 1, 'participate': 1, 'though': 1, 'they': 5, 'their': 5, 'own': 1, 'independent': 1, 'was': 3, 'have': 3, 'best': 1, 'athletes': 3, 'from': 2, 'all': 3, 'over': 1, 'greece': 1, 'gather': 1, 'one': 2, 'field': 1, 'compete': 2, 'wars': 2, 'fighting': 1, 'stop': 1, 'while': 1, 'supporters': 1, 'came': 1, 'town': 1, 'olympia': 1, 'for': 4, 'a': 4, 'few': 2, 'mostly': 1, 'related': 1, 'warfare': 1, 'throwing': 1, 'javelin': 1, 'running': 1, 'wrestling': 1, 'boxing': 1, 'chariot': 1, 'racing': 1, 'written': 1, 'reference': 1, 'games': 9, 'is': 6, '': 7, 'bc': 1, 'lasted': 1, 'until': 4, 'ad': 1, 'having': 1, 'modern': 1, 'suggested': 1, 'mid': 1, 'th': 1, 'century': 1, 'but': 1, 'werent': 1, 'world': 2, 'event': 1, 'besides': 1, 'being': 1, 'postponed': 1, 'because': 1, 'been': 1, 'held': 2, 'since': 1, 'then': 2, 'different': 1, 'cities': 1, 'around': 1, 'olympic': 6, 'many': 1, 'important': 1, 'symbols': 1, 'that': 2, 'most': 1, 'people': 1, 'recognize': 1, 'five': 2, 'rings': 1, 'appear': 1, 'on': 2, 'flag': 3, 'coloured': 1, 'yellow': 1, 'green': 1, 'blue': 1, 'black': 1, 'red': 1, 'were': 1, 'introduced': 1, 'represent': 1, 'continents': 1, 'africa': 1, 'americas': 1, 'australia': 1, 'asia': 1, 'europe': 1, 'raised': 1, 'host': 2, 'city': 2, 'flown': 1, 'next': 2, 'where': 2, 'it': 4, 'kept': 2, 'torch': 3, 'major': 1, 'part': 1, 'brought': 1, 'back': 1, 'carried': 1, 'with': 1, 'great': 1, 'fanfare': 3, 'publicity': 1, 'lights': 1, 'burning': 2, 'flame': 1, 'close': 1, 'symbolizes': 1, 'purity': 1, 'drive': 1, 'perfection': 1, 'struggle': 1, 'victory': 1, 'rousing': 1, 'anthem': 2, 'simply': 1, 'named': 1, 'music': 1, 'by': 2, 'john': 1, 'williams': 1, 'who': 1, 'wrote': 1, 'olympics': 1, 'los': 1, 'angeles': 1, 'what': 1, 'you': 1, 'hear': 1, 'are': 2, 'forty': 1, 'or': 1, 'so': 1, 'notes': 1, 'played': 2, 'horns': 1, 'which': 2, 'form': 1, 'buglers': 1, 'dream': 1, 'also': 1, 'called': 1, 'leo': 1, 'arnaud': 1, 'clearly': 1, 'evident': 1, 'opening': 1, 'ceremony': 1, 'when': 1, 'everyone': 1, 'formally': 1, 'welcomes': 1, 'participants': 1, 'can': 1, 'begin': 1, 'here': 1, 'we': 1, 'find': 1, 'dramatic': 1, 'colourful': 1, 'march': 2, 'nations': 1, 'each': 1, 'country': 1, 'go': 1, 'into': 1, 'venue': 1, 'sound': 1, 'countrys': 1, 'behind': 1, 'flags': 1, 'thus': 1, 'becoming': 1, 'representatives': 1, 'countries': 1}


    А вообще лучше так:
    from collections import Counter
    print(Counter([''.join(filter(str.isalpha, x.lower())) for x in str1.split() if ''.join(filter(str.isalpha, x.lower()))]))


    Counter({'the': 46, 'and': 15, 'in': 13, 'of': 11, 'to': 9, 'games': 9, 'is': 6, 'olympic': 6, 'they': 5, 'their': 5, 'first': 4, 'for': 4, 'a': 4, 'until': 4, 'it': 4, 'had': 3, 'idea': 3, 'every': 3, 'four': 3, 'years': 3, 'events': 3, 'was': 3, 'have': 3, 'athletes': 3, 'all': 3, 'flag': 3, 'torch': 3, 'fanfare': 3, 'ancient': 2, 'together': 2, 'days': 2, 'from': 2, 'one': 2, 'compete': 2, 'wars': 2, 'few': 2, 'world': 2, 'held': 2, 'then': 2, 'that': 2, 'five': 2, 'on': 2, 'host': 2, 'city': 2, 'next': 2, 'where': 2, 'kept': 2, 'burning': 2, 'anthem': 2, 'by': 2, 'are': 2, 'played': 2, 'which': 2, 'march': 2, 'greeks': 1, 'getting': 1, 'men': 1, 'hold': 1, 'witness': 1, 'sporting': 1, 'those': 1, 'women': 1, 'did': 1, 'not': 1, 'participate': 1, 'though': 1, 'own': 1, 'independent': 1, 'best': 1, 'over': 1, 'greece': 1, 'gather': 1, 'field': 1, 'fighting': 1, 'stop': 1, 'while': 1, 'supporters': 1, 'came': 1, 'town': 1, 'olympia': 1, 'mostly': 1, 'related': 1, 'warfare': 1, 'throwing': 1, 'javelin': 1, 'running': 1, 'wrestling': 1, 'boxing': 1, 'chariot': 1, 'racing': 1, 'written': 1, 'reference': 1, 'bc': 1, 'lasted': 1, 'ad': 1, 'having': 1, 'modern': 1, 'suggested': 1, 'mid': 1, 'th': 1, 'century': 1, 'but': 1, 'werent': 1, 'event': 1, 'besides': 1, 'being': 1, 'postponed': 1, 'because': 1, 'been': 1, 'since': 1, 'different': 1, 'cities': 1, 'around': 1, 'many': 1, 'important': 1, 'symbols': 1, 'most': 1, 'people': 1, 'recognize': 1, 'rings': 1, 'appear': 1, 'coloured': 1, 'yellow': 1, 'green': 1, 'blue': 1, 'black': 1, 'red': 1, 'were': 1, 'introduced': 1, 'represent': 1, 'continents': 1, 'africa': 1, 'americas': 1, 'australia': 1, 'asia': 1, 'europe': 1, 'raised': 1, 'flown': 1, 'major': 1, 'part': 1, 'brought': 1, 'back': 1, 'carried': 1, 'with': 1, 'great': 1, 'publicity': 1, 'lights': 1, 'flame': 1, 'close': 1, 'symbolizes': 1, 'purity': 1, 'drive': 1, 'perfection': 1, 'struggle': 1, 'victory': 1, 'rousing': 1, 'simply': 1, 'named': 1, 'music': 1, 'john': 1, 'williams': 1, 'who': 1, 'wrote': 1, 'olympics': 1, 'los': 1, 'angeles': 1, 'what': 1, 'you': 1, 'hear': 1, 'forty': 1, 'or': 1, 'so': 1, 'notes': 1, 'horns': 1, 'form': 1, 'buglers': 1, 'dream': 1, 'also': 1, 'called': 1, 'leo': 1, 'arnaud': 1, 'clearly': 1, 'evident': 1, 'opening': 1, 'ceremony': 1, 'when': 1, 'everyone': 1, 'formally': 1, 'welcomes': 1, 'participants': 1, 'can': 1, 'begin': 1, 'here': 1, 'we': 1, 'find': 1, 'dramatic': 1, 'colourful': 1, 'nations': 1, 'each': 1, 'country': 1, 'go': 1, 'into': 1, 'venue': 1, 'sound': 1, 'countrys': 1, 'behind': 1, 'flags': 1, 'thus': 1, 'becoming': 1, 'representatives': 1, 'countries': 1})
    Ответ написан
    6 комментариев
  • Как можно укоротить этот код?

    ScriptKiddo
    @ScriptKiddo
    funcs = {
        '20': messages,
        '21': contin,
        ...
    }
    ...
        try:
            await funcs[payload](vk, peer_id)
        except Exception as e:
            print(str(e))
    Ответ написан
    Комментировать