2013-10-08 41 views
0

對不起,我想在python 3.2上編寫密碼強度檢查代碼,但它看起來像我不斷收到錯誤的地方。無論何時我的輸入是#$%$ J,都會進入if input.upper()爲真。我如何防止這種情況發生?我的分數值不準確。 編碼:密碼強度檢查

所有的
password_user = input("Input password : ") 
score = 0 
if len(password_user) <=5: 
    print("Password is too short! ") 
    score = 1 
elif password_user == password_user.lower(): 
    print("Bad Password") 
    score = 1 
elif password_user == password_user.upper(): 
    print("Bad Password") 
    score = 1 
else: 
    while score == 0: 
     for x in range(33,48): 
      ascii_str = chr(x) 
      if password_user.find(ascii_str) >= 0: 
       score = score + 3 
     for y in range(97,123): 
      ascii_lower = chr(y) 
      if password_user.find(ascii_lower) >= 0: 
       score = score + 1 
     for w in range(65,91): 
      ascii_upper = chr(w) 
      if password_user.find(ascii_upper) >= 0: 
       score = score + 2 
     for z in range(48,58): 
      ascii_num = chr(z) 
      if password_user.find(ascii_num) >= 0: 
       score = score + 2 
if score >0 | score <=5: 
    print("Weak Password") 
    print(score) 
elif score > 5 | score < 7: 
    print("Medium Password") 
    print(score) 
elif score >= 7: 
    print("Strong Password") 
    print(score) 
+1

你的問題太廣泛了,試着將你的問題縮小到你需要幫助的幾行代碼。包括樣本數據以及預期的流程/結果。 –

+0

你能指定你的錯誤嗎?也許我可以幫忙。 – aIKid

+0

請教我的[對相似問題的回答](http://stackoverflow.com/a/16710035/1561176) –

回答

1

首先,它應該是,例如,查找(ascii_str)> -1(使得字符數目0計數)。 我假設你的意思是每個角色的範圍最多給予一次分數獎勵。因此,類似這樣的事情是合適的:

contain = false 
for x in range(33,48): 
    ascii_str = chr(x) 
    if password_user.find(ascii_str) > -1: 
     contain = true 
if contain: 
    score += 3 

和其他類似的。

編輯: 這個問題並沒有說明你是否希望每個不同的角色增加分數,每個角色增加分數,或者只爲每種類型的角色增加分數。 鑑於任何得分大於6的指標都很強,任何不返回「密碼太短」或「密碼錯誤」的指標都會很強(至少有6個字符,至少有一個大寫字母,已經給了7分),除非你有很多重複的字母。如果你真的想要每個新角色提高分數,你應該改變度量(可能12或更多是一個強密碼?),儘管在我看來,增加每種類型角色的分數更有意義,並且然後根據長度增加分數,或類似的東西。

+0

他想計算大寫字母,小寫字母,符號等的數量。沒有找到它。 – aIKid

+0

他擁有的代碼並不包括他們;它計算不同的數量。 我認爲只要找到他們就更有意義,因爲他的任何得分> = 7的指標都很強。通過這個指標,除非他有很多重複的字母,否則任何不會返回「密碼太短」或「密碼錯誤」的字符將會很強(至少有6個字符,至少有一個大寫字母)。 這實際上取決於他想要達到的標準,我想。他是否希望每個不同的字母都能增加分數,或者只增加一個分數,或者每個(不一定是不同的)字母來增加分數? – antimonyarsenide