python:active_目录模块:检查用户名
在使用active_目录模块时出现了一个奇怪的问题,顺便说一句,这是令人惊讶的。。。很棒的包装 无论如何,我需要确保用户名是唯一的。。。这是我的职责:python:active_目录模块:检查用户名,python,active-directory,Python,Active Directory,在使用active_目录模块时出现了一个奇怪的问题,顺便说一句,这是令人惊讶的。。。很棒的包装 无论如何,我需要确保用户名是唯一的。。。这是我的职责: 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
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
>>>
萨斯米特回来了。。。为什么它不返回值?!?!打印uname有效,但返回uname不返回任何值
请帮忙
谢谢大家
兰迪哦,天哪。。。容易多了
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")
它没有返回
SaSmith
,因为没有返回递归部分,因此如果x
为true,则函数返回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\u目录,则第一行阻止无限循环。对于每个n
,find\u user(fname[:n]\u lname)
都是真的
我同意@Randall的观点,使用for
循环可能更具可读性,在上述情况下,它返回None