Ярлыки неправильные, когда я нажимаю соответствующие значения - PullRequest
0 голосов
/ 06 августа 2020
from tkinter import *
import random

def check():
    en.delete(0,END)
    letters = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz'
    signs = '@#$%^&*!<>'
    digits = '1234567890'
    if pw.get() == random.choice(digits) + random.choice(letters) + random.choice(signs):
        strong = 'Very good password'
        strength.set(strong)
    elif pw.get() == random.choice(digits) + random.choice(letters):
        med = 'Medium password strength'
        strength.set(med)
    elif pw.get() == random.choice(digits):
        weak = 'Password too weak! Use another one'
        strength.set(weak)
    elif len(pw.get()) < 8:
        tooweak = 'Password not acceptable!'
        strength.set(tooweak)
    


win = Tk()
win.title('Password Generator')

lb = Label(win,text='Create a password')
lb.pack(pady=10)

pw = StringVar()
en = Entry(win,textvariable=pw)
en.pack(pady=10)

btn = Button(win,text='Create',command=check)
btn.pack(pady=10)

strength = StringVar()
lbstr = Label(win,textvariable=strength)
lbstr.pack(pady=10)

В этой программе нет ошибки. Однако, когда я запускаю и использую операторы if внутри def check():, метки не могут отображаться, если я использую пароли, удовлетворяющие условиям в strength.set(strong), strength.set(med) и strength.set(weak). Могу я спросить, можно ли использовать метод set для изменения текста метки? Также могу я спросить, правильно ли я ставлю random.choice(digits) + random.choice(letters) + random.choice(signs), если я хочу, чтобы пароль содержал цифры, буквы и знаки внутри записи? По этому вопросу я уже решил проблему, выполнив исследования. Если я снова столкнусь с той же проблемой, я хорошо систематизирую свой сценарий и проверю написание и правильность используемых методов. Прежде чем задавать новые вопросы, я сначала постараюсь изо всех сил и прошу только необходимое.

1 Ответ

3 голосов
/ 06 августа 2020

Сначала вы вызвали en.delete(0,END) в начале функции check(), и это приводит к pw.get() возврату пустой строки. Его следует вызывать в конце функции check().

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

def check():
    letters = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz'
    signs = '@#$%^&*!<>'
    digits = '1234567890'

    passwd = pw.get().strip()
    if len(passwd) < 8:
        tooweak = 'Password not acceptable!'
        strength.set(tooweak)
        lbstr.config(fg='red')
    else:        
        counts = [0, 0, 0]
        # go through each character in the password
        # and count the number of letters, signs and digits
        for c in passwd:
            if c in letters:
                counts[0] += 1
            elif c in signs:
                counts[1] += 1
            elif c in digits:
                counts[2] += 1
        print(counts)
        # check how many zeros are in the counts list
        zeros = counts.count(0)
        if zeros == 0:
            strong = 'Very good password'
            strength.set(strong)
            lbstr.config(fg='blue')
        elif zeros == 1:
            med = 'Medium password strength'
            strength.set(med)
            lbstr.config(fg='green')
        elif zeros == 2:
            weak = 'Password too weak! Use another one'
            strength.set(weak)
            lbstr.config(fg='red')
    # clear the password entry
    #en.delete(0,END)
    pw.set('')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...