我正在创建一个随机密码生成器。首先,我必须向用户询问密码的长度,密码必须至少有8位,最多有8位共16位。我创建的是要求用户自己输入密码,然后检查密码的长度。首先,我希望用户键入密码的长度,例如:7或9等等。如果用户键入的数字小于8且大于16,则必须显示"0";必须具有最小8位到最大16位的数字";。请参考下面的代码,如果不清楚,请参考两张图片。非常感谢。
输入
import random
import string
print('hello, Welcome to Password generator!')
l = False
while not l:
length = input('nEnter the length of password: ')
if len(length) < 8 :
print('You password length is too short(must be more than 8 character)')
print(len(length), "is the length of your password")
elif len(length) > 16:
print('You password length is too long(must be less than 17 character)')
print(len(length), "is the length of your password")
else:
print('You password length looks good')
break
lower = string.ascii_lowercase
upper = string.ascii_uppercase
num = string.digits
symbols = string.punctuation
all = lower + upper + num + symbols
temp = random.sample(all,length)
password = "".join(temp)
print(password)
输出
hello, Welcome to Password generator!
Enter the length of password: 9
You password length is too short(must be more than 8 character)
1 is the length of your password
Enter the length of password: 9
You password length is too short(must be more than 8 character)
1 is the length of your password
input()
的返回类型为str
或字符串。当您检查分配给length
的返回值的长度时,它是在计算字符串中的字符数,而不是检查给定的数字是否大于或小于另一个。要解决此问题,请在length
上调用整数构造函数int()
,或将其放置在对input
的调用周围,以便在检查之前将字符串转换为数字类型。
length = int(input('nEnter the length of password: '))
此外,由于length
现在是一个整数,您可以直接执行检查,而无需调用len
。例如
if length < 8:
...
您应该改为这样写:
lenght = int(input('insert lenght: '))
在Python中,int
内置函数(也(用于将str
转换为整数(int
(变量。
然后你必须以这种方式更改你的代码:
print(lenght, "is the length of your password")
我建议进行一些其他改进。
all = lower + upper + num + symbols #Here you are overwriting the all built-in function
或
while True: #Instead of "while not l"
if (condition_that_will_end_the_loop):
break
内置的len
函数返回一个int
,使用方式如下:
>>> len([1, 2, 3, 'hey'])
4
>>> len('string')
6