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

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

19.04.2019, 23:45. Показов 39939. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru