Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
14 / 11 / 3
Регистрация: 12.04.2018
Сообщений: 51

Подсчет "неправильных" паролей

04.11.2018, 21:33. Показов 3208. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, я решил написать программу, которая должна подсчитать количество "неправильных" паролей(которые не подходят по определенным критериям) с помощью блоков try...except, однако начав реализовывать у меня появились трудности
с самим подсчетом
Вот код:
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
44
45
46
47
48
49
50
51
52
53
class PasswordError(Exception):
    pass
 
 
class LengthError(PasswordError):  # если длина пароля меньше 9 символов
    pass
 
 
class LetterError(PasswordError):  # если в пароле все символы одного регистра
    pass
 
 
class DigitError(PasswordError):  # если в пароле нет ни одной цифры
    pass
 
 
class SequenceError(PasswordError):  # три символа стоящиее рядом
    pass
 
class WordError(PasswordError): # пароль есть в списке словарных слов 
    pass
 
k_LengthError = 0
qwe = ['QWE', 'WER', 'ERT', 'RTY', 'TYU', 'YUI', 'UIO', 'ASD', 'SDF',
       'DFG', 'FGH', 'GHJ', 'HJK', 'JKL',
       'ZXC', 'XCV', 'CVB', 'VBN', 'BNM', 'ЙЦУ', 'ЦУК', 'УКЕ', 'КЕН',
       'ЕНГ', 'НГШ', 'ГШЩ', 'ШЩЗ', 'ЩЗХ',
       'ЗХЪ', 'ФЫВ', 'ЫВА', 'ВАП', 'АПР', 'ПРО', 'РОЛ', 'ОЛД', 'ЛДЖ',
       'ДЖЭ', 'ЯЧС', 'ЧСМ',
       'СМИ', 'МИТ', 'ИТЬ', 'ТЬБ', 'ЬБЮ', 'ЖЭЁ']
 
passwords1 = open("top 10000 passwd.txt").read().split()
passwords2 = open("._top 10000 passwd.txt").read().split()
dictionary_words1= open("top-9999-words.txt").read().split()
dictionary_words2 = open("._top-9999-words.txt").read().split()
passwords = passwords1 + passwords2
dictionary_words = dictionary_words1 + dictionary_words2
for password in passwords:
    try:
        if len(password) < 9:
            k_LengthError += 1
            raise LengthError('LengthError')
        elif not any([x.isupper() for x in password]):
            raise LetterError('LetterError')
        elif not any([x.isdigit() for x in password]):
            raise DigitError('DigitError')
        elif any([x for x in qwe if x in password.upper()]):
            raise SequenceError('SequenceError')
        elif password in dictionary_words:
            raise WordError("WordError")
    except LengthError:
        
print(k_LengthError)
и в 53 - ей строчке появились трудности
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.11.2018, 21:33
Ответы с готовыми решениями:

подсчет правильных и неправильных ответов в тесте
Здравствуйте. Я делаю подсчет правильных и не правильных ответов в тесте, но что то не получается. &lt;html&gt; &lt;head&gt; ...

Отслеживание и подсчет правильных и неправильных нажатий клавиш
Приветствую всех, кто решил откликнуться! Ситуация такая, есть текст в текстовом документе, он выводится в Label в формате бегущей строки....

Генераторы мастер паролей на биосы (сброс неизвестных паролей биоса)
Народ, кто каким пользуется например вот https://bios-pw.org

9
119 / 103 / 53
Регистрация: 13.04.2014
Сообщений: 233
04.11.2018, 21:51
У вас блок except пустой. Там надо что-то написать. Либо код обработки ошибки (что обычно и пишут в этом блоке), либо (на худой конец), если ничего делать не нужно, то ключевое слово pass.
1
14 / 11 / 3
Регистрация: 12.04.2018
Сообщений: 51
05.11.2018, 11:53  [ТС]
Точно pass, как раз вспомнил, спасибо.

Добавлено через 3 часа 20 минут
orAnd
А можно но ли с помощью except подсчитать кол-во ошибок?
0
151 / 86 / 35
Регистрация: 05.08.2017
Сообщений: 257
05.11.2018, 12:22
Цитата Сообщение от Glander Посмотреть сообщение
А можно но ли с помощью except подсчитать кол-во ошибок?
Перед циклом вводишь переменную и в блоке except увеличиваешь на 1
1
14 / 11 / 3
Регистрация: 12.04.2018
Сообщений: 51
05.11.2018, 12:43  [ТС]
Resistence я так пробовал но ничего не вышло:
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
class PasswordError(Exception):
    pass
 
 
