2 回答

TA貢獻1877條經(jīng)驗 獲得超1個贊
我認為最后一部分讓你感到困惑。您正在使用chars正確數(shù)量的特定字符構建變量,但最后您再次在它們之間進行選擇。
你可以改變:
for p in range(passlen):
password += random.choice(chars)
和
# option 1 - works better if working with lists
list_chars = list(chars)
random.shuffle(chars)
password = "".join(list_chars)
# option 2 - simpler solution for strings
password = "".join(random.sample(char, len(char)))
您還可以使用 shuffle 來選擇之前的字符,而不使用 for 循環(huán),例如:
# for this to work your `charslet` must be a list
random.shuffle(charslet)
chars += "".join(charslet[:passlet])

TA貢獻1836條經(jīng)驗 獲得超3個贊
這是更正后的代碼:
import random
charslet ="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
charsnum = "1234567890"
charssym = "!@#$%^&*"
def password():
pwd = ""
passlen = int(input("How long do you want the password to be?: "))
passlet = int(input("How many letters do you want in your password?: "))
passnum = int(input("How many numbers do you want in your password?: "))
passsym = int(passlen - (passlet + passnum))
chars = ""
for let in range(passlet):
chars += random.choice(charslet)
for num in range(passnum):
chars += random.choice(charsnum)
for sym in range(passsym):
chars += random.choice(charssym)
list_chars = list(chars)
random.shuffle(list_chars)
pwd = "".join(list_chars)
print(pwd)
password()
我替換:
for p in range(passlen):
password += random.choice(chars)
和
list_chars = list(chars)
random.shuffle(list_chars)
pwd = "".join(list_chars)
將更改后的chars變量放入列表中可以讓我對其進行洗牌、隨機化并允許我將其分配給pwd
添加回答
舉報