2017-06-08 2 views
0

Ich erstelle ein Programm, das die Stärke von Passwörtern beurteilt. Ein Teil des Codes soll prüfen, ob ein Passwort irgendwelche Nummern hat. Wenn ich jedoch ein Passwort eintrage, wird der Code ignoriert, der angibt, was als Ausgabe ausgegeben werden soll, wenn keine Zahlen vorhanden sind, und stattdessen mit: 'das ist zu kurz' zurückgegeben.Tkinter überspringt einen Teil des Codes, der die Reaktion auf einen Eingang beschreibt - Python

from tkinter import * 

import re 

def pass_Type(): 
    strength = pass_Type #Applies pass_Type to the entire program 

def value(): 
    value 


def click(): 
    entered_text = entry.get() 
    if entered_text in pass_Type: 
     strength = pass_Type[entered_text] 
     output.delete(0.0, END) 
     output.insert(END, strength) 
     #Click function 
    elif len(entered_text) < 9: 
     output.delete(0.0, END) 
     output.insert(END, 'This is too short') 
    elif pass_Type and len(entered_text) < 9: 
     output.delete(0.0, END) 
     output.insert(END, strength) 
    elif value(entered_text):        } 
     if not any(c.isdigit() for c in value):   } 
      output.delete(0.0, END)       } 
      output.insert(END, 'Incorporate some numbers') } #The problematic area 
    elif value(entered_text) and len(entered_text) < 9: } 
     if not any(c.isdigit() for c in value):   } 
      output.delete(0.0, END) 
      output.insert(END, 'Try to incorporate some numbers and increase the length of your password') 
    else: 
     output.delete(0.0, END) 
     output.insert(END, "This password is acceptable!") #When the password is ok 

Password = Tk() 
Password.title('Password tester') 

label = Label(Password, text="Password:") 
label.grid(row=0, column=0, sticky=W) #Entry label 

entry = Entry(width=20, bg='light blue') 
entry.grid(row=1, column=0, sticky=W)  #Entry box 

Button(Password, text='SUBMIT',width=5, command=click).grid(row=2,column=0, sticky=W) #Button 

label = Label(Password, text='Strength:') 
label.grid(row=4, column=0, sticky=W)   #Output label 

output = Text(Password, width=75, height=6, wrap=WORD, background='light blue') 
output.grid(row=5, column=0, columnspan=2, sticky=W)        #Output box 

pass_Type = { 
    'Password': 'This is a very predicatable password. You should incorporate numbers', 
    'password': 'This is a very predicatable password. You should incorporate numbers and capital letters', #Common password glossary 
    '12345': 'Try and incorporate some letters', 
    'qwerty': 'Try to jumble up your letters so the password is not so predictable.' 
    } 

Password.mainloop() 

Wenn ich selbst den Code zu testen versuchen, um mehr als 9 Zeichen eingegeben hat, lehnt sie den Code mit dem folgenden Fehler:

Exception in Tkinter callback 
Traceback (most recent call last): 
    File "", line 1549, in __call__ 
    return self.func(*args) 
    File "", line 25, in click 
    elif value(entered_text): 
TypeError: value() takes 0 positional arguments but 1 was given 

Wie kann ich überspringt das Programm nicht über den Aspekt, und verwende den von mir programmierten alternativen Ausgang? Und wenn das Einbauen von Zahlen das einzige Problem war, wie kann ich den Fehler beheben?

+0

Dieser elif-Wert (eingegebener Text): elif-Anweisung sieht nicht so aus, als würde irgendetwas tun. Auch sollten Sie vermeiden, eingebaute Funktionen zu verwenden, da value() in Python eingebaut ist. –

+0

Ich habe meine Antwort aktualisiert. Ich habe deinen Code ein wenig überarbeitet, weil darin unnötige Dinge drin waren. Lass es mich wissen, wenn es hilft. –

Antwort

1

Versuchen Sie Folgendes.

Lassen Sie uns eine True/False-Variable erstellen und entscheiden Sie sofort, ob es eine Zahl im Eingabefeld gibt.

Wenn es eine Zahl in der Eingabebox gibt, können wir diese Variable auf True setzen und die elif-Anweisung kann das übernehmen.

Es gibt ein paar Möglichkeiten, dies zu tun, aber ich entschied mich, es so zu machen.

EDIT:

nach Ihren Code ein wenig suchen über bemerkte ich Dinge durchtrennen, die entweder nicht erforderlich oder überflüssig oder gar nichts getan hat.

Nehmen Sie diesen folgenden Code und es sollte die Ergebnisse produzieren, die Sie suchen. Beachte das Zeug, das ich ausgehe. Von folgendem Code, wie es wirklich nichts für dich im Code getan hat.

UPDATE: Ein Feature hinzugefügt, über das wir im Chat gesprochen haben.

from tkinter import * 
import re 

pass_Type = { 
    'Password': 'This is a very predictable password. You should incorporate numbers', 
    'password': 'This is a very predictable password. You should incorporate numbers and capital letters', 
    '12345': 'Try and incorporate some letters', 
    'qwerty': 'Try to jumble up your letters so the password is not so predictable.' 
    } 

def click(): 
    entered_text = entry.get() 
    x = False 
    y = False 
    for i in entered_text: 
     if i in "": 
      x = True 
    for i in entered_text: 
     if i in "abcdefghijklmnopqrstuvwqyzABCDEFGHIJKLMNOPQRSTUVWXYZ": 
      y = True 

    if entered_text in pass_Type: 
     output.delete(0.0, END) 
     output.insert(END, pass_Type[entered_text]) 

    elif len(entered_text) < 9: 
     if x == True and y == True: 
      output.delete(0.0, END) 
      output.insert(END, 'This is too short') 
     elif x == False and y == False: 
      output.delete(0.0, END) 
      output.insert(END, 'Try to incorporate some numbers, letters and increase the length of your password') 
     elif x == False and y == True: 
      output.delete(0.0, END) 
      output.insert(END, 'Try to incorporate some numbers and increase the length of your password') 
     else: 
      output.delete(0.0, END) 
      output.insert(END, 'Try to incorporate some letters and increase the length of your password') 

    elif x == False: 
     output.delete(0.0, END)       
     output.insert(END, 'Incorporate some numbers') 

    elif y == False: 
     output.delete(0.0, END) 
     output.insert(END, 'Incorporate some letters') 

    else: 
     output.delete(0.0, END) 
     output.insert(END, "This password is acceptable!") 

Password = Tk() 
Password.title('Password tester') 

label = Label(Password, text="Password:") 
label.grid(row=0, column=0, sticky=W) 

entry = Entry(width=20, bg='light blue') 
entry.grid(row=1, column=0, sticky=W) 

Button(Password, text='SUBMIT',width=5, command=click).grid(row=2,column=0, sticky=W) 

label = Label(Password, text='Strength:') 
label.grid(row=4, column=0, sticky=W) 

output = Text(Password, width=75, height=6, wrap=WORD, background='light blue') 
output.grid(row=5, column=0, columnspan=2, sticky=W) 



Password.mainloop() 

Ich entfernte die folgenden 2-Funktion, wie sie für Sie buchstäblich nichts.

Diese Funktion tut nichts, als wo in Ihrem Code Sie diese Funktion jemals aufgerufen haben. Alles, was Sie tun müssen, ist pass_Type an Ort und Stelle, wo Sie Stärke hatten.

def pass_Type(): 
    strength = pass_Type #Applies pass_Type to the entire program 

Diese Funktion führt auch nichts aus. Selbst wenn Sie Code hätten, der diese Funktion aufruft, gibt def value(): nichts zurück und wendet nichts auf eine Variable oder ein Widget an.

def value(): 
    value 
+0

Danke, dass Sie mir geholfen haben, ich könnte Hilfe bei der Erklärung gebrauchen, wie Sie das Wörterbuch mit 'len' überschreiben konnten (deshalb hatte ich def pass_type.) –

+0

@ matt-333: Ich bin mir nicht sicher was meinst du mit override? Alles, was ich mit "len" mache, ist die Anzahl der Zeichen, die die Zeichenfolge vom Eingabe-Widget lang ist. –

+0

'def pass_Type' wurde verwendet, damit 'len' nicht die primäre Antwort ist, da 'dies zu kurz ist' und stattdessen die Antwort go-to pass_Type ist. –

0

Blick auf die Funktion, die Sie definiert:

def value(): 
    value 

Da die Fehlermeldung sagt, dass es keine Positionsargumente nimmt trotz Sie sie in Ihrer Bedingung (en) vorbei.

Darüber hinaus, auch wenn Sie das behoben haben, was value ist, ist es nicht definiert? An dieser Stelle wird nur auf die Funktion verwiesen.

Es sieht so aus, als ob Sie testen möchten, ob nur Text eingegeben wurde. In diesem Fall können Sie einfach die "Wahrheit" der Zeichenfolge testen, da eine leere Zeichenfolge "" mit false gleichgesetzt wird.

+0

Das Problem mit der Eingabe einer leeren Zeichenfolge ist, dass eine andere meiner if-Anweisungen damit kollidiert. ('Len') –

+0

Dann beheben Sie die Logik – Pythonista

+0

Womit sollte ich gleichwertig sein? Wenn ich meinen 'Def-Wert' heraushole, erhalte ich den Fehler, dass der Wert nicht definiert ist. –

Verwandte Themen