初学程序员:密码生成器

时间:2015-10-20 08:30:39

标签: python passwords ascii

正如标题所说,我对编程完全不熟悉。不幸的是,我得到了可怕的卡住。我必须使用ASCII表制作随机密码生成器。我不允许导入字符串,也不允许使用字母表字符串并从中选择字符,我只允许使用CHR或ORD函数,列表以及我在课堂上教过的其他非常基本的级别函数。我被鼓励定义自己的功能。

我让代码短暂工作但是每个选项执行3次,因此超过了7-14的字符数。所以相反,我尝试了一个有三个选项的变量,它应该根据它得到的大写,小写或数字执行。到目前为止,这是我的代码:

for loop in range(10):

    import random

    password = ""
    randLength = random.randint(7, 14)

    lower = random.randint(97, 122)
    upper = random.randint(65, 90)
    number = random.randint(0, 9)

    for n in range(randLength):
        randChoice = random.randint(1, 3)
        if randChoice == 1:
            choice = lower
        elif randChoice == 2:
            choice = upper
        else:
            choice = number
        result = chr(lower) + chr(upper) + str(number)
    password += result

    print(password)

截至目前,我的编码是打印一个小写,一个大写和一个数字(每次都以完全相同的顺序),但它不会重复该过程以达到所需的随机长度7-14,我也不希望它保持相同的模式'每次,它都意味着随意。

我如何修改我的代码以防止在输出中并排出现两个相同的字符?请帮助新手!感谢

3 个答案:

答案 0 :(得分:2)

这有效:

from random import randint

randLength = randint(7,14)
characters = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
password = ''
for i in range(randLength):
    password += characters[randint(0, len(characters) - 1)];
print password

答案 1 :(得分:1)

我能想到的最蟒蛇的方式是:

>>> from random import sample, randint
>>> from itertools import chain
>>> from string import ascii_letters, digits
>>> print ''.join(sample(list(chain(ascii_letters, digits)), randint(7, 14)))
qniksOzH0w

这适用于您和您的限制:

for loop in range(10):
    import random

    password = ""
    randLength = random.randint(7, 14)

    for n in range(randLength):
        lower = random.randint(97, 122)
        upper = random.randint(65, 90)
        number = random.randint(0, 9)
        randChoice = random.randint(1, 3)
        while True:
            if randChoice == 1:
                choice = chr(lower)
            elif randChoice == 2:
                choice = chr(upper)
            else:
                choice = str(number)
            if not choice in password:
                password += choice
                break

    print(password)

输出:

3UA25yqL
GmdH1dT4M9
6rUUtMe7GkK
G5VSfH4XLP05Q
wbQF2gh29V4sk
yv74xlxL2S2SH
473TUlfh5
N3F5W8j
S5U1K0fcJl4cOE
62R4ZT1k

答案 2 :(得分:1)

这里有一些问题,但你所描述的问题是因为结果只是三个随机字符加在一起。您没有使用' choice'的价值。任何地方:

result = chr(lower) + chr(upper) + str(number)  

尝试在循环中添加结果,而不是分配给选择:

if randChoice == 1:  
    result = result + lower  

一旦你这样做,你就会发现第二个问题......