簡體   English   中英

確保每個字母在密碼中僅出現一次

[英]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的長度:

這是為什么:

  1. 集合是唯一對象的集合。
  2. x的元素集是組成x的唯一元素的集合。
  3. 因此,如果x僅由唯一元素組成,則x元素集的基數將等於組成x的元素總數。

def has_unique_letters(x):
    return len(set(x)) == len(x)

如果x僅包含唯一字母,則返回True ,否則返回False

[edit]-對小寫/大寫無動於衷的問題:

如果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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM