簡體   English   中英

我正在創建密碼生成器,但我不知道為什么它不起作用

[英]I'm creating a password generator but I don't know why it doesn't work

基本上我是 python 的新手,我正在使用 python 3 來嘗試創建一個密碼生成器,只是為了好玩,但我一直遇到問題。 當我在 Pydroid 3 中嘗試以下代碼時,它按預期工作,即創建一個長度由用戶確定的混合字符(符號、大小寫字母和數字)密碼,但是當我在 Pycharm 上運行它時,我盡管說我想要超過 1 個字符,但只得到 1 個字符。有人知道這個問題嗎?

import random
import string
import pyfiglet

print(pyfiglet.figlet_format('Password Generator!\n', font="digital"))

length = int(input('How many characters long do you want the password to be? '))
alphabet = list(string.ascii_lowercase)
numbers = range(0, 10)
specialchar = list(string.punctuation)
char = ('alfa', 'num', 'char')
pw = []
passw = ''

while length > 0:
    if random.choice(char) == 'alfa':
        x = str(random.choice(alphabet))
        pw.append(x)
        passw = ''.join(x)
        length -= 1
    elif random.choice(char) == 'num':
        x = str(random.choice(numbers))
        pw.append(x)
        passw = ''.join(x)
        length -= 1
    else:
        x = str(random.choice(specialchar))
        pw.append(x)
        passw = ''.join(x)
        length -= 1


def randomupper(c):
    if random.random() > 0.5:
        return c.upper()
    return c.lower()


password = ''.join(map(randomupper, passw))
print(f'Your randomly generated password is: {password}')

更改此行,它將起作用

password = ''.join(map(randomupper, pw))

使用passw = ''.join(x)你迭代地在x中添加一個帶有空字符''的字符到變量 passw,當循環結束時,它最終將只有一個字符。 但是pw.append(x)x內的字符添加到pw的末尾並增加其大小。 因此,當您使用passw而不是pw時,您只會看到在循環中創建的最后一個字符。

這是因為字符串passw只是將最新的字符x附加到自身。 它根本不與列表pw交互。 不需要同時擁有pwpassw而是在每個直接附加到字符串的 if 語句中使用pw += x ,然后將最后一行更改為password = ''.join(map(randomupper, pw))

主要問題是行passw = ''.join(x)刪除密碼並用最后生成的字符替換它。

其他一些需要改進的地方:

  • 以固定次數運行循環, for i in range(length)確保循環准確執行length次,而無需初始化、更新和測試變量
  • pw.append(x)這樣的代碼對於每個 if 測試都是相同的,可以放在外面
  • 你的變量 pw 已經是一個字符串,所以passwd = ''.join(pw)只是復制字符串

更新后的代碼:

import random
import string

length = int(input('How many characters long do you want the password to be? '))
alphabet = list(string.ascii_lowercase)
numbers = range(0, 10)
specialchar = list(string.punctuation)
char = ('alfa', 'num', 'char')
passw = ''

for i in range(length):
    if random.choice(char) == 'alfa':
        x = str(random.choice(alphabet))
    elif random.choice(char) == 'num':
        x = str(random.choice(numbers))
    else:
        x = str(random.choice(specialchar))
    passw.append(x)

def randomupper(c):
    if random.random() > 0.5:
        return c.upper()
    return c.lower()

password = ''.join(map(randomupper, passw))
print(f'Your randomly generated password is: {password}')

到目前為止,我已經閱讀了所有回復,你們幫助了我很多,謝謝。 我意識到 passw = ''.join(x) 語句中有一個錯誤,它應該是 passw = ''.join(pw)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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