Генератор ограничивает

Он работает, дизайн TK в порядке, но сгенерированный код ограничен одним типом. Что он в настоящее время делает при запуске, так это всплывающее окно с кнопкой (копировать и создать), 4 переключателями (низкий, средний, сильный, мощный), раскрывающимся списком для длины (8-32) и полем ввода, где пароль генерирует.

В настоящее время он генерирует только один тип, поэтому, если вы выберете низкий уровень, сгенерированный пароль будет в нижнем регистре, если вы выберете средний — все в верхнем регистре, сильный — все цифры и мощный — все символы.

Я хотел бы отредактировать, чтобы использовать комбинацию верхних, нижних, цифр, символов вместо одного

Полный код указан ниже



# Python program to generate random
# password using Tkinter module
import random
import pyperclip
from tkinter import *
from tkinter.ttk import *
 
# Function for calculation of password
def low():
    entry.delete(0, END)
 
    # Get the length of password
    length = var1.get()
 
    digits = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0']
    symbols = ['!', '@', '#', '$', '%', '^', '&', '*', '(', ')']
    lower = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
    upper = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
    password = ""
 
    # if strength selected is low
    if var.get() == 1:
        for i in range(0, length):
            password = password + random.choice(lower)
        return password
 
    # if strength selected is medium
    elif var.get() == 0:
        for i in range(0, length):
            password = password + random.choice(upper)
        return password
 
    # if strength selected is strong
    elif var.get() == 3:
        for i in range(0, length):
            password = password + random.choice(digits)
        return password
    
    #if strength selected is powerful
    elif var.get() == 2:
        for i in range(0, length):
            password = password + random.choice(symbols)
        return password
    else:
        print("Please choose an option")
 
 
# Function for generation of password
def generate():
    password1 = low()
    entry.insert(10, password1)
 
 
# Function for copying password to clipboard
def copy1():
    random_password = entry.get()
    pyperclip.copy(random_password)
 
 
# Main Function
 
# create GUI window
root = Tk()
var = IntVar()
var1 = IntVar()
 
# Title of your GUI window
root.title("Random Password Generator")
 
# create label and entry to show
# password generated
Random_password = Label(root, text = "Password")
Random_password.grid(row=0)
entry = Entry(root)
entry.grid(row=0, column=1)
 
# create label for length of password
c_label = Label(root, text = "Length")
c_label.grid(row=1)
 
# create Buttons Copy which will copy
# password to clipboard and Generate
# which will generate the password
copy_button = Button(root, text = "Copy", command=copy1)
copy_button.grid(row=0, column=2)
generate_button = Button(root, text = "Generate", command=generate)
generate_button.grid(row=0, column=3)
 
# Radio Buttons for deciding the
# strength of password
# Default strength is Medium
radio_low = Radiobutton(root, text = "Low", variable=var, value=1)
radio_low.grid(row=1, column=2, sticky='E')
radio_middle = Radiobutton(root, text = "Medium", variable=var, value=0)
radio_middle.grid(row=1, column=3, sticky='E')
radio_strong = Radiobutton(root, text = "Strong", variable=var, value=3)
radio_strong.grid(row=1, column=4, sticky='E')
radio_powerful = Radiobutton(root, text = "Powerful", variable = var, value = 2)
radio_powerful.grid(row = 1, column = 5, sticky = 'E')
combo = Combobox(root, textvariable=var1)
 
# Combo Box for length of your password
combo['values'] = (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)
combo.current(0)
combo.bind('<<ComboboxSelected>>')
combo.grid(column=1, row=1)
 
# start the GUI
root.mainloop()

Я пробовал в строке 43

            password = password + random.choice(symbols) + random.choice(upper) + random.choice(lower)



 #2nd try
password = password + random.choice(symbols, upper, lower)

Это использовало символы, верхний и нижний регистр, но длина была установлена ​​​​на 8, и было сгенерировано 24 (по 8 каждого). Аф)

Вторая попытка привела к ошибке: строка 43, в нижнем пароль = пароль + random.choice(символы, верхний, нижний) TypeError: Random.choice() принимает 2 позиционных аргумента, но было задано 4

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
21
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

попробуй это

 password = password + random.choice(symbols + upper + lower)

ИЛИ

password += random.choice(symbols + upper + lower)

