Академия Eduson

Модули «random» и «string». Часть 2

 Модуль «random». Методы работы

 Установите соответствие между функцией и ее действием.

 Ответ: 

  • shuffle()     перемешивает содержимое списка;
  • choice()      возвращает ровно один случайный элемент списка, строки или кортежа;
  • sample()    возвращает несколько случайных элементов списка, строки, кортежа или множества

 Какое число может быть в переменной num после выполнения следующего кода:

import random

numbers = [1, 2, 3, 5, 7]

num = random.choice(numbers)

 Ответ:  3; 7;  5;  2; 1

 Какое число может быть в переменной num после выполнения следующего кода?:

import random

numbers = list(range(2, 10, 2))

num = random.choice(numbers)

 Ответ:  8;  6;  4;  2

 Какой список может храниться в переменной rand_numbers после выполнения следующего кода?:

import random

numbers = [1, 2, 4, 6, 7, 9]

rand_numbers = random.sample(numbers, 3)

 Ответ:  [6, 1, 4];   [7, 4, 2];   [1, 2, 6]

IP адрес состоит из четырех чисел из диапазона от 0 до 255 (включительно) разделенных точкой. Напишите функцию generate_ip(), которая с помощью модуля random генерирует и возвращает случайный корректный IP адрес.

from random import *

def generate_ip():
    ip = ''

    a= list(range(0, 256))

    for i in range(4):
        x = choice(a)
        ip += str(x) + '.'

    return ((str(ip).rstrip('.')))

 Или так:

from random import randrange as rr

def generate_ip():
    return f'{rr(256)}.{rr(256)}.{rr(256)}.{rr(256)}'

 Почтовый индекс в Латверии имеет вид: LetterLetterNumber_NumberLetterLetter где Letter – заглавная буква английского алфавита, Number – число от 0 до 99 (включительно). Напишите функцию generate_index(), которая с помощью модуля random генерирует и возвращает случайный корректный почтовый индекс Латверии.

from random import *
from string import ascii_uppercase as UP

def generate_index():
    return f'{choice(UP)}{choice(UP)}{randrange(100)}_{randrange(100)}{choice(UP)}{choice(UP)}'

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

import random

matrix = [[1, 2, 3, 4],
          [5, 6, 7, 8],
          [9, 10, 11, 12],
          [13, 14, 15, 16]]

random.shuffle(matrix)

 Напишите программу, которая с помощью модуля random генерирует 100 случайных номеров лотерейных билетов и выводит их каждый на отдельной строке. Обратите внимание, вы должны придерживаться следующих условий:

  • номер не может начинаться с нулей;
  • номер лотерейного билета должен состоять из 7 цифр;
  • все 100 лотерейных билетов должны быть различными.
from random import*

d = list(range(10))

jackpot = []

while len(jackpot) != 100:
    lot = sample(d, 7)
    if lot[0] != 0 and lot not in jackpot:
        jackpot.append(lot)

for x in jackpot:
    print(*x, sep='')

 Анаграмма – это слово образованное путём перестановки букв, составляющих другое слово. Например, слова пила и липа или пост и стопанаграммы. Напишите программу, которая считывает одно слово и выводит с помощью модуля random его случайную анаграмму.

from random import*

word = list(input())

shuffle(word)

print(*word, sep='')

 Для игры в бинго требуется карточка размером 5×5, содержащая различные (уникальные) целые числа от 1 до 75 (включительно), при этом центральная клетка является пустой (она заполняется числом 0).Напишите программу, которая с помощью модуля random генерирует и выводит случайную карточку для игры в бинго.

from random import*

n = 5

a = sample(range(1, 76), 25)

b_game = [[str(a.pop()).ljust(3) for _ in range(n)] for _ in range(n)]

b_game[2][2] = str(0).ljust(3)

[print(*row, sep='') for row in b_game]

 Напишите программу, которая случайным образом назначает каждому ученику его тайного друга, который будет вместе с ним решать задачи по программированию.
 На вход программе в первой строке подается число n – общее количество учеников. Далее идут n строк, содержащих имена и фамилии учеников.
 Программа должна вывести имя и фамилию ученика (в соответствии с исходным порядком) и имя и фамилию его тайного друга, разделённые дефисом.

n = int(input())

s = []
for _ in range(n):
    s.append(input())

for i in range(n):
    print(s[i], '-', s[i - 1])

 Напишите программу, которая с помощью модуля random генерирует n паролей длиной m символов, состоящих из строчных и прописных английских букв и цифр, кроме тех, которые легко перепутать между собой:

  • «l» (L маленькое);
  • «I» (i большое);
  • «1» (цифра);
  • «o» и «O» (маленькая и большая буквы);
  • «0» (цифра).
from random import*
from string import*

def g_p(length):
    s = list(ascii_letters + digits)
    s.remove('1')
    for x in s:
        if x in 'Oo0lI':
            s.remove(x)
    return sample(s, length)   

def g_s(count, length):
    x = []
    for i in range(count):

        x.append(g_p(length))
    return x

n, m = int(input()), int(input())

for x in g_s(n, m):
    print(*x, sep='')

 Напишите программу, которая с помощью модуля random генерирует n паролей длиной m символов, состоящих из строчных и прописных английских букв и цифр, кроме тех, которые легко перепутать между собой:

  • «l» (L маленькое);
  • «I» (i большое);
  • «1» (цифра);
  • «o» и «O» (большая и маленькая буквы);
  • «0» (цифра).

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

from random import*
from string import*

up = [с for с in ascii_uppercase if с not in 'OI']
low = [с for с in ascii_lowercase if с not in 'ol']
dig = list(digits[2:])
let = up + low + dig

def generate_password(length):
    result = [choice(i) for i in (up, low, dig)] + [choice(let) for _ in range(3, length)]
    shuffle(result)
    return ''.join(result)

def generate_passwords(count, length):
    result = set()
    while len(result) < count:
        result.add(generate_password(length))
    return list(result)

for i in generate_passwords(int(input()), int(input())):
    print(i)