在使用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!
请帮忙!
全心全意,
兰迪
答案 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")