class LengthError(PasswordError):  # если длина пароля меньше 9 символов
    pass
 
 
class LetterError(PasswordError):  # если в пароле все символы одного регистра
    pass
 
 
class DigitError(PasswordError):  # если в пароле нет ни одной цифры
    pass
 
 
class SequenceError(PasswordError):  # три символа стоящиее рядом
    pass
 
 
class WordError(PasswordError):
    pass
 
 
k_LengthError, k_LetterError, k_DigitError, k_SequenceError, k_WordError, k = 0, 0, 0, 0, 0, 0
qwe = ['QWE', 'WER', 'ERT', 'RTY', 'TYU', 'YUI', 'UIO', 'ASD', 'SDF',
       'DFG', 'FGH', 'GHJ', 'HJK', 'JKL',
       'ZXC', 'XCV', 'CVB', 'VBN', 'BNM', 'ЙЦУ', 'ЦУК', 'УКЕ', 'КЕН',
       'ЕНГ', 'НГШ', 'ГШЩ', 'ШЩЗ', 'ЩЗХ',
       'ЗХЪ', 'ФЫВ', 'ЫВА', 'ВАП', 'АПР', 'ПРО', 'РОЛ', 'ОЛД', 'ЛДЖ',
       'ДЖЭ', 'ЯЧС', 'ЧСМ',
       'СМИ', 'МИТ', 'ИТЬ', 'ТЬБ', 'ЬБЮ', 'ЖЭЁ']
 
passwords = open("top 10000 passwd.txt").read().split()
dictionary_words = open("top-9999-words.txt").read().split()
for password in passwords:
    try:
        if len(password) < 9:
            raise LengthError('LengthError')
        elif not any([x.isupper() for x in password]):
            raise LetterError('LetterError')
        elif not any([x.isdigit() for x in password]):
            raise DigitError('DigitError')
        elif any([x for x in qwe if x in password.upper()]):
            raise SequenceError('SequenceError')
        elif password in dictionary_words:
            raise WordError
    except LengthError:
        k_LetterError += 1
    except LetterError:
        k_LetterError += 1
    except DigitError:
        k_DigitError += 1
    except SequenceError:
        k_SequenceError += 1
    except WordError:
        k_WordError += 1
print('DigitError - ' + str(k_DigitError))
print('LengthError - ' + str(k_LengthError))
print('LetterError - ' + str(k_DigitError))
print('SequenceError - ' + str(k_SequenceError))
print('WordError - ' + str(k_WordError))
Вывод
DigitError - 0
LengthError - 0
LetterError - 0
SequenceError - 0
WordError - 0
Хотя должно примерно
DigitError - 8324
LengthError - 9845
LetterError - 10000
SequenceError - 120
WordError - 6071

Добавлено через 11 минут
Вот файлы:
https://yadi.sk/i/ih1I09NOxiq8QQ
https://yadi.sk/i/05YFw5YXHVnMAg
0
119 / 103 / 53
Регистрация: 13.04.2014
Сообщений: 233
05.11.2018, 14:20
Лучший ответ Сообщение было отмечено Glander как решение

Решение

