回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我一直在尝试使用secrets模块在python中创建一个密码生成器。
我首先询问用户所需的密码长度,然后在3个字符列表(字母、数字、符号)中随机选择。然后我通过循环一个接一个地打印结果</p>
<p>我的问题是,在用户询问大约12个字符之前,该程序工作正常。然后我得到以下错误<code>IndexError: list index out of range</code>,在搜索了几个小时后,我无法找到答案</p>
<p>抱歉,如果这个问题看起来很基本,但我还是个初学者,只想提高</p>
<p>这是我的密码:</p>
<pre><code>import secrets
# importing modules
doRun = True
while doRun:
length = int(input("How many characters do you want you password to have ? "))
# Asking the user for the length of the password
letCar = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u",
"v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P",
"Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
# List for characters
numCar = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]
# List for numbers
symCar = ["!", "@", "?"]
# List for symbols
password = []
# Initializing list for password
for i in range(0, length):
selector = secrets.randbelow(3)
# Randomly choosing from which list to pick
if selector == 0:
# Characters list
chosenCar = secrets.choice(letCar)
password.append(chosenCar)
letCar.remove(chosenCar)
elif selector == 1:
# Numbers list
chosenCar = secrets.choice(numCar)
password.append(chosenCar)
numCar.remove(chosenCar)
elif selector == 2:
# Symbols list
chosenCar = secrets.choice(symCar)
password.append(chosenCar)
symCar.remove(chosenCar)
print("password is : ", end="")
for i in range(len(password)):
print(password[i], end="")
print()
doRun = input("Again ? (Yes --> True // No --> False) : ")
</code></pre>
<p>错误是:</p>
<pre><code>Traceback (most recent call last):
File "E:\Bureautique\Outils\Programmation\Python\Projects\PWHash\main.py", line 35, in <module>
chosenCar = secrets.choice(symCar)
File "C:\Users\Arthur\AppData\Local\Programs\Python\Python39\lib\random.py", line 347, in choice
return seq[self._randbelow(len(seq))]
IndexError: list index out of range
</code></pre>
<p>谢谢你的帮助</p>