如何让我的Python随机密码生成器正常工作?

-4 投票
2 回答
67 浏览
提问于 2025-04-12 23:15

我在大学的编程课上,需要用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 代表用户想要的随机字符串的字符数量,这样就能解决你遇到的类型错误了。

撰写回答