我正在创建密码生成器,但不知道为什么它不起作用

时间:2019-11-10 20:27:26

标签: python passwords generator

基本上,我是python的新手,我正在使用python 3尝试创建一个密码生成器,只是出于乐趣,但我一直遇到问题。当我在Pydroid 3中尝试以下代码时,它可以按预期工作,即创建一个由用户确定长度的混合字符(符号,大小写字母和数字)密码,但是当我在Pycharm上运行时尽管说我想要超过1个字符,但我只能得到1个字符。有人知道这个问题吗?

import random
import string
import pyfiglet

print(pyfiglet.figlet_format('Password Generator!\n', font="digital"))

length = int(input('How many characters long do you want the password to be? '))
alphabet = list(string.ascii_lowercase)
numbers = range(0, 10)
specialchar = list(string.punctuation)
char = ('alfa', 'num', 'char')
pw = []
passw = ''

while length > 0:
    if random.choice(char) == 'alfa':
        x = str(random.choice(alphabet))
        pw.append(x)
        passw = ''.join(x)
        length -= 1
    elif random.choice(char) == 'num':
        x = str(random.choice(numbers))
        pw.append(x)
        passw = ''.join(x)
        length -= 1
    else:
        x = str(random.choice(specialchar))
        pw.append(x)
        passw = ''.join(x)
        length -= 1


def randomupper(c):
    if random.random() > 0.5:
        return c.upper()
    return c.lower()


password = ''.join(map(randomupper, passw))
print(f'Your randomly generated password is: {password}')

4 个答案:

答案 0 :(得分:0)

更改此行,它将起作用

password = ''.join(map(randomupper, pw))

使用passw = ''.join(x),您可以将x内的一个char与空char ''一起迭代地添加到变量passw中,并且当循环结束时,它内部只会有一个char。 但是pw.append(x)x内的字符添加到pw的末尾并增加其大小。 如此简单,当您使用passw而不是pw时,您只会看到循环中创建的最后一个字符。

答案 1 :(得分:0)

这是因为字符串passw仅将最新字符x附加到其自身。它根本不与列表pw进行交互。不需要同时拥有pwpassw,而是在每个if语句中使用pw += x,这些语句直接附加到字符串,然后将最后一行更改为 password = ''.join(map(randomupper, pw))

答案 2 :(得分:0)

主要问题是行$python manage.py crontab show Currently active jobs in crontab: a98d13d636dc8b4373d916ae9a5cb1b5 -> ('* * * * *', 'productsHome.cron.my_scheduled_job') 删除了密码,并仅用最后生成的字符替换了密码。

其他一些需要改进的地方:

  • 要运行固定次数的循环,passw = ''.join(x)确保循环准确执行for i in range(length)次,而无需初始化,更新和测试变量
  • 类似于length的代码,对于每种情况,都可以将它们放在相同的if-tests中
  • 您的变量pw已经是一个字符串,因此pw.append(x)仅复制了字符串

更新的代码:

passwd = ''.join(pw)

答案 3 :(得分:0)

到目前为止,我已经阅读了所有回复,你们的员工对我帮助很大,谢谢!我意识到passw =''.join(x)语句中应该有一个错误,应该是passw =''.join(pw)