У тебя описка в 49 строке. Там увеличивается не та переменная
Остальные не увеличиваются потому что в блоке try возбуждается одно исключение (до остальных elif'ов просто не доходит) и сразу перескакивает на блок except (там тоже ловится тоже одно исключение) поскольку все пароли возбуждают LengthError, остальные счётчики просто не увеличиваются. Вот слегка подредактированный вариант. В нём всё работает, но смысл try/except почти окончательно утрачивается. Возможно есть другой, более изящный вариант.
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
class PasswordError(Exception):
    pass
 
 
class LengthError(PasswordError):  # если длина пароля меньше 9 символов
    pass
 
 
class LetterError(PasswordError):  # если в пароле все символы одного регистра
    pass
 
 
class DigitError(PasswordError):  # если в пароле нет ни одной цифры
    pass
 
 
class SequenceError(PasswordError):  # три символа стоящиее рядом
    pass
 
 
class WordError(PasswordError):
    pass
 
 
k_LengthError, k_LetterError, k_DigitError, k_SequenceError, k_WordError, k = 0, 0, 0, 0, 0, 0
qwe = ['QWE', 'WER', 'ERT', 'RTY', 'TYU', 'YUI', 'UIO', 'ASD', 'SDF',
       'DFG', 'FGH', 'GHJ', 'HJK', 'JKL',
       'ZXC', 'XCV', 'CVB', 'VBN', 'BNM', 'ЙЦУ', 'ЦУК', 'УКЕ', 'КЕН',
       'ЕНГ', 'НГШ', 'ГШЩ', 'ШЩЗ', 'ЩЗХ',
       'ЗХЪ', 'ФЫВ', 'ЫВА', 'ВАП', 'АПР', 'ПРО', 'РОЛ', 'ОЛД', 'ЛДЖ',
       'ДЖЭ', 'ЯЧС', 'ЧСМ',
       'СМИ', 'МИТ', 'ИТЬ', 'ТЬБ', 'ЬБЮ', 'ЖЭЁ']
 
passwords = open("top 10000 passwd.txt").read().split()
dictionary_words = open("top-9999-words.txt").read().split()
for index, password in enumerate(passwords):
    try:
        if len(password) < 9:
            raise LengthError('LengthError')
    except LengthError:
        k_LengthError += 1
    try:
        if not any(x.isupper() for x in password):
            raise LetterError('LetterError')
    except LetterError:
        k_LetterError += 1
    try:
        if not any(x.isdigit() for x in password):
            raise DigitError('DigitError')
    except DigitError:
        k_DigitError += 1
    try:
        if any(x for x in qwe if x in password.upper()):
            raise SequenceError('SequenceError')
    except SequenceError:
        k_SequenceError += 1
    try:
        if password in dictionary_words:
            raise WordError
    except WordError:
        k_WordError += 1
print('DigitError - ' + str(k_DigitError))
print('LengthError - ' + str(k_LengthError))
print('LetterError - ' + str(k_DigitError))
print('SequenceError - ' + str(k_SequenceError))
print('WordError - ' + str(k_WordError))
Кстати генераторные выражения можно напрямую включать в такие функции вызываемые объекты как all, any, sum, tuple и т.п. (Сравни 43, 45 и 47 строки твоего и моего варианта.)
1
14 / 11 / 3
Регистрация: 12.04.2018
Сообщений: 51
05.11.2018, 14:55  [ТС]
orAnd, Огромное спасибо, так все понятно объясняешь)
0
119 / 103 / 53
Регистрация: 13.04.2014
Сообщений: 233
05.11.2018, 15:02
Пожалуйста! Но на самом деле я хотел бы объяснять ещё понятнее
1
14 / 11 / 3
Регистрация: 12.04.2018
Сообщений: 51
05.11.2018, 15:10  [ТС]
Небольшая поправочка: в 64 строчке вместо k_DigitError должно k_LetterError
0
119 / 103 / 53
Регистрация: 13.04.2014
Сообщений: 233
05.11.2018, 15:12
Ну я там копипастил, не заметил (как наверно и ты)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.11.2018, 15:12
Помогаю со студенческими работами здесь

Создать генератор паролей в котором можно указать длину пароля и количество паролей
Помогите пожалуйста! Задание: Нужно создать генератор паролей в котором можно указать длину пароля и количество паролей то есть длина...

Менеджер паролей браузера/Удаление паролей
Встал у меня вопрос о том чтобы распределить сайты и ресурсы по категориям. На некоторые сайты я ввожу пароль руками вообще. Некоторые...

2 неправильных ответа
ПРОШУ ПОМОГИТЕ ОТЛАДИТЬ СРОЧНО.... Стало известно, что противник шифрует текст следующим образом. Сначала определяется количество букв в...

Защита от неправильных символов
Добрый день! Возможно ли как-то сделать невозможным ввод в строку цифр или пробелов? Или запретить ввод в float int букв? Спасибо.

Возвращение неправильных значений
Добрый день Написал программу для умножения двух матриц. Но к сожалению метод возвращает мне нули. А на самом деле не должна. ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru