Как в питоне задать рандомную строку
Перейти к содержимому

Как в питоне задать рандомную строку

  • автор:

Как сгенерировать случайную строку в Python

Случайные строки и числа полезны, когда дело касается безопасности. В информатике предсказуемые объекты менее безопасны, и наоборот, менее предсказуемые элементы более безопасны. Когда мы подписываемся на услуги, нам нужно предоставить пароль. Мы можем использовать эти случайные строки в качестве пароля, который менее предсказуемы и более безопасен.

Python предоставляет несколько пакетов, которые работают со случайной строкой, числами и даже криптографией.

Создать случайную строку в Python

Чтобы сгенерировать случайную строку в Python, используйте модуль строки и метод random.choices().

Строковый модуль в Python содержит различные строковые константы, включая символы ASCII для всех случаев. Он также включает отдельные константы для прописных и строчных букв, цифр и специальных символов.

Модуль random в Python выполняет случайные генерации.

import random import string def generate_random_string(length): letters = string.ascii_lowercase rand_string = ''.join(random.choice(letters) for i in range(length)) print("Random string of length", length, "is:", rand_string) generate_random_string(8) 
Random string of length 8 is: nwmqqxyf 

В этом примере мы генерируем случайную строку на основе длины, которую мы передаем функции.

Внутри функции мы сгенерировали случайную строку с комбинацией нижнего регистра, а затем использовали константу string.ascii_letters. Константа string.ascii_letters включает все строчные и прописные буквы.

Чтобы сгенерировать строку со всеми строчными буквами, используйте свойство string.ascii_lowercase.

На следующем шаге запустите цикл for n количество раз, что является длиной строки, чтобы выбрать один символ из строковой константы с помощью метода random.choice(), присоединить его к строковой переменной и использовать join( ) для формирования случайной строки.

Давайте передадим 16 в качестве длины, и он сгенерирует случайную строку длиной 16 символов.

import random import string def generate_random_string(length): letters = string.ascii_lowercase rand_string = ''.join(random.choice(letters) for i in range(length)) print("Random string of length", length, "is:", rand_string) generate_random_string(16) 
Random string of length 16 is: oxepenikhgjmhknp 

Сгенерировать случайную строку с прописными буквами

Чтобы сгенерировать строку со всеми прописными буквами, используйте свойство string.ascii_uppercase.

import random import string def generate_random_string(length): letters = string.ascii_uppercase rand_string = ''.join(random.choice(letters) for i in range(length)) print("Random string of length", length, "is:", rand_string) generate_random_string(16) 
Random string of length 16 is: MAWNYZRAVTHHGUVX 

Каждый раз, когда вы запускаете файл, вы будете получать разные результаты.

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

Вы можете сгенерировать случайную строку только из определенных букв, вместо записи строки .ascii_uppercase, здесь вам нужно написать конкретную строку, из которой вам нужно сгенерировать случайную строку.

Кроме того, вам не нужен строковый модуль Python, потому что мы используем определенную строку.

import random def generate_random_string(length): letters = 'bobbyelevenmilliehopperjane' rand_string = ''.join(random.choice(letters) for i in range(length)) print("Random string of length", length, "is:", rand_string) generate_random_string(16) 
Random string of length 16 is: leerljlbvmpelony 

Вы можете видеть, что все буквы взяты из предоставленной строки.

Создать случайную строку без повторяющихся символов

Функция random.choice() может принимать повторяющиеся символы, но метод random.sample() не может принимать повторяющиеся символы, поэтому мы можем использовать метод random.sample() для генерации случайной строки.

import random import string def generate_random_string(length): letters = string.ascii_lowercase rand_string = ''.join(random.sample(letters, length)) print("Random string of length", length, "is:", rand_string) generate_random_string(16) 
Random string of length 16 is: gvekicdsfmrxbuyj 

Создать случайную буквенно-цифровую строку в Python

Чтобы сгенерировать буквенно-цифровую случайную строку в Python, используйте константы string.ascii_letters и string.digits, чтобы получить комбинации букв и цифр.

import random import string def generate_alphanum_random_string(length): letters_and_digits = string.ascii_letters + string.digits rand_string = ''.join(random.sample(letters_and_digits, length)) print("Alphanum Random string of length", length, "is:", rand_string) generate_alphanum_random_string(16) 
Alphanum Random string of length 16 is: n7b1K3wavxXrDdjO 

Использование secrets.choice()

Python предоставляет пакет secrets для генерации криптографически более безопасных случайных чисел. У метода secrets.choice() есть внутренний алгоритм, построенный таким образом, что он генерирует менее предсказуемые случайные числа.

import secrets import string def generate_alphanum_crypt_string(length): letters_and_digits = string.ascii_letters + string.digits crypt_rand_string = ''.join(secrets.choice( letters_and_digits) for i in range(length)) print("Cryptic Random string of length", length, "is:", crypt_rand_string) generate_alphanum_crypt_string(16) 
Cryptic Random string of length 16 is: Pq9hga3IyExXKVhX 

Python — генерация случайной строки

Часто в проекте необходима генерация случайной строки. Например в OAuth случайная строка, которая генерируется при каждом запросе, используется для подтверждения уникальности аапроса.

В Python генерация случайной строки, состоящая только из ASCII символов верхнего регистра, может быть выполнена так:

from random import choice from string import ascii_uppercase print(''.join(choice(ascii_uppercase) for i in range(12)))
QPUPZVVHUNSN EFJACZEBYQEB QBQJJEEOYTZY EOJUSUEAJEEK QWRWLIWDTDBD 

Для генерации случайной строки из любых ASCII символов, используйте следующий код:

from random import choice from string import ascii_letters print(''.join(choice(ascii_letters) for i in range(12)))

Генерация случайной строки в Python 3

Есди нужна строка длиной больше 12 символов, замените 12 на любое число.

Генерация случайной строки только из цифр в Python

Если вам нужна случайная строка, состоящая только из цифр:

from random import choice from string import digits print(''.join(choice(digits) for i in range(12)))
960405692468 476412735488 745098255209 

Python 3: Генерация случайных чисел (модуль random)¶

Python порождает случайные числа на основе формулы, так что они не на самом деле случайные, а, как говорят, псевдослучайные [1]. Этот способ удобен для большинства приложений (кроме онлайновых казино) [2].

[2] Доусон М. Программируем на Python. — СПб.: Питер, 2014. — 416 с.: ил. — 3-е изд

Модуль random позволяет генерировать случайные числа. Прежде чем использовать модуль, необходимо подключить его с помощью инструкции:

import random 

random.random¶

random.random() — возвращает псевдослучайное число от 0.0 до 1.0

random.random() 0.07500815468466127 

random.seed¶

random.seed() — настраивает генератор случайных чисел на новую последовательность. По умолчанию используется системное время. Если значение параметра будет одиноким, то генерируется одинокое число:

random.seed(20) random.random() 0.9056396761745207 random.random() 0.6862541570267026 random.seed(20) random.random() 0.9056396761745207 random.random() 0.7665092563626442 

random.uniform¶

random.uniform(, ) — возвращает псевдослучайное вещественное число в диапазоне от до :

random.uniform(0, 20) 15.330185127252884 random.uniform(0, 20) 18.092324756265473 

random.randint¶

random.randint(, ) — возвращает псевдослучайное целое число в диапазоне от до :

random.randint(1,27) 9 random.randint(1,27) 22 

random.choince¶

random.choince() — возвращает случайный элемент из любой последовательности (строки, списка, кортежа):

random.choice('Chewbacca') 'h' random.choice([1,2,'a','b']) 2 random.choice([1,2,'a','b']) 'a' 

random.randrange¶

random.randrange(, , ) — возвращает случайно выбранное число из последовательности.

random.shuffle¶

random.shuffle() — перемешивает последовательность (изменяется сама последовательность). Поэтому функция не работает для неизменяемых объектов.

List = [1,2,3,4,5,6,7,8,9] List [1, 2, 3, 4, 5, 6, 7, 8, 9] random.shuffle(List) List [6, 7, 1, 9, 5, 8, 3, 2, 4] 

Вероятностные распределения¶

random.triangular(low, high, mode) — случайное число с плавающей точкой, low ≤ N ≤ high . Mode — распределение.

random.betavariate(alpha, beta) — бета-распределение. alpha>0 , beta>0 . Возвращает от 0 до 1.

random.expovariate(lambd) — экспоненциальное распределение. lambd равен 1/среднее желаемое. Lambd должен быть отличным от нуля. Возвращаемые значения от 0 до плюс бесконечности, если lambd положительно, и от минус бесконечности до 0, если lambd отрицательный.

random.gammavariate(alpha, beta) — гамма-распределение. Условия на параметры alpha>0 и beta>0 .

random.gauss(значение, стандартное отклонение) — распределение Гаусса.

random.lognormvariate(mu, sigma) — логарифм нормального распределения. Если взять натуральный логарифм этого распределения, то вы получите нормальное распределение со средним mu и стандартным отклонением sigma . mu может иметь любое значение, и sigma должна быть больше нуля.

random.normalvariate(mu, sigma) — нормальное распределение. mu — среднее значение, sigma — стандартное отклонение.

random.vonmisesvariate(mu, kappa) — mu — средний угол, выраженный в радианах от 0 до 2π, и kappa — параметр концентрации, который должен быть больше или равен нулю. Если каппа равна нулю, это распределение сводится к случайному углу в диапазоне от 0 до 2π.

random.paretovariate(alpha) — распределение Парето.

random.weibullvariate(alpha, beta) — распределение Вейбулла.

Примеры¶

Генерация произвольного пароля¶

Хороший пароль должен быть произвольным и состоять минимум из 6 символов, в нём должны быть цифры, строчные и прописные буквы. Приготовить такой пароль можно по следующему рецепту:

import random # Щепотка цифр str1 = '123456789' # Щепотка строчных букв str2 = 'qwertyuiopasdfghjklzxcvbnm' # Щепотка прописных букв. Готовится преобразованием str2 в верхний регистр. str3 = str2.upper() print(str3) # Выведет: 'QWERTYUIOPASDFGHJKLZXCVBNM' # Соединяем все строки в одну str4 = str1+str2+str3 print(str4) # Выведет: '123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM' # Преобразуем получившуюся строку в список ls = list(str4) # Тщательно перемешиваем список random.shuffle(ls) # Извлекаем из списка 12 произвольных значений psw = ''.join([random.choice(ls) for x in range(12)]) # Пароль готов print(psw) # Выведет: '1t9G4YPsQ5L7'

Этот же скрипт можно записать всего в две строки:

import random print(''.join([random.choice(list('123456789qwertyuiopasdfghjklzxc vbnmQWERTYUIOPASDFGHJKLZXCVBNM')) for x in range(12)])) 

Данная команда является краткой записью цикла for, вместо неё можно было написать так:

import random psw = '' # предварительно создаем переменную psw for x in range(12): psw = psw + random.choice(list('123456789qwertyuiopasdfgh jklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM')) print(psw) # Выведет: Ci7nU6343YGZ 

Данный цикл повторяется 12 раз и на каждом круге добавляет к строке psw произвольно выбранный элемент из списка.

Ссылки¶

  • Официальная документация по модулю random (англ.)
  • Python 3 для начинающих: Модуль random
  • Модуль random — генерация случайных чисел
  • Безопасность случайных чисел в Python

Генерация рандомной строки

Меня интересует, как можно генерировать строку вида sa32Asf7w1 с помощью библиотеки random в python. Первые 4 символа — рандомный набор букв и цифр, с 6 по 10 то же самое. 5 символ — рандомная заглавная буква.

Отслеживать
19.8k 6 6 золотых знаков 22 22 серебряных знака 56 56 бронзовых знаков
задан 29 окт 2020 в 17:53
135 1 1 серебряный знак 8 8 бронзовых знаков
Используйте random.choices
29 окт 2020 в 18:05

4 ответа 4

Сортировка: Сброс на вариант по умолчанию

как вариант — сделайте словарь букв и цифр и выбирайте оттуда, а 5 символ выберите из отдельного словаря (где только большие буквы) или из того же словаря, только с границами, соответствующими большие буквы

итоговый вариант:

import random import string text = [random.choice(string.ascii_lowercase + string.digits if i != 5 else string.ascii_uppercase) for i in range(10)] print(''.join(text)) 
import random letters = ['A', 'B', 'C', 'a', 'b', 'c', '1', '2', '3'] text = [letters[random.randint(0, len(letters))] for _ in range(10)] text[5] = letters[random.randint(0, 3)] print(''.join(text)) 

да, через choice компактнее код

import random text = [random.choice('abc123') for _ in range(10)] text[5] = random.choice('ABC') print(''.join(text)) 
text = [random.choice('abc123') if i != 5 else random.choice('ABC') for i in range(10)] print(''.join(text)) 

или так (еще на длине немного сэкономить) 🙂 :

text = [random.choice('abc123' if i != 5 else 'ABC') for i in range(10)] 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *