@Evilitself
Программист с большим будущим xD

Почему не работает код?

Написал такой код для генерации пароля, но не понимаю почему выдает ошибку.

import random

DIGITS = '0123456789'
LOWERCASE_LETTERS = 'abcdefghijklmnopqrstuvwxyz'
UPPERCASE_LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
PUNCTUATION = '!#$%&*+-=?@^_'

chars = ''

len_pass_all = int(input('Укажите количество паролей для генерации: '))
len_pass_one = int(input('Укажите длину одного пароля: '))
len_pass_numbers = input('Включать ли цифры 0123456789? ')
len_pass_byk = input('Включить ли прописные буквы ABCDEFGHIJKLMNOPQRSTUVWXYZ? ')
len_pass_byk2 = input('Включать ли строчные буквы abcdefghijklmnopqrstuvwxyz? ')
len_pass_symbols = input('Включать ли символы !#$%&*+-=?@^_? ')
len_pass_no_symbols = input('Исключать ли неоднозначные символы il1Lo0O? ')

if len_pass_numbers.lower() == 'Да':
    chars += DIGITS
if len_pass_byk.lower() == 'Да':
    chars += UPPERCASE_LETTERS
if len_pass_byk2.lower() == 'Да':
    chars += LOWERCASE_LETTERS
if len_pass_symbols.lower() == 'Да':
    chars += PUNCTUATION
if len_pass_no_symbols.lower() == 'Да':
    for c in 'il1Lo0O':
        chars = chars.replace(c, '')

def generate_password(len_pass_one, chars):
    password = ''
    for j in range(len_pass_one):
        password += random.choice(chars)
    return password

for _ in range(len_pass_all):
    print(generate_password(len_pass_one, chars))
  • Вопрос задан
  • 174 просмотра
Решения вопроса 1
@dim5x
ЗИ, ИБ.
Потому что len_pass_numbers.lower() (и прочие) возвращает вам строку 'да', а вы сравниваете с 'Да'.
Соответственно ваш "алфавит" - chars - пустой.

Ну и, вероятно, удобнее пользоваться встроенными коллекциями, чем вручную набивать:
from string import digits, ascii_lowercase, ascii_uppercase, punctuation
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы