2017-06-08 9 views
0

私はパスワードの強さを判断するプログラムを作成しています。コードの一部は、パスワードに数字があるかどうかを確認するためのものです。しかし、パスワードを入力すると、数字がない場合、出力として何を印刷するかを詳しく記述していないコードが完全に無視され、「これは短すぎます。Tkinterは入力に対する反応を詳述するコードの一部をスキップします - 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() 

私は9を超える文字を入力することで、自身でコードをテストしようとすると、それが次のエラーでコードを拒否:

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 

は、どのように私はプログラムが側面をスキップない作ることができ、私がプログラムした代替出力を使用しますか? 数字を組み込むことが唯一の問題だった場合は、どのようにエラーを修正できますか?

def value(): 
    value 

をエラーメッセージが、それはあなたがあなたの条件(複数可)からそれらを渡すことにもかかわらず、何の位置引数を取りません言うように:あなたが定義した関数で

+0

このELIF値(entered_text):elifのステートメントは、何かをしようとしているようには見えません。また、value()がPythonに組み込まれているので、組み込み関数を使わないでください。 –

+0

私は自分の答えを更新しました。私はあなたのコードを少し修正しました。何か不必要なものがあったからです。それが役に立ったら教えてください。 –

答えて

1

以下を試してください。

True/False変数を作成し、入力ボックスに数字がある場合はすぐにバットをオフにすることができます。

入力ボックスに数字がある場合は、その変数をTrueに変更することができ、elifステートメントでその変数を選択できます。

これを行うにはいくつかの方法がありますが、私はこのようにしました。

EDIT:

あなたのコードの上にビットを見た後、私は必要または冗長またはまったく何もしなかったされていないのいずれかのものを切断気づきました。

次のコードを実行すると、探している結果が得られます。私が押し出すものに注意してください。次のコードのうち、コード内で実際には何もしませんでした。

更新:チャットで話した機能を追加しました。

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() 

次の2つの機能は、文字通り何もあなたのために削除しました。

この関数は、コード内でその関数を呼び出したことがない場所は何もしません。あなたがする必要があるのは、強さを持っていた場所であればどこでもpass_Typeを使うことだけです。

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

この機能も何もしません。この関数を呼び出すコードを持っていたとしても、def value():は何も返さず、変数やウィジェットには何も適用されません。

def value(): 
    value 
+0

私に助けてくれてありがとう、私は何か助けを用いることができるのは、辞書が "len"を上回るようにする方法です(これはdef pass_typeを持っていた理由です)。 –

+0

@ matt-333:あなたはオーバーライドを意味しますか?私がここで 'len'でやっているのは、文字列がエントリーウィジェットからどれくらいの長さの文字列を得ているかです。 –

+0

'def pass_Type'は 'len'がプライマリにならないように使用されています。 'this is too short'と答えて、代わりにgo_to答えはpass_Typeです。 –

0

ルック。

さらに、valueと定義されていても定義されていませんか?この時点では、関数を参照しているだけです。

単純に文字列が入力されたかどうかをテストしようとしているようですが、空白の文字列""はfalseと等しいので、文字列の真実性を直接テストできます。

+0

空の文字列を入力する際の問題は、別のif文がそれと衝突することです。 ( 'Len') –

+0

次にロジックを修正してください。 – Pythonista

+0

値はどうしたらよいですか?私の「def value」を取り除くと、値が定義されていないというエラーが表示されます。 –

関連する問題