0

我正在尝试创建一个密码生成器,它为列表框中的每一行创建一个新密码,我有一个填充了名称的列表框,我试图获得一个循环来计算列表中有多少个名称以及每个名称创建密码。我有密码生成器,我只是想弄清楚循环的外观。

这是我到目前为止所拥有的。

from tkinter import *
import os, random, string

appWin = Tk() #the main application window
lstBoxArray = [] #an atrray to hold all the listboxes

def passWord():
    length = 8
    chars = string.ascii_letters + string.digits
    random.seed = (os.urandom(1024))
    psword = ''.join(random.choice(chars) for i in range(length))
    print(psword)
    #this section generates a random 'code' which is the password
    #at the moment it is still a stub hence the print command at the end.

stdName = Listbox(frm) #listbox populated by names
stdUserName = Listbox(frm) #listbox where a login username is shown
stdPass = Listbox(frm) #listbox where the passwords will be placed
lstBoxArray = [stdName, stdUserName, stdPass]

scrBar.config(command=setlstBoxYview)          ##
stdName.config(yscrollcommand=scrBar.set)
stdUserName.config(yscrollcommand=scrBar.set)
stdPass.config(yscrollcommand=scrBar.set)
                                              # these are just configuring the listboxs
stdName.grid(column=1,row=0,sticky='NS')
stdUserName.grid(column=4,row=0,sticky='NS')
stdPass.grid(column=5,row=0,sticky='NS')
scrBar.grid(column=6,row=0,sticky='NS')
frm.rowconfigure(0,weight=1)                  ##

所以基本上我的 stdName 列表框填充了大约 28 个名称,它与 stdUserName 列表框相同。我想创建一个循环来计算有多少个名字,并为每个名字创建一个密码。

像这样的东西。

def passGen():
    for i in range(stdName.size()): #this counts how many names there are
        'until there is the same number of pswords as there are i'
        loop the passWord and 
        stdPass.insert(END, passWord) each time it loops
        stop when stdPass == stdName

^^这显然不是代码,但这是我想要得到的^^,我的目标是然后将 passGen 链接到一个按钮。我没有包含我所有的代码,因为它并不是真正相关的,但是对此的帮助将不胜感激。

ps 对不起,如果有任何拼写错误,我不是以英语为母语的人。

4

1 回答 1

0

假设您编辑最后一行passWord以返回密码(而不是打印它), passGen那么简单如下:

def passGen():
     for i in range(stdName.size()):
        stdPass.insert(END, passWord())

创建与名称数量相同数量的密码足以保证您将拥有相同的数量。

如果您将其视为填充密码列以匹配名称列计数,则 while 循环可以更好地反映您的意图:

def passGen():
    while stdPass.size() < stdName.size():
        stdPass.insert(END, passWord())
于 2012-05-08T12:47:39.063 回答