[英]Ensuring that each letter appears only once in the password
剛開始學習python並嘗試使用循環編寫檢查唯一字母的代碼,如下所示:
def has_unique_letters(x):
count = 0
letters = set(x)
while count < len(x):
if x[count] in letters:
return False
count += 1
return True
但是,無論我在x中輸入什么,它都將返回false。 代碼有什么問題? 謝謝!
x
每個字母將始終包含在set(letters of x)
,因此您的函數將始終返回False
為了解決您的問題,您可以驗證set(x)
的長度等於x
的長度:
這是為什么:
def has_unique_letters(x):
return len(set(x)) == len(x)
如果x僅包含唯一字母,則返回True
,否則返回False
如果pw中的大寫和小寫字母等效,則在處理之前,必須將輸入參數轉換為小寫(或大寫):
def has_unique_letters(x):
lower_x = x.lower()
return len(set(lower_x)) == len(lower_x)
[edit]在密碼上設置唯一字母約束會減少域空間; 也許這不是一個好主意。
這是另一種方法:
def has_unique_letters(string):
return not bool([x for x in __import__('collections').Counter(string).values() if x > 1])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.