判斷密碼長度 Python實踐例題判斷密碼是否合規

2021-10-16 02:09:26 字數 3789 閱讀 4896

雖然這有點***,但這可以用python實現

找了個例題

編寫乙個程式,該程式能實現:

設定使用者名稱和n位的密碼(其中n≥8),並且要求密碼為長度至少8位的字母和數字構成的不能存在重複字元,否則會要求重新設定,直到設定成功

設計思路1

使用「input」,將使用者輸入的使用者名稱與密碼賦值給乙個變數

2 while true死迴圈,直到密碼滿足條件後使用」break「退出

3 最關鍵的部分,判斷是否符合題目要求的三個條件

密碼長度≥8

數字和字母構成,即不能只包含數字或字母

不能存在重複字元

1輸入部分

這裡用兩個變數來儲存使用者輸入的內容,分別為」name「」password「

使用」input「記錄使用者的輸入,使用」str「轉換為字串並最終賦值給前面的變數

name=str(input('請輸入使用者名稱:'))password=str(input('請輸入密碼(應為長度至少8位數的字母和數字構成,且不能出現重複字元)'))

2迴圈部分

為了使使用者在輸入不合規密碼時重新讓使用者再次輸入,所以我們需要乙個迴圈

這裡解釋下為什麼選擇while而不用for,因為我們沒辦法確定使用者輸入密碼的次數,所以,使用while會更加方便

由於我們需要使用者輸入有誤時重新輸入,所以我們要將輸入密碼的部分放到迴圈內

name=str(input('請輸入使用者名稱:'))while true:password=str(input('請輸入密碼(應為長度至少8位數的字母和數字構成,且不能出現重複字元)'))#輸入密碼部分放在迴圈內#此處省略判斷條件    break    #條件合適後再執行這行**

3判斷密碼長度

字串有乙個內建函式「len()」,這個內建函式可以輸出指定字串的長度,

if len(password)<8:    print('您設定的密碼位數不足8為,請重新設定!!!')

4判斷密碼是否僅為字母或數字構成

首先,先來介紹兩個方法,「isalpha」和「isdigit」

「isalpha」,這個方法可以用來判斷字串是否只包含字母,要是只包含字母,則返回「true」,反之則是「false」

使用方法:

str.isalpha()
「isalpha」,這個方法和前者很像,可以用來判斷字串是否只包含數字,要是只包含數字,則返回「true」,反之則是「false」

使用方法:

str.isdigit()
所以,我們可以利用這兩個方法,做出判斷字串是否只包含字母或數字

if password.isalpha() or password.isdigit():    print('您設定的密碼不能僅僅包含數字或字母,請重新設定!!!')

5是否含有重複的字元

這個不太好理解,我先解釋下

例如「abca123456」

這裡包含了兩個「a」,所以存在重複的字元

我的思路是這樣的,首先使用for迴圈,逐個判斷每個字元在字串中含有幾個,至於如何判斷,可以使用「count()」函式解決

for i in range(0,len(password)):     if password.count(password[i])>1:        j=1  #乙個臨時變數,當某乙個字元在字串中存在乙個以上,則給臨時變數賦值為1,這個臨時變數是為了後面做準備
這裡注意乙個問題,我們這裡使用了乙個臨時變數,要是我們第一次密碼存在重複,但因為迴圈,會要求使用者再次輸入密碼,這時候即使不存在重複,臨時變數依舊為1,所以程式就會出現乙個永遠都判斷你的密碼存在重複字元的bug,這個時候我們就需要在合適的地方初始化這個變數,例如:

while true:    cf=0
最後使用if語句判斷這個臨時變數是不是1,要是1則代表該字串出現了重複的字元

if j==1:  #注意兩個等號    print('您設定的密碼出現了重複的字元,請重新設定!!!')

6符合要求,退出迴圈

要是密碼是滿足條件的,則我們還要提示使用者並退出迴圈

在python迴圈語句中,我們可以用「break」終止迴圈

if not (len(password)<8 or (password.isalpha() or password.isdigit()) or cf==1):   #不滿足前面的條件,這行**請根據實際情況修改,例如前面的「if」語句是巢狀的形式,可以用「else」    print('密碼設定成功!!!')    break
自此,我們的程式基本上已經完成,只需簡單的除錯和修飾即可

以下是完成後的**,我建議看到這可以嘗試自己先動手試試,先不直接看成品

在下面

name=str(input('請輸入使用者名稱:'))print('你好 %s ,首次使用請設定密碼!!!'%name)while true:    cf=0    print('='*70)#來個分割線,防止多次執行時一堆字堆一起看不清    password=str(input('請輸入密碼(應為長度至少8位數的字母和數字構成,且不能出現重複字元)'))    if len(password)<8:        print('▶您設定的密碼位數不足8位,請重新設定!!!')    if password.isalpha() or password.isdigit():        print('▶您設定的密碼不能僅僅包含數字或字母,請重新設定!!!')    for i in range(0,len(password)):         if password.count(password[i])>1:            cf=1    if cf==1:        print('▶您設定的密碼出現了重複的字元,請重新設定!!!')    if not (len(password)<8 or (password.isalpha() or password.isdigit()) or cf==1):        print('密碼設定成功!!!')        break    """解釋下為什麼我不用多個巢狀的if,因為當我們密碼有多個不合規點時,應該一口氣告訴使用者,不然使用者可能會出現多次密碼不合規反覆輸入,我感覺這樣的互動就很不友好雖然這樣做**執行的效率不高"""

密碼長度 太短了提示

第一種方法 final edittext edittext edittext findviewbyid r.id.edittext edittext.setonfocuschangelistener new onfocuschangelistener else toast.maketext test...

演示 設定密碼長度限制 密碼加強

演示 設定密碼長度限制 密碼加強 為相關的線路訪問設定密碼可以加強密訪問的安全,而密碼字串本身的安全也是一件非常重要的事情,以下建議為設定密碼的最佳實踐 n 限定密碼字串的長度,字元數越多,猜測密碼所需要的時間越長。n建議使用混合字元,比如 大小寫字母 數字 空格和其它符號,密碼字串的組合越複雜,者...

演示 設定密碼長度限制 密碼加強

演示 設定密碼長度限制 密碼加強 為相關的線路訪問設定密碼可以加強密訪問的安全,而密碼字串本身的安全也是一件非常重要的事情,以下建議為設定密碼的最佳實踐 n 限定密碼字串的長度,字元數越多,猜測密碼所需要的時間越長。n建議使用混合字元,比如 大小寫字母 數字 空格和其它符號,密碼字串的組合越複雜,者...