ВОТ ВОТ ПОЛНЫЙ КОД> Я пишу комментарий, где я меняю свой код.

# Python program to generate random
# password using Tkinter module
import random
import pyperclip
from tkinter import *
from tkinter.ttk import *
 
# Function for calculation of password
def low():
    entry.delete(0, END)
 
    # Get the length of password
    length = var1.get()
 
    digits = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0']
    symbols = ['!', '@', '#', '$', '%', '^', '&', '*', '(', ')']
    lower = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
    upper = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
    password = ""
 
    # if strength selected is low
    if var.get() == 1:
        for i in range(0, length):
            password = password + random.choice(lower) # for low security choose letters from lower
        return password
 
    # if strength selected is medium
    elif var.get() == 0:
        for i in range(0, length):
            password = password + random.choice(lower+upper) # for medium security choose letters from lower and upper
        return password
 
    # if strength selected is strong
    elif var.get() == 3:
        for i in range(0, length):
            password = password + random.choice(lower+upper+digits) # for strong security choose letters from lower, upper, and digits.
        return password
    
    #if strength selected is powerful
    elif var.get() == 2:
        for i in range(0, length):
            password = password + random.choice(lower+upper+digits+symbols) # for powerful security choose letters from lower, upper, digits, and symbols.
        return password
    else:
        print("Please choose an option")
 
 
# Function for generation of password
def generate():
    password1 = low()
    entry.insert(10, password1)
 
 
# Function for copying password to clipboard
def copy1():
    random_password = entry.get()
    pyperclip.copy(random_password)
 
 
# Main Function
 
# create GUI window
root = Tk()
var = IntVar()
var1 = IntVar()
 
# Title of your GUI window
root.title("Random Password Generator")
 
# create label and entry to show
# password generated
Random_password = Label(root, text = "Password")
Random_password.grid(row=0)
entry = Entry(root)
entry.grid(row=0, column=1)
 
# create label for length of password
c_label = Label(root, text = "Length")
c_label.grid(row=1)
 
# create Buttons Copy which will copy
# password to clipboard and Generate
# which will generate the password
copy_button = Button(root, text = "Copy", command=copy1)
copy_button.grid(row=0, column=2)
generate_button = Button(root, text = "Generate", command=generate)
generate_button.grid(row=0, column=3)
 
# Radio Buttons for deciding the
# strength of password
# Default strength is Medium
radio_low = Radiobutton(root, text = "Low", variable=var, value=1)
radio_low.grid(row=1, column=2, sticky='E')
radio_middle = Radiobutton(root, text = "Medium", variable=var, value=0)
radio_middle.grid(row=1, column=3, sticky='E')
radio_strong = Radiobutton(root, text = "Strong", variable=var, value=3)
radio_strong.grid(row=1, column=4, sticky='E')
radio_powerful = Radiobutton(root, text = "Powerful", variable = var, value = 2)
radio_powerful.grid(row = 1, column = 5, sticky = 'E')
combo = Combobox(root, textvariable=var1)
 
# Combo Box for length of your password
combo['values'] = (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)
combo.current(0)
combo.bind('<<ComboboxSelected>>')
combo.grid(column=1, row=1)
 
# start the GUI
root.mainloop()

Я попробовал пароль += random.choice (символы + верхний + нижний), и он работает, результат был FjvgSWDw. Спасибо! (ожидание возможности принять ответ)

navi 06.05.2022 16:47

@navi Надеюсь, вы найдете мое предложение полезным.

Sharim Iqbal 06.05.2022 16:55

Итак, я вижу, где вы продвинулись на 1 шаг после моего следующего шага ?, чтобы настроить другие переключатели, чтобы они точно повышали безопасность от низкого до мощного, используя более низкие значения, чтобы использовать все 4 случайным образом.

navi 06.05.2022 16:56

@navi Вчера я сказал, что мы встретимся снова с другой проблемой, и это произошло. пока...?

Sharim Iqbal 06.05.2022 16:59

ха-ха да, ? я же говорил, что вернусь

navi 06.05.2022 17:00

@navi Надеюсь, мы еще встретимся.

Sharim Iqbal 06.05.2022 17:01

Давайте продолжить обсуждение в чате.

Sharim Iqbal 06.05.2022 17:03

Другие вопросы по теме