如何只在if语句为true时返回值?

2024-06-16 09:22:40 发布

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

所以我得到了一段让我头疼的代码。在

def Handy():
    print "\nMöchten Sie ein neues Handy?"
    print "\n1 - Ja\n2 - Nein"

    handy = raw_input(">>> ")

    if handy == "2":
        print "\nSie möchten kein neues Handy"
    elif handy == "1":
        wunschhandy = raw_input("\nBitte geben Sie den Namen des Handys ein: ")
    else:
        Handy()
    return handy, wunschhandy

如果我选择选项"1"一切正常。但是如果我选择"2",它会给我一个错误:"UnboundLocalError: local variable 'wunschhandy' referenced before assignment"

我知道为什么会发生,或者至少我想我知道为什么。这是因为变量wunschhandy没有被清除,因为我使用了选项"2"。在

那么我该如何解决这个问题呢?如果某个值是由right if choice指定的,是否有方法只返回该值?在


Tags: 代码inputrawifdef选项handyprint
3条回答

仅根据您提供的代码片段,似乎只有在“handy==”1“”时才定义“wunschhandy”变量,但此变量在最后返回。我将在if语句上方将wunschhandy设置为null,以便在尝试在结尾返回变量之前定义变量。在

在您的例子中,我将在if语句之前设置wunschhandy = None。在

在本例中,您有一个已定义的值,调用者可以测试它。在

另一个选择是

if handy == "2":
    print "\nSie möchten kein neues Handy"
    return handy,
elif handy == "1":
    wunschhandy = raw_input("\nBitte geben Sie den Namen des Handys ein: ")
    return handy, wunschhandy
else:
    Handy()

它为选项1返回长度为2的元组,为选项2返回长度为1的元组。调用者可以很容易地测试这一点。在

此外,我将在其中放入一个循环,而不是递归地调用Handy()。否则,您可能会以堆栈溢出错误结束。。。在

如果只想在用户选择“1”时返回wunschhandy,那么将返回语句放在If块中

def Handy():
    print "\nMöchten Sie ein neues Handy?"
    print "\n1 - Ja\n2 - Nein"

    handy = raw_input(">>> ")

    if handy == "2":
        print "\nSie möchten kein neues Handy"
        return handy
    elif handy == "1":
        wunschhandy = raw_input("\nBitte geben Sie den Namen des Handys ein: ")
        return handy, wunschhandy
    else:
        Handy()
        //do you want to return Handy()?

相关问题 更多 >