Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/40: Рейтинг темы: голосов - 40, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 28.01.2020
Сообщений: 13

Генерация паролей

03.03.2020, 15:19. Показов 8460. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Требуется по запросу выдавать N различных паролей длиной M символов, состоящих из строчных и прописных латинских букв и цифр, кроме тех, которые легко перепутать между собой: «l» (L маленькое), «I» (i большое), «1» (цифра), «o» и «O» (большая и маленькая буквы) и «0» (цифра).

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

Решение должно содержать две функции: вспомогательную generate_password(m), возвращающую случайный пароль длиной m символов, и основную main(n, m), возвращающую список из n различных паролей, каждый длиной m символов.

Будем считать, что параметры n и m всегда таковы, что требуемые пароли возможно сгенерировать.

написал такой код и столкнулся с ограничением по времени, кто знает, как оптимизировать?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import random
 
 
def generate_password(m):
    text1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'm', 'n',
             'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
             'x', 'y', 'z']
    text2 = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K',
             'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U',
             'V', 'W', 'X', 'Y', 'Z']
    text3 = ['2', '3', '4', '5', '6', '7', '8', '9']
    text = text1 + text2 + text3
    s = random.choice(text1) + random.choice(text2) + random.choice(text3)
    while len(s) != m:
        r = random.choice(text)
        if r not in s:
            s = s + r
    return s
 
 
def main(n, m):
    passwords = []
    while len(passwords) < n:
        p = generate_password(m)
        if p not in passwords:
            passwords.append(p)
    return passwords
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.03.2020, 15:19
Ответы с готовыми решениями:

Генерация паролей
Требуется по запросу выдавать N различных паролей длиной M символов, состоящих из строчных и прописных латинских букв и цифр,...

Генерация паролей, проблема с выводом
Есть код, но ругается на вывод. Ошибка Traceback (most recent call last): File &quot;test.py&quot;, line 13, in &lt;module&gt; n, m...

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

2
14 / 13 / 1
Регистрация: 18.12.2018
Сообщений: 422
03.03.2020, 15:40
Можешь попробовать сначала объявить пустой список для пароля, потом циклом for i in range(m), где m длина символов, и в этом цикле с append() добавлять в этот список случайные элементы из text1, text2, text3
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
03.03.2020, 16:04
Лучший ответ Сообщение было отмечено matmercs как решение

Решение

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

Python
1
2
3
4
while len(s) != m:
        r = random.choice(text)
        if r not in s:
            s = s + r
Решение:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# -*- coding: utf-8 -*-
import random
 
 
def generate_password(m: int) -> str:
    small_letters = "abcdefghjkmnpqrstuvwxyz"
    big_letters = "ABCDEFGHJKLMNPQRSTUVWXYZ"
    digits = "23456789"
    symbols = small_letters + big_letters + digits
 
    password = random.choice(small_letters) + random.choice(big_letters) + random.choice(digits)
    while len(password) < m:
        password += random.choice(symbols)
    return password
 
def main(n: int, m: int) -> list:
    passwords = []
    while len(passwords) < n:
        password = generate_password(m)
        if password not in passwords:
            passwords.append(password)
    return passwords
40 паролей в длину 100 символов, за 300мс.

Добавлено через 6 минут
UPD:

Так будет скорее всего правильнее:
Кликните здесь для просмотра всего текста

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# -*- coding: utf-8 -*-
import random
 
 
def generate_password(m: int) -> str:
    small_letters = "abcdefghjkmnpqrstuvwxyz"
    big_letters = "ABCDEFGHJKLMNPQRSTUVWXYZ"
    digits = "23456789"
    symbols = small_letters + big_letters + digits
 
    password = [random.choice(small_letters), random.choice(big_letters), random.choice(digits)]
    while len(password) < m:
        password.append(random.choice(symbols))
    random.shuffle(password)
    return "".join(password)
 
def main(n: int, m: int) -> list:
    passwords = []
    while len(passwords) < n:
        password = generate_password(m)
        if password not in passwords:
            passwords.append(password)
    return passwords
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.03.2020, 16:04
Помогаю со студенческими работами здесь

Много паролей
Привет, как внести в правильные пароли множество значений(8 строчка)? Через or не получается, он начинает пропускать по любому значению. ...

Генератор паролей
Всем Здравствуйте , не могли бы вы засунуть мой генератор паролей в класс , заранее спасибо import random chars =...

Генератор паролей
Требуется по запросу выдавать N различных паролей длиной M символов, состоящих из строчных и прописных латинских букв и цифр, кроме тех,...

Генератор паролей
Помогите составить прогу... Пароль должен состоять из 6 знаков. 1)Прервые два знака (b1, b2)- случайные заглавные буквы английского...

Генератор паролей
Здравствуйте, как сделать генератор паролей с условием указанным в скриншотах?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
[В процессе разработки] SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru