python:active\u directory模块:正在检查usernam

2024-06-16 12:38:58 发布

您现在位置:Python中文网/ 问答频道 /正文

有一个奇怪的问题,而使用活动的目录模块,这是惊人的顺便说一句。。。很棒的包装。在

无论如何,我需要确保用户名是唯一的。。。我的职责是:

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")

它总是找不到。。。我希望它能回来。。。或者

^{pr2}$

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

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
>>>

萨斯密斯回来了。。。为什么不返回值?!?!打印uname有效,但return uname返回None!在

请帮忙!在

谢谢大家

兰迪


Tags: name目录returnifdeffindfnameelse
2条回答

它没有返回SaSmith,因为递归部分没有被返回,所以如果x为真,则函数返回{}。添加一个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为真,则第一行防止无限循环。在

我同意@Randall的观点,即使用for循环可能更具可读性,在上面的例子中,它返回None

哦,天哪。。。容易得多。在

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")

相关问题 更多 >