0

active_directory モジュールの使用中に奇妙な問題が発生しました。これは素晴らしいところで...素晴らしいラッパーです。

とにかく、ユーザー名が一意であることを確認する必要があります...私の機能は次のとおりです。

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

それは None を思い付き続けます...私はそれが 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 は機能しますが、return uname は None を返します!

助けてください!

皆さんありがとう、

ランディ

4

2 に答える 2

2

SaSmith再帰部分が返されていないため、返されていなかったため、truexの場合、関数は返されNoneました。1つ追加すると修正される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)注:が True の場合、最初の行は無限ループを防ぎますn

forループを使用する方がおそらく読みやすいという@Randallに同意しますNone。上記の場合に戻ります。

于 2012-08-30T15:20:26.127 に答える
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")
于 2012-08-30T15:14:56.060 に答える