Найти - Пользователи
Полная версия: Генерация строки со случайными символами
Начало » Python для новичков » Генерация строки со случайными символами
1
jon34
Есть набор символов и для каждого задана вероятность его появления. На основе этих данных нужно построить строку. Подскажите как это можно сделать, пока просто не понимаю по какому алгоритму это можно сделать.
doza_and
Это задача на генерацию дискретной случайной величины
генерируете случайное число от 0 до 1 на этом отрезке выбираете интервалы пропорциональные вероятности события и смотрите в какой интервал попала реализация.
scidam
Если вероятности заданы “не очень точно” (например, с точностью до 2-х- десятичных знаков), можно использовать такое решение:

 import random
probs = {'A': 0.3, 'B': 0.4, 'C': 0.3}
def get_random(probs):
    return random.choice(sum([[key] * int(probs[key] * 100) for key in probs], []))
yourstrlen = 20
yourstr = ''.join([get_random(probs) for k in range(yourstrlen)])



По сути, это генерация массива из 100 элементов, где 30 - A, 40 - B, 30 - C и случайный выбор одного элемента из этого массива. Далее, строим строку, yourstr, длиной, допустим 20.

doza_and
scidam
использовать такое решение:
У такого решения есть конструктивный недостаток. Перегенерация массива символов при каждом выборе буквы. Это можно поправить если передать длину строки вторым аргументом и делать всю строку внутри функции. Но я думаю генератор последовательности букв более в духе питона.

 def lett_seq(prob_dict):
    ....
    while True:
     ....
         yield next_letter
jon34
Огромное спасибо. Оформил код вот так:
 def get_symbol(alphabet: dict):
    seq = sum([[key] * alphabet[key] for key in alphabet], [])
    while True:
        yield random.choice(seq)
 
 
def generate_str(alphabet: dict, str_len: int):
    symbol = get_symbol(alphabet)
    return ''.join([next(symbol) for _ in range(str_len)])
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB