Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/194: Рейтинг темы: голосов - 194, средняя оценка - 4.58
8 / 7 / 1
Регистрация: 09.06.2017
Сообщений: 34

Генератор визуально различимых паролей (A + B)

19.04.2019, 23:45. Показов 39683. Ответов 7
Метки нет (Все метки)

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

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

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

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

print("Случайный пароль из 7 символов:" , generate_password(7))
print("10 случайных паролей длиной 15 символов:")
print(*main(10, 15), sep="\n")

Формат вывода
Пример результатов:

Случайный пароль из 7 символов: A6fXxBh
10 случайных паролей длиной 15 символов:
JebgLW4Ndzkt6rU
Q3nbTS9ERguDy2e
E98heZH32fFGVTN
hJZ5bvCrny2RFEA
rumkV5WzSHKRA9q
3Yd7exfi6HBZ98y
aUWZgjDutswnHv7
vU2x7wNQHps4nmi
a8zn23vNGipJqk7
nkQ5hCetWJ3jHRF

Примечания
Возможно, вам пригодятся константы string.ascii_uppercase, string.ascii_lowercase и string.digits из модуля string.




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
28
29
30
from random import choice
 
 
def generate_password(m):
    a = ''
    lst = '23456789qwertyuipasdfghjkzxcvbnmQWERTYUPASDFGHJKLZXCVBNM'
    b = ''
    for i in range(m):
        if i != 0:
            while b in list(a):
                b = choice(lst)
            a += b
        else:
            b = choice(lst)
            a += b
    return a
 
 
def main(n, m):
    k = []
    h = ''
    for i in range(n):
        if i != 0:
            while h in k:
                h = generate_password(m)
            k.append(h)
        else:
            h = generate_password(m)
            k.append(h)
    return k


Ошибка
Traceback (most recent call last):
File "test.py", line 15, in <module>
check_password(generate_password(m), m)
File "test.py", line 10, in check_password
assert any(ch.isupper() for ch in password), "нет прописной буквы в пароле: " + password
AssertionError: нет прописной буквы в пароле: bei
make: *** [run] Error 1


Как это исправить?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.04.2019, 23:45
Ответы с готовыми решениями:

Генератор визуально различимых паролей (B)
Генератор визуально различимых паролей (B) Ограничение времени 5 секунд Ограничение памяти 64Mb Ввод стандартный ввод или...

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

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

7
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
20.04.2019, 01:10
Лучший ответ Сообщение было отмечено vladddddddddddd как решение

Решение

vladddddddddddd,
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import random, string
 
 
def generate_password(m):
  x = random.randint(1, m-2)
  y = random.randint(1, m - x - 1)
  z = m - x - y
  
  l = []
  
  i = 0
  while i < x:
    n = random.choice(string.digits)
    if n != '1' and n != '0':
      l.append(n)
      i += 1
  
  i = 0
  while i < y:
    u = random.choice(string.ascii_uppercase)
    if u != 'I' and u != 'O':
      l.append(u)
      i += 1
  
  i = 0
  while i < z:
    w = random.choice(string.ascii_lowercase)
    if w != 'l' and w != 'o':
      l.append(w)
      i += 1
      
  random.shuffle(l)
  return ''.join(l)
 
def main(n, m):
  list_of_passwords = []
  for i in range(n):
    list_of_passwords.append(generate_password(m))
  return list_of_passwords
  
print("Случайный пароль из 7 символов:" , generate_password(7))
print("10 случайных паролей длиной 15 символов:")
print(*main(10, 15), sep="\n")
Случайный пароль из 7 символов: 82T9p6X
10 случайных паролей длиной 15 символов:
S467w38697xg487
KHAWyZ3A7MffP6s
p7F5pxSqyK9vayj
96922p9T7752846
6Q7395997436t4P
r489g2d5Xz8h495
xm6rh6bv6zT8M4f
pq625QcG4Y79W98
yuh58er7fnftnrD
qqHHuPqku6VU9pM
1
38 / 36 / 2
Регистрация: 24.03.2020
Сообщений: 39
28.03.2020, 07:48
Если не проходит по PEP-8, то вот:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import random
import string
 
 
def generate_password(m):
    x = random.randint(1, m - 2)
    y = random.randint(1, m - x - 1)
    z = m - x - y
 
    lil = []
 
    i = 0
    while i < x:
        n = random.choice(string.digits)
        if n != '1' and n != '0':
            lil.append(n)
            i += 1
 
    i = 0
    while i < y:
        u = random.choice(string.ascii_uppercase)
        if u != 'I' and u != 'O':
            lil.append(u)
            i += 1
 
    i = 0
    while i < z:
        w = random.choice(string.ascii_lowercase)
        if w != 'l' and w != 'o':
            lil.append(w)
            i += 1
 
    random.shuffle(lil)
    return ''.join(lil)
 
 
def main(n, m):
    list_of_passwords = []
    for i in range(n):
        list_of_passwords.append(generate_password(m))
    return list_of_passwords
Но вылазит ошибка:
Вердикт
runtime-error
Лог компиляции
stdout:
/bin/sh ./build.sh 1>&2


stderr:
Время / Память
35ms / 4.26 MB
Номер теста
4
Ошибка
Traceback (most recent call last):
File "test.py", line 15, in <module>
check_password(generate_password(m), m)
File "test.py", line 6, in check_password
assert len(set(password)) == m, "повторяются символы в пароле: " + password
AssertionError: повторяются символы в пароле: 93JkVBSFFpPmiCTMwKSUGGZG96EV3P
make: *** [run] Error 1
Ввод
1 30
Ожидаемый результат
ok
Вывод
Makefile:5: recipe for target 'run' failed
Сообщение
Completion status: ABNORMAL_EXIT
Term sig: null
Error code: 2
0
2 / 1 / 1
Регистрация: 16.11.2019
Сообщений: 13
20.04.2020, 20:25
в Pycharm закинуть сложно? он pep8 исправляет
0
38 / 36 / 2
Регистрация: 24.03.2020
Сообщений: 39
11.05.2020, 19:34
А можешь скинуть как правильно? Пожалуйста...
0
48 / 44 / 4
Регистрация: 09.12.2019
Сообщений: 27
12.05.2020, 12:23
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
28
29
30
31
32
33
34
35
36
37
38
39
40
import random
 
st1 = ['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'p', 'a', 's', 'd', 'f', 'g',
       'h', 'j', 'k', 'z', 'x', 'c', 'v', 'b', 'n', 'm']
st2 = ['Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'P', 'A', 'S', 'D', 'F', 'G', 'H',
       'J', 'K', 'L', 'Z', 'X', 'C', 'V', 'B', 'N', 'M']
st3 = ['2', '3', '4', '5', '6', '7', '8', '9']
st4 = st1 + st2 + st3
 
 
def generate_password(m):
    pas = []
    a1 = random.choice(st1)
    a2 = random.choice(st2)
    a3 = random.choice(st3)
 
    if a1 not in pas:
        pas.append(a1)
    if a2 not in pas:
        pas.append(a2)
    if a3 not in pas:
        pas.append(a3)
    for i in range(0, m - 3):
        while True:
            a = random.choice(st4)
            if a not in pas:
                pas.append(a)
                break
            else:
                continue
    random.shuffle(pas)
    return ''.join(pas)
 
 
def main(n, m):
    list_passw = set()
    while len(list_passw) < n:
        if generate_password(m) not in list_passw:
            list_passw.add(generate_password(m))
    return list_passw
3
5 / 5 / 0
Регистрация: 07.11.2021
Сообщений: 21
06.03.2022, 22:58
from random import choice


from random import shuffle


mal = 'abcdefghijkmnpqrstuvwxyz'
bolsh = 'ABCDEFGHJKLMNPQRSTUVWXYZ'
cifr = '23456789'
Bukv = 'abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQ RSTUVWXYZ23456789'


def generate_password(m):
c = ''
k = 0
for i in range(m):
if k == 0:
c += choice(cifr)
k += 1
elif k == 1:
c += choice(bolsh)
k += 1
elif k == 2:
c += choice(mal)
k += 1
j = list(Bukv).copy()
del j[j.index(c[0])]
del j[j.index(c[2])]
del j[j.index(c[1])]
else:
ma = choice(Bukv)
if ma not in c:
c += ma
else:
while True:
ma = choice(Bukv)
if ma not in c:
c += ma
break
c = list(c)
shuffle(c)
c = ''.join(c)
return c


def main(n, m):
a = []
for i in range(n):
g = generate_password(m)
if g not in a:
a.append(g)
else:
while True:
g = generate_password(m)
if g not in a:
a.append(g)
break
return a
0
225 / 15 / 3
Регистрация: 07.04.2022
Сообщений: 74
27.04.2022, 22:58
Если это задача, то всякие финтифлюшки понятны. А если для личного использования, как я себе делал, то лучше так:

Python
1
2
3
4
5
6
import random
psw = ''
for x in range(5): # сколько надо паролей
    psw = random.sample(list('2345679'),4) + random.sample(list('qwertyuiopasdfghjkzxcvbnmQWERTYUPASDFGHJKLZXCVNM'),10) + random.sample(list('*_+=?%#@'),1)
    random.shuffle(psw)
    print(''.join(psw))
Я еще исключил B и 8 помимо указанных в задании символов.
4 цифры, 10 букв, 1 символ - все неповторяющиеся. Легко задать другие соотношения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.04.2022, 22:58
Помогаю со студенческими работами здесь

Генератор паролей, функция генератор
import random from string import ascii_lowercase, ascii_uppercase random.seed(1) def randompassword(n): chars =...

Генератор паролей
Написать программу-генератор паролей в соответствии с требованиями. Программа должна выполнять следующие действия: а. Ввод...

Генератор паролей
Написать программу-генератор паролей в соответствии с требованиями. Программа должна выполнять следующие действия: а. Ввод...

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

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru