python:active_directory模块:检查​​用户名

时间:2012-08-30 15:12:25

标签: python active-directory

在使用active_directory模块时遇到一个奇怪的问题,这是一个惊人的BTW ......很棒的包装器。

无论如何,我需要确保用户名是唯一的...继承我的功能:

import active_directory

def creative_name(fname, lname, n=1):
    uname = fname[:n] + lname
    x = active_directory.find_user(uname)
    if x: creative_name(fname, lname, n+1)
    else: return uname

if __name__=='__main__':
    print creative_name("Sarah", "Smith")

它不断提出无...我希望它能够返回uname ...或

fname[:n+1] + lname

奇怪,因为如果我运行这样的函数:

def creative_name(fname, lname, n=1):
    uname = fname[:n] + lname
    x = active_directory.find_user(uname)
    if x: creative_name(fname, lname, n+1)
    else: print uname

>>>
SaSmith
>>>

SaSmith被退回了......为什么它不会返回值?!?! print uname有效,但返回uname返回None!

请帮忙!

全心全意,

兰迪

2 个答案:

答案 0 :(得分:2)

它没有返回SaSmith因为没有返回递归部分,所以如果x为真,则函数返回None。添加一个return应修复:

def creative_name(fname, lname, n=1):
    if n > len(fname): return None
    uname = fname[:n] + lname
    x = active_directory.find_user(uname)
    if x: return creative_name(fname, lname, n+1)
    else: return uname

注意:如果每个active_directory.find_user(fname[:n]_lname) n为True,则第一行会阻止无限循环。

我同意@Randall使用for循环可能更具可读性,在上述情况下返回None

答案 1 :(得分:0)

哦,男人......更容易。

import active_directory

def creative_name(fname, lname):
    for i in range(1,len(fname)):
        uname = fname[:i] + lname
        x = active_directory.find_user(uname)
        if not x: return uname

if __name__=='__main__':
    print creative_name("Sarah", "Smith")