Member 14881879 Ответов: 2

Попытался сделать генератор паролей более сложным


ладно, вот мой код, я знаю, что он такой грязный, что я едва его понимаю :

import random
print ("Hello, Welcome to the password generator program.")
psw=True
char = 'abcdefjhijklmnopqrstvwxyz1234567890ABCDEFGHIJKLMNOPQRSTVWXYZ1234567890'
lower_char='abcdefjhijklmnopqrstvwxyz1234567890'
only_char='abcdefjhijklmnopqrstvwxyz'
only_numbers='123456790'
while psw==True:
    numbers= int(input("Number of passwords: "))
    length= int(input("The password length: "))
    lower= input("Do you want the password lower case and number? Y/N: ")
    if lower == 'Y':
        break
    character = input("Do you want the password character only? Y/N: ")
    if character == 'Y':
        break
    number = input("Do you want the password number only? Y/N: ")
    if number == 'Y':
        break

print("Here are your number: \n")

for pss in range(numbers):
    password = ''
    for l in range(length):
        if lower == 'Y':
            password+=random.choice(lower_char)
        elif character == 'Y':
            password +=random.choice(only_char)
        elif number == 'Y':
            password +=random.choice(only_numbers)
        else:
            password +=random.choice(char)

    print(password)


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

Что я уже пробовал:

я перепробовал все, чтобы заставить другую часть работать, но это не так

2 Ответов

Рейтинг:
19

CPallini

Быстрое исправление (использование вложенных if)

import random
print ("Hello, Welcome to the password generator program.")
psw=True
char = 'abcdefjhijklmnopqrstvwxyz1234567890ABCDEFGHIJKLMNOPQRSTVWXYZ1234567890'
lower_char='abcdefjhijklmnopqrstvwxyz1234567890'
only_char='abcdefjhijklmnopqrstvwxyz'
only_numbers='123456790'
while psw==True:
    numbers= int(input("Number of passwords: "))
    length= int(input("The password length: "))
    lower= input("Do you want the password lower case and number? Y/N: ")
    if lower != 'Y':
        character = input("Do you want the password character only? Y/N: ")
        if character != 'Y':
            number = input("Do you want the password number only? Y/N: ")

    print("Here are your number: \n")

    for pss in range(numbers):
        password = ''
        for l in range(length):
            if lower == 'Y':
                password+=random.choice(lower_char)
            elif character == 'Y':
                password +=random.choice(only_char)
            elif number == 'Y':
                password +=random.choice(only_numbers)
            else:
                password +=random.choice(char)

        print(password)

    quit = input("Do you want to quit with password generation? Y/N: ")
    if quit == 'Y':
        psw = False

В любом случае, лучшим вариантом было бы перестроить код.


Member 14881879

вау, чувак, ты гений, у меня тоже есть вопрос,
как вложенный if исправил его, и как он ломается без какой-либо команды continue или чего-то еще

CPallini

Вы не туда положили свои заявления о перерыве. Моя программа завершает цикл while по запросу пользователя (установка условия выхода).

Рейтинг:
1

OriginalGriff

- Я? Я жульничаю. Когда я создаю пароль для кого - то, я делаю это реальной болью, чтобы запомнить или ввести-что побуждает их изменить его, тем более что я также предоставляю ссылку на страницу / форму "изменить пароль", чтобы они могли войти в систему с новым паролем и немедленно изменить его на тот, который они могут запомнить / ввести.
Для этого я использую этот очень простой код:

string newPassword = Guid.NewGuid().ToString("B");
Что в Python и есть:
import uuid
...
newPassword = '{' + str(uuid.uuid4()) +'}'