如何在 运行 期间使用这些值验证用户输入

How to validate user input while running a while with those values

我正在编写一个密码生成器,它要求用户输入 LENGHT 密码并生成那么长的密码(有效)

问题:我确实验证了用户输入 (while/try/except),它得到了正确的值错误,它得到了正确的最小长度,但它没有占用最大值值并始终生成长度加上新长度的相同密码。

也许一些例子会有所帮助

from random import randint

lowerCase = "abcdefghijklmnopqrstuvwxyz"
upperCase = lowerCase.upper()
numbers = "1234567890"
special = "!#$%&/()=?¡@[]_<>,."

password_creation = lowerCase + upperCase + numbers + special

password = ""
lenght = 0
while True
    try:
        password_lenght = int(input("How many characters do you wish the password? Minimum 8 maximum 1024: "))
        if password_lenght < 8 or password_lenght > 1024:
            print("Minimun 8 characters - maximum 1024, try again")
    except ValueError:
        print ("Please enter a valid NUMBER...")
        continue
    else:
        while lenght < password_lenght:



        password = password + password_creation[randint(0, len(password_creation) -1)]
        lenght +=1
              
    
        print("Generated password: ", password)
    

如果我 运行 这段代码可以工作:

>>> %Run z_strong_password_gen.py
How many characters do you wish the password? Minimum 8 maximum 1024: asdsads
Please enter a valid NUMBER...

好的,它会检测我是否输入了非数值,

现在让我们试试 8 以下的数字(最小值。

How many characters do you wish the password? Minimum 8 maximum 1024: 1
Minimun 8 characters - maximum 1024, try again
Generated password:  $
How many characters do you wish the password? Minimum 8 maximum 1024: 3
Minimun 8 characters - maximum 1024, try again
Generated password:  $?$)

好的,它会显示消息“最少 8 个字符 - 最多 1024 个字符,再试一次”,但它会计算密码

现在让我们试试最大值

How many characters do you wish the password? Minimum 8 maximum 1024: 1030
Minimun 8 characters - maximum 1024, try again
Generated password:  $?$NDcB&vMDY&IX@¡x#hLxP8u!oa_F6PGg&DQV8WBOwkqJW@VJ8nmFA$wrF]7soN<C(J[x#[HRm,xL(7(OiCcdV43#XUfa9o7LYwBq55[n24geBl=@U<&!$fH]01&>]bG3/l&[>u2mA4N9IiNUUTj=tWJ)g4wz>A67qNV7O]aKZVfvc3F?B/TCsCjzYe3pOQ%f1nrvFO7prBr[C_Eqs8W?7GU/vor/>xJtV.FLKUL94)KZ(JCc1#gFv,=wJ5rvBR2[5)hhv[tAi)&8AXB1n)FPyUi6WZeqzWnj@R0t.WYja%r2pD_3¡hoW7nRncdf,ExV5._)W(/P3yOyvp#jZNpQIt6Y1cbfoq[mweSp#f)¡ADNz_Duibe<U9pJD4]4x,/G51fORryfVaekX=PIes?T>KTvfy>sQMgNjZ]4M,=5vD!G%,/gYZn(J_pxJlKzjUE65VJn)ZRVpI!&dHDtK(vh=IN=p4i7#E¡4[r!.$]J@>4&HQqSq?DXyvis<Gs)@$=5I/SRGV2&¡]DU0P$=CF,hoj7@]KhPLWsWrFgC@nEU8i3jC3yZKt)_r=m?@KH<sA$D#,f_2%rV$gwzMZoyxh=b[kBD5N%k<1SEpc<f93.)9eh74D6oi)XkylTNA3O%Vq)eUpF9VA$H5)NYUBHihMW.$O#ytgb!24?WLzi>piF0T(!6V#l1141v@i%]_BxCV2uPEPdajOdxqkJs#Fq,zAa#T.%DE%D%,I<y4zY5lgBcua!,LBu1jHf%4waKujW.Y&WMpnf<qa%#sCZlGm17iNu9fRLXXAdO[1s@g4?ZhTL60Blg?PtZNJw<AB>$poCK¡cJ7ON$kXAEZ/c¡X/H]FCHhjCVUm#na¡p_o>]7Bp//rr3YJFj<OpCL2kg,,XEsC0¡<i/$HP#Bc!X#nMlRVMW8NdV7x7ru_(2OW6/Q1P¡c_ZmJz<Z<7zELz¡6yp00$ZD&sErhSz81mVU$oO(rtqAYs=p3h%lbTr$EWiJxvq)X<z909k18rN07ZRfq@C7hWRyTH1!?&PR3%@?
How many characters do you wish the password? Minimum 8 maximum 1024: 

提示数字大于 1024 但再次计算密码

如果我确实计算了一个密码,比方说,10 个字符..没问题,如果我想计算另一个...20,它从之前的计算中提取前 10 个,然后加上 10更多填充 20(也许我必须清除或删除变量)

查看示例

How many characters do you wish the password? Minimum 8 maximum 1024: 10
Generated password:  **fOweHv%Wm,**
How many characters do you wish the password? Minimum 8 maximum 1024: 20
Generated password:  **fOweHv%Wm,**p6AEoh8L)l
How many characters do you wish the password? Minimum 8 maximum 1024:

你走在正确的轨道上。当我们重新启动 while 循环时,您只是忘记了重置密码。而且在打印最小和最大长度的错误后你也没有继续。但是当它被修复时,它就起作用了:

from random import randint

lowerCase = "abcdefghijklmnopqrstuvwxyz"
upperCase = lowerCase.upper()
numbers = "1234567890"
special = "!#$%&/()=?¡@[]_<>,."

password_creation = lowerCase + upperCase + numbers + special

while True:
    # pulled password and length in here to reset on each loop
    password = ""
    length = 0
    try:
        password_length = int(input("How many characters do you wish the password? Minimum 8 maximum 1024: "))
        if password_length < 8 or password_length > 1024:
            print("Minimun 8 characters - maximum 1024, try again")
            # add continue, to not try to create password, if validation fails
            continue
    except ValueError:
        print("Please enter a valid NUMBER...")
        continue
    else:
        while length < password_length:
            password = password + password_creation[randint(0, len(password_creation) - 1)]
            length += 1
        print("Generated password: ", password)

我还将 lenghtpassword_lenght 重命名为 lengthpassword_length,所以如果你在其他地方使用它们,请注意这一点

我能够修复它 如果输入非数字字符,它会验证用户输入以捕获错误 它检查输入的值是否在范围内 它计算密码 完成后退出

这里是代码,我花了一整天但是...我能够

from random import randint

lowerCase = "abcdefghijklmnopqrstuvwxyz"
upperCase = lowerCase.upper()
numbers = "1234567890"
special = "!#$%&/()=?¡@[]_<>,."

mega_pass = lowerCase+ upperCase + numbers + special

lenght = 0
password_lenght = 0
password = ""


while True:
    try:
        password_lenght = int(input("How many characters long do you want the password? (min 8 - max 100; \n"))

except ValueError:
    print("\nNumbers please...")

if  password_lenght not in range (8, 101):
    print("\nEnter a digit between 8 and 100...")


    

else:
    while lenght < password_lenght:
        password = password + mega_pass[randint(0, len(mega_pass) -1)]
        lenght +=1
    
    print("\nYou choose" , password_lenght , "characters long\n")
    print("Here is your PASSWORD:\n ", password)
    break

这里是输出

%Run z_strong_password_gen_v2.py How many characters long do you want the password? (min 8 - max 100; ghfhf hf677

请输入数字...

请输入 8 到 100 之间的数字... 您需要多少个字符的密码? (最少 8 - 最多 100; 0

请输入 8 到 100 之间的数字... 您需要多少个字符的密码? (最少 8 - 最多 100; 4444+

请输入数字...

请输入 8 到 100 之间的数字... 您需要多少个字符的密码? (最少 8 - 最多 100; 77

你选择77个字符长

这是您的密码: [M6HlFc>4EBktF(zFQQX)Tp((&ckfCVze7#!0LQOWGQ_5aT2X]fiam%0dVU42tidOJe0h]e<$RTJh