Генерация последовательностей случайных объектов (равновероятных) на Python

Алгоритм работы программы

  1. Программа запрашивает, какой тип данных хочет получить пользователь — целые числа, числа с плавающей точкой, символы (буквы), слова (в данном случае, наборы случайных символов).
  2. Вызывается соответствующая функция, которая возвращает либо список случайных объектов, указанного типа, либо строку из случайных символов. При выполнении кода функций у пользователя запрашиваются дополнительные сведения о желаемой последовательности: количество объектов, нижняя и верхняя граница диапазона и другое.
  3. Полученная последовательность записывается в файл.

Как получить случайное число

Чтобы получить случайное целое число в заданном диапазоне я использовала следующую формулу. Додумалась до нее сама, так что возможно есть более элегантные решения (например, здесь использовать вместо функции int функцию round):

int(random.random() * (maximum - minimum + 1)) + minimum
  1. random.random() дает число с плавающей точкой в диапазоне от 0 до 0,999999… (единицу не включает), но при округлении ее можно получить.
  2. Если умножить это число на верхнюю границу диапазона, то получим дробные случайные числа от нуля до этого числа. Поскольку функция int просто отбрасывает дробную часть, то верхнюю границу получить нельзя.
  3. Если прибавить к верхней границе единицу, то получим дробные случайные числа от нуля до следующего за верхней границей числа. При отбрасывании дробной части сможем получать верхнюю границу.
  4. Если нижняя граница начинается не с нуля, то нужно из максимума вычесть минимум, чтобы вычислить диапазон. После преобразования в целое число минимум надо прибавить.

Исходный код программы

def list_random_integers():
    qty = int(input('Количество значений: '))
    minimum = int(input('Нижняя граница: '))
    maximum = int(input('Верхняя граница: '))
    sample = []
    for i in range(qty):
        sample.append(int(random.random() * (maximum - minimum + 1)) + minimum)
    return sample
 
def list_random_floats():
    qty = int(input('Количество значений: '))
    accuracy = int(input('Точность представления числа: '))
    minimum = float(input('Нижняя граница: '))
    maximum = float(input('Верхняя граница: '))
    sample = []
    for i in range(qty):
        num = random.random() * (maximum - minimum) + minimum
        num = round(num,accuracy)
        sample.append(num)
    return sample
 
def str_random_symbols():
    qty = int(input('Количество символов: '))
    symbols = ''
    for i in range(qty):
        num = int(random.random() * (122 - 97 + 1)) + 97
        symbols = symbols + chr(num)
    return symbols
 
def list_random_strings():
    qty = int(input('Количество слов: '))
    sample = []
    for i in range(qty):
        string = ''
        num = int(random.random() * (4 - 1 + 1)) + 1 #случайная длина слова
        j = 0
        while j < num:
            char = chr(int(random.random() * (105 - 97 + 1)) + 97)
            string = string + char
            j += 1
        sample.append(string)
    return sample
 
def write_in_file(t,sample):
    fname = input('Имя файла: ')
    f = open(fname,'w')
    if t != '3':
        for i in sample:
            f.write(str(i)+' ')
    else:
        f.write(sample)
    f.close()
 
import random
 
t = input('Целые числа(1), дробные числа(2), символы(3), слова(4): ')
if t == '1':
    sample = list_random_integers()
elif t == '2':
    sample = list_random_floats()
elif t == '3':
    sample = str_random_symbols()
elif t == '4':
    sample = list_random_strings()
write_in_file(t,sample)

  Работа с CSV строками в Python: чтение, запись и обработка данных
Оцените статью
( Пока оценок нет )
Поделиться с друзьями
Python для начинающих
Подписаться
Уведомить о
guest
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x