2016-07-28 31 views
1

我寫了一個密碼生成器,我遇到了這個煩人的問題,它是在同一行重複一個數字或字母。用戶給程序一個格式,說明他們希望如何生成他們的密碼,例如「C @@ d %%%」 其中@只是字母,而%只是數字,用戶還輸入數字和字母以生成密碼,那麼該程序是假設打印出像cold123這樣的東西,而是打印出cood111或clld111,我會在下面發佈我的代碼片段,但請不要說壞話,我對python相當陌生,自學成才,幾個月後進入蟒蛇體驗。如何阻止我的程序生成相同的密鑰?

class G() 
    . 
    . 
    . 

    # self.forms is the format the user input they can input things such as [email protected]@d%%% 
    # where @ is only letters and where % is only numbers 

    # self.Bank is a list where generated things go 

    AlphaB = [] #list Of All Of The Positions That have The @ sign in The self.forms 
    NumB = [] #list of All of the positions that have a % sign 
    for char in self.forms: 
     if char == '@': 
      EOL=(self.Position) # Positions End Of Line 
      Loc = self.forms[EOL] # Letter 
      AlphaB.append(EOL) 


     if char == '%': 
      EOL=(self.Position) 
      Loc = self.forms[EOL] 
      NumB.append(EOL) 
     self.Position+=1 # Move right a position 

    for pos in AlphaB: 
     for letter in self.alphas: #letters in The User Inputs 
      GenPass=(self.forms.replace(self.forms[pos],letter)) 
      #Not Fully Formatted yet, because Only The letter been formatted 
      if GenPass.find('%'): 
       for Pos in NumB: 
        for number in self.ints: 
         GenPass=(GenPass.replace(GenPass[Pos],number)) 
         if GenPass not in self.Bank: 
          #Cood111 
          print (GenPass) 
          self.Bank.append(GenPass) 

      else: 
       if GenPass not in self.Bank: 
        print (GenPass) 
        self.Bank.append(GenPass) 
+1

這是一個練習,對不對? – l0b0

+0

我認爲問題是'replace()'函數我相信如果你傳遞第三個參數',1',那麼只有第一個匹配項會被替換,而不是所有的匹配項 – depperm

回答

0

GenPass.replace(GenPass[Pos],number)將與number值替換在GenPass[Pos]出現的字符。您需要確保一次替換一個角色。

+0

以替換一個,你可以簡單地添加第三個參數到'替換'像'GenPass.replace(GenPass [Pos],number,1)'',只有第一個將被替換 – depperm

+0

怎麼樣?替換的東西全部取代 – user5117999

+0

所以基本上GenPass.replace(GenPass [Pos],number,int(Pos)) – user5117999

0

創建一個包含所有num的所有字符和列表的列表,然後通過使用list.pop(randint(0,len(list)-1)選擇一個列表,您將始終選擇一個不同的字母/數字,像這樣但你也會被限制在10位數字(0-9)和20個字母之內。

+0

我不關注。 – user5117999

+0

從列表中彈出是一個可怕的想法 - 你正在減少密碼的熵。 – l0b0

+0

是否可以在不減少熵的情況下重複字符? – rodjun

相關問題