Модули «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)