基本上,我是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}')
答案 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
进行交互。不需要同时拥有pw
和passw
,而是在每个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.append(x)
仅复制了字符串更新的代码:
passwd = ''.join(pw)
答案 3 :(得分:0)
到目前为止,我已经阅读了所有回复,你们的员工对我帮助很大,谢谢!我意识到passw =''.join(x)语句中应该有一个错误,应该是passw =''.join(pw)