正如标题所说,我对编程完全不熟悉。不幸的是,我得到了可怕的卡住。我必须使用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,我也不希望它保持相同的模式'每次,它都意味着随意。
我如何修改我的代码以防止在输出中并排出现两个相同的字符?请帮助新手!感谢
答案 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
等
一旦你这样做,你就会发现第二个问题......