我正在尝试调用两个函数:randompassword()
和validPassword()
。 randompassword()
函数向用户返回随机密码。 validPassword()
函数检查密码是否在2到8个字符之间。我正在尝试创建使用这两个功能的第三个程序来生成随机密码,然后检查密码是否有效。如果不是,程序应再次运行该程序并跟踪其运行了多少次。
#EX7P1
import string
import random
import sys
from ex7p1 import randompassword
from ex7p2 import validPassword
count = 0
def main():
def randompassword():
while password != 'true':
count = count + 1
print ("Hello!", password)
print (count)
main()
这些是功能所在的程序。
#EX7P1
import string
import random
import sys
def randompassword(): #function randompassword
password = ''
chars = string.ascii_uppercase + string.ascii_lowercase + string.digits
size = random.randint(7, 10) #set range from 7 to 10
for x in range(size):
y = random.randint(33,126)
password += chr(y)
return password
这是两个单独的程序。
from ex7p1 import randompassword
password = randompassword()
def validPassword(password):
if len(password) >= 8:
print("true")
return True
print("false")
return False
validPassword(password)
答案 0 :(得分:0)
哦,男孩,这段代码我看错了很多……
1)可以很容易地将它们组合成一个脚本,如下所示,这使整个过程变得不太混乱。
2)您在字符串上调用方法isalnum()
,并返回True
或False
...这两个值都不会大于或等于2。 >
3)就个人而言,我喜欢使用尽可能少的填充变量。您可以看到,在random_password()
中,您可以取出y
并将呼叫随机放在下一行
4)为什么要浪费时间测试密码至少为8个字符???只需将其更改为仅生成至少8个字符的密码即可,如下所示。
5)您的代码中有未使用的导入和变量。如果您将它们取出来(IDE是您的朋友),您的代码将更加简单明了。
6)您的变量名应该比在任何地方都使用password
更具体。当您尝试重复使用代码时,这将使调试变得更容易,并且在几个月/几年后变得更容易阅读。
7)我还调整了以122结尾的ascii代码,以消除没人想要输入密码的奇怪括号
import random
def random_password():
generated_password = ''
for x in range(random.randint(8, 13)):
generated_password += chr(random.randint(33, 122))
return generated_password
def validate_password(password_being_tested):
if password_being_tested.isalnum():
return True
else:
return False
if __name__ == '__main__':
count = 0
while True:
count += 1
password = random_password()
test = validate_password(password)
if test:
break
print("It took {} tries to make a password".format(count))
print("Resulting password was: '{}'".format(password))
此脚本在我的计算机上进行22次尝试后生成了“ 7nLGxDFeqf”,这对我来说似乎是一个合理且随机的密码!