Ответы пользователя по тегу Python
  • Замена числа. Есть функция?

    tsarevfs
    @tsarevfs
    C++ developer
    import random
    import math
    from collections import deque
    
    def digits2number(digits):
    	return int(''.join([str(d) for d in digits]))
    
    unic_digits = deque(range(0, 10))
    num_len = 1 + math.floor(math.log(random.randint(1, 10000), 10)) 
    random.shuffle(unic_digits)
    if (unic_digits[0] == 0):
    	unic_digits.rotate(random.randint(1, 9))
    
    print(digits2number(list(unic_digits)[:int(num_len)]))

    Как вариант можно генерировать случайное число сразу из уникальных цифр. Количество разрядов можно тоже выбирать случайно, но делать это нужно с осторожностью, иначе короткие числа будут встречаться слишком часто.
    num_len = 1 + math.floor(math.log(random.randint(1, 10000), 10))

    Так распределение будет похоже на нормальное (мы генерируем "честное" случайное число и берем количество цифр из него).

    upd: Еще более простой способ для фиксированной длины.
    import random
    import math
    
    def digits2number(digits):
      return int(''.join([str(d) for d in digits]))
    
    unic_digits = list(range(10))
    num_len = 4 
    while not unic_digits[0]:
    	unic_digits = random.sample(unic_digits, num_len) 
    
    print(digits2number(unic_digits))
    Ответ написан
    7 комментариев
  • Какой язык программирования подойдет для олимпиад?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Java лучший выбор для олимпиад. На втором месте С++, но только в том случае если вы уже его хорошо знаете (намного лучше Java). Слышал такую рекомендацию от Андрея Станкевича, а он кое-чего в этом понимает.
    Ответ написан
    2 комментария
  • Программирование с нуля. Как начать?

    tsarevfs
    @tsarevfs
    C++ developer
    Выбор языка программирования не важен. Хватит читать советы. Берите любое из Python, Java, C++ не ошибетесь. На python будет намного проще в самом начале. C++ даст наиболее полное понимание программированя (во многом через боль и унижение на начальном этапе).
    Начинайте читать книги (выбор книг для каждого языка освещен в сотнях вопросах на тостере), делать задания. Возможно стоит найти онлайн курс по языку.
    Для успеха, прежде всего, вам потребуется 100% уверенность что это вам нужно. Придется потратить массу усилий чтобы получить результат. Но мне кажется, это того стоит.
    Ответ написан
    Комментировать
  • Адекватная библиотека для связывания python и java?

    tsarevfs
    @tsarevfs
    C++ developer
    Находятся какие-то варианты.
    Ответ написан
    Комментировать
  • Как в Python перебирать элементы словаря в определенном порядке?

    tsarevfs
    @tsarevfs
    C++ developer
    Возможно вам подойдет collections.OrderedDict, он сохраняет порядок в котором ему дают элементы.
    Либо вы можете найти реализацию красно-черного дерева (FastRBTree например), которое хранит элементы в отсортированном виде.
    Ответ написан
    Комментировать
  • Что такое машинный эпсилон?

    tsarevfs
    @tsarevfs
    C++ developer
    Корректное определение звучит так:
    FLT_EPSILON: This is the difference between 1 and the smallest floating point number of type float that is greater than 1.

    Разница между 1 и минимальным чилом представимым в float большим 1. Говорить о том, что:
    Машинный эпсилон - это минимальная разница между числами, которую компьютер в состоянии различить.

    не правильно, потому, что как вы заметили, числа меньше FLT_EPSILON вполне представимы в float и вы вполне можете с ними работать.
    Дело в том, что плотность чисел представимых в float не постоянна. Расстояние между 2 такими соседними числами может быть меньше FLT_EPSILON в окресности нуля. И наоборот для значений близких к MAX_FLOAT разница между соседними значениями может быть больше 1.
    В python тип float соответствует типу двойной точности(64 бита) и в нем представимы все целые числа. Если же воспользоваться 32-битным вариантом, то можно получить "странное" поведение. Следующий код зацикливается.
    import sys
    from numpy import float32
    a = float32(sys.float_info.max)
    while a > sys.float_info.max - 10000:
       a -= 1
    Ответ написан
    1 комментарий
  • И снова: Как найти ошибку в коде Python?

    tsarevfs
    @tsarevfs
    C++ developer
    А почему вы `n` к int приводите, а `a` нет?

    А к вопросу "как найти?" - написать какую-нибудь функцию f() например:
    def f(a):
        return a + 1
    
    def main():
        d = {}
        n = int(input())
        x = 0
        while x < n:
            a = input()
            if a in d:
                print(d[a])
            else:
                print(f(a))
                d[a] = f(a)
            x += 1
    
    if __name__ == '__main__':
        main()

    И запустить.
    Ответ написан
  • Библиотеки построения графиков на python?

    tsarevfs
    @tsarevfs
    C++ developer
    Не уверен, что существует готовое решение. Но эту функциональность несложно реализовать на основе numpy и scipy
    1. Изменяйте данные и отрисовывайте график в собственном цикле.
    2, 3 Используйте функцию интерполяции.
    Ответ написан
    Комментировать
  • Почему уже задавленное условие попадает в else?

    tsarevfs
    @tsarevfs
    C++ developer
    У первого if нет else. Все следующие проверки выполняются при a=1 обычным образом. В таких случаях удобно использовать сокращенную запись else if — elif
    a = int(input())
    b = a % 10
    c = a % 100
    if a == 1:
        print(a, 'программист')
    elif (b == 1 and not c == 11 and not a == 1):
        print(a, 'программист')
    elif((b == 2 or b == 3 or b == 4) and not(c == 12 or c == 13 or c == 14)):
        print(a, 'программиста')
    else:
        print(a, 'программистов')
    Ответ написан
    Комментировать
  • Как правильно написать на Python?

    tsarevfs
    @tsarevfs
    C++ developer
    python file.py "start id1" "cmd 01" не подойдет?
    Ответ написан
    Комментировать
  • Как связать 2 клиента, подключенных к серверу на Python, между собой?

    tsarevfs
    @tsarevfs
    C++ developer
    Как вариант можно воспользоваться очередью сообщений. Клиент должен иметь интерфейс:
    *написать в очередь с именем X
    *забрать сообщение если оно есть
    *подписаться на обновления очереди X

    Создаем очередь для поиска игры. Подписываемся на нее и добавляем в нее себя. Когда нам приходит уведомление что некий Вася написал в эту очередь пытаемся с ним связаться напрямую или через персональную очередь Васи. Если Вася все еще свободен он отвечает ОК и вы начинаете игру, иначе ждем следующего подходящего игрока.
    В таком варианте "комната" это либо прямое TCP соединение либо пара личных очередей сообщений Васи и Пети которые играют между собой.
    Ответ написан
  • Что за библиотека simplegui с coursea для python, нужна ли она?

    tsarevfs
    @tsarevfs
    C++ developer
    Нет ничего плохого в том что библиотека их собственная. На практике вам придется достаточно часто осваивать новые библиотеки и это не должно быть для вас сложно. Кроме того, она основана на тех же принципах, что и "серьезные" GUI библиотеки и в дальнейшем разобраться с ними будет проще. Ну и никто не мешает вам использовать ее в своих несложных задачах.
    Ответ написан
    Комментировать
  • Как следует делать вызов C функций в Python?

    tsarevfs
    @tsarevfs
    C++ developer
    Под linux все примерно так же. Под разные системы код на C необходимо перекомпилировать, и без этого не обойтись.
    Ответ написан
    Комментировать
  • Как посчитать кол-во вхождений строк в файл?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Вы явно преждевременно оптимизируете. Решение на питоне, абсолютно в лоб, достаточно быстро работает на файле с 10M слов по 8 символов. К слову это всего 100 мегабайт. Даже если слов будет в 10 раз больше памяти хватит.
    import random, string
    from collections import defaultdict as ddict
    
    def randomword(length):
       return ''.join(random.choice(string.lowercase) for i in range(length))
    
    def main():
    	f = open('a.txt', 'w')
    	for i in range(10000000):
    		f.write(randomword(8) + '\n')
    
    	f.close()
    	print('gen finished')
    
    	d = ddict(int)
    	stat = ddict(int)
    	f = open('a.txt', 'r')
    	for w in f.readlines():
    		d[w] += 1
    		stat[d[w]] += 1
    		if d[w] > 1:
    			stat[d[w] - 1] -= 1
    
    	print stat
    
    
    
    
    if __name__ == '__main__':
    	main()
    Ответ написан
    Комментировать
  • Как на Python реализовать обратимое XOR-шифрование на основе ограниченного алфавита?

    tsarevfs
    @tsarevfs
    C++ developer
    Написал вариант который должен работать для любого алфавита. Однако должны выполняться условия:
    1)размер алфавита - степень двойки;
    2)изначальное сообщение и ключ состоят из символов этого алфавита.

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

    tsarevfs
    @tsarevfs
    C++ developer
    На питоне будет проще. Гуглится добавление иконки в трей, ну и в колбеке делаете, то что руками прописывали.
    Ответ написан
    3 комментария
  • Заработать на программировании

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Тебе намного выгодней вкладывать силы в обучение. Скажем, если научишься побеждать в олимпиадах, то вполне реально поступить в хороший вуз в Москве или Питере, первые пару курсов жить на стипендию, а потом пойти работать в Яндекс или еще куда нибудь.
    читайте:
    Т. Кормен "Алгоритмы построение и анализ" (За лето первые 100 страниц - уже здорово)
    Тренируйтесь:
    acmp.ru/
    Пишите для себя: почему бы не решать домашние задания по алгебре на python
    Подумайте о том, чтобы провести следующее лето в ЛКШ
    Ответ написан
    2 комментария
  • Как создать матрицу (шахматной доски) на Python?

    tsarevfs
    @tsarevfs
    C++ developer
    Не уверен, что это работает, но суть должна быть понятна.
    first_black = x1 % 2 == y1 % 2
    second_black = x2 % 2 == y2 % 2
    
    print "yes" if first_black == second_black else "no"
    Ответ написан
    Комментировать
  • Как выполнить скрипт на python?

    tsarevfs
    @tsarevfs
    C++ developer
    Скрипт кривой.
    if '<HTML>' in f1.read():
        f1.close() #закрыть файл перед удалением
        os.remove('pages/' + str(scn) + '_' + str(current_page) + '.pdf')

    Так все работает. Питон версии 2.7 (не 3, это важно)
    Ответ написан
    Комментировать