当我返回的变量有一个关联的字符串时,我的函数返回None

2024-09-29 23:20:24 发布

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

database_id = []

def makeID(name, count=1):
    y = None
    x = str(name + str(count))
    if x in database_id:
        count = count + 1
        makeID(name, count)
    if x not in database_id:
        y = str(name + str(count))
        database_id.append(y)
    if y != None:
        count = 1
        return y

我正在运行这个: print(makeID('Eric'))

我一个也没有收到。 但是当我打印数据库id时,它会显示列表,['Eric1']

变量y也是字符串“Eric1”


我知道这不是最有效的,但一旦它从根本上起作用,我就能使它更有效


Tags: nameinnoneidreturnifdefcount
2条回答

在本例中,它将返回None,因为当您的名称已经存在于数据库_id中时,递归方法的第一次执行不会将局部y变量设置为您的返回值。下面是一个例子:

假设数据库_id已经包含“eric1”

makeID('eric')->;x包含在数据库中->;makeID将使用(name,count=2)递归调用,它将返回y,y等于eric2,但它不会被任何东西捕获

简而言之,你应该在第8行加上一个报税表

如果您感兴趣,这里有一个快速的方法来重构您的方法以保持其递归性:

def makeID(name, count=1):
    unique_name = str(name + count)
    if unique_name not in database_id:
        database_id.append(unique_name)
        return unique_name
    else:
        return makeID(name, count+1)enter code here

在您的条件if x in database_id:中,您从不赋值y,这意味着您的条件if y != None:为False,并且不会执行(您只有在该条件中有一个return语句)本质上返回None。此外,您不需要对此类问题使用递归,您可以轻松地迭代解决它:

database_id = []

def makeID(name):
    count = 1
    while name + str(count) in database_id:
        count += 1
    user_id = name + str(count)
    database_id.append(user_id)
    return user_id

相关问题 更多 >

    热门问题