如何让我的Python随机密码生成器正常工作?
我在大学的编程课上,需要用Python做一个随机数生成器,但我总是搞不定。要么就是出错,要么什么都不显示。目前我遇到的错误是:
line 34, in <module>
print(rand.randchoice(X) in range(Y))
return seq[self._randbelow(len(seq))]
Type Error: object of type'int' has no len()
import os
import sys
import random as rand
import string as str
#FUNCTION FOR THE UI
print('Please choose a difficulty level for your new password:')
print('1. Easy')
print('2. Medium')
print('3. Hard')
X = int(len(input('Enter Your Choice Here: ')))
Y = int(len(input('Enter Number of Characters Here: ')))
easy = str.ascii_lowercase
medium = str.ascii_lowercase + str.ascii_uppercase + str.digits
hard = str.ascii_letters + str.ascii_uppercase + str.digits + str.punctuation
if X == '1':
X = easy
elif X =='2':
X = medium
elif X == '3':
X = hard
print(rand.choice(X) in range(Y))
我还试着手动把所有字符放进数组里。我希望它能从每个列表中随机取出字符,长度和“Y”一样。
代码的第一行是第7行,最后一行是第34行。
2 个回答
0
我注意到几个问题。首先,你获取的是用户输入的长度,而不是输入的内容。第16和第17行(根据图片)应该是:
X = int(input('Enter Your Choice Here: '))
Y = int(input('Enter Number of Characters Here: '))
另外,第27到32行应该检查的是整数,而不是字符串:
if X == 1:
X = easy
elif X == 2:
X = medium
else:
X = hard
最后,要打印生成的密码,你应该使用这个代码:
for i in range(Y):
print(rand.choice(X), end = "")
这里的 end = "" 意思是下一个字符会在控制台的同一行上打印出来。
这将是最终的代码:
import os as os
import sys as sys
import random as rand
import string as str
#FUNCTION FOR THE UI
print('Please choose a difficulty level for your new password:')
print('1. Easy')
print('2. Medium')
print('3. Hard')
X = int(input('Enter Your Choice Here: '))
Y = int(input('Enter Number of Characters Here: '))
easy = str.ascii_lowercase
medium = str.ascii_lowercase + str.ascii_uppercase + str.digits
hard = str.ascii_letters + str.ascii_uppercase + str.digits + str.punctuation
if X == 1:
X = easy
elif X == 2:
X = medium
else:
X = hard
for i in range(Y):
print(rand.choice(X), end = "")
0
这个错误发生的原因是,变量 y 是一个整数,它表示输入字符串的长度,而不是用户想要的随机字符串的字符数量。
import random as rand
import string as string_module
print('Please choose a difficulty level for your new password:')
print('1. Easy')
print('2. Medium')
print('3. Hard')
x_choice = input('Enter Your Choice Here: ')
y_chars = int(input('Enter Number of Characters Here: '))
easy = string_module.ascii_lowercase
medium = string_module.ascii_lowercase + string_module.ascii_uppercase
hard = string_module.ascii_letters + string_module.digits + string_module.punctuation
if x_choice == '1':
x = easy
elif x_choice == '2':
x = medium
elif x_choice == '3':
x = hard
else:
print("Invalid choice!")
现在,y_chars 代表用户想要的随机字符串的字符数量,这样就能解决你遇到的类型错误了。