在Python中使用if和else进行菜单导航

时间:2017-11-04 14:29:51

标签: python if-statement

这是我使用if和else语句的小菜单导航:

def navigation():


    navigation_eingabe = int(input())


    if navigation_eingabe == 1:
        met1()
    if navigation_eingabe == 2:
        pass
    if navigation_eingabe == 3:
        pass
    if navigation_eingabe == 4:
        pass
    if navigation_eingabe == 5:
        pass
    if navigation_eingabe == 6:
        pass
    else:
        print("Pls give only Integer numbers")


def met1():
    print("method1")
    met2()

def met2():
    print("method2")


navigation()

它没有正常工作,在我将输入为1后,代码转到met1,然后转到meth2,然后转到else语句。我不知道为什么?

然后我用一个例子编写这个替代代码:

def navigation ():
    x = int(input())

    if x == 1:
        print("1")
        xx1()
    if x == 2:
        print("2")
        xx2()
    else:
        print("else statement")


def xx1():
    print("this is met1")

def xx2():
    print("this is met2")


navigation()

但是在这段代码中,语句工作正常,为什么不在第一个代码中呢?这是函数式编程逻辑的问题,还是语句结构的问题?但我看不出这两个代码的区别。

谢谢!

3 个答案:

答案 0 :(得分:1)

之所以发生这种情况,是因为您认为navigation()函数的执行会在第一个if语句后停止。这是错误的,因为有更多if语句而不是elif

因此请使用elif代替更多if语句

if navigation_eingabe == 1:
    met1()
elif navigation_eingabe == 2:
    pass
elif navigation_eingabe == 3:
    pass
elif navigation_eingabe == 4:
    pass
elif navigation_eingabe == 5:
    pass
elif navigation_eingabe == 6:
    pass
else:
    print("Pls give only Integer numbers")

答案 1 :(得分:1)

因为您使用连续的if语句而不是elif语句,所以Python解释器将每个块视为单独的决策,因此navigation()首先评估navigation_eingabe == 1是否1 1}}。对于输入提示符处的navigation_eingabe == 2条目,这是真的。然后,因为下一行被视为一个单独的决策语句,它会检查if navigation_eingabe == 6: pass else: print("Pls give only Integer numbers") ,依此类推,直到它到达下一个块:

navigation_eingabe == 6

解释员使用比较True输入决策者,并对此进行评估,无论前五个比较中的任何一个是False还是False。此比较评估为navigation_eingabe == 1,因为else,我们将else块作为一个包含所有内容。

此外,永远不会达到非整数输入的int(input())子句,因为ValueError会针对无法转换为int的任何内容引发navigation()例外。要捕获非整数输入,您应该将try的内容分为exceptdef navigation(): try: navigation_eingabe = int(input()) if navigation_eingabe == 1: met1() elif navigation_eingabe == 2: pass elif navigation_eingabe == 3: pass elif navigation_eingabe == 4: pass elif navigation_eingabe == 5: pass elif navigation_eingabe == 6: pass except ValueError: print("Please only enter integers.") def met1(): print("method1") met2() def met2(): print("method2") navigation() 块。

我怀疑你实际上要做的是以下内容:

1

为此,当您在提示符处输入1 method1 method2 时,输出如下:

""

答案 2 :(得分:1)

在python中,当在同一个块中测试多个条件时,对第一个条件使用if,之后对其他条件语句使用elif,然后使用elseelse下的代码块仅在其他条件为False时运行。您的代码存在的问题是您使用if语句来使用elif。您的第一个代码转到else语句的原因是因为无论第一个if语句的结果如何,您的上一个if语句都会运行。

if navigation_eingabe == 1:
    met1()
elif navigation_eingabe == 2:
    pass

将其余的elif语句放在最后,并以else语句结束,因此如果其他条件都不成立则会打印出来:

else:
    print('Pls only give integer numbers.')

但是,此代码不符合您的想法。您正在使用else语句进行异常处理。这不起作用。您需要的是try-except声明:

try:
    navigation_eingabe = int(input())
    if navigation_eingabe == 1:
        met1()
    elif navigation_eingabe == 2:
        pass
    elif navigation_eingabe == 3:
        pass
    elif navigation_eingabe == 4:
        pass
    elif navigation_eingabe == 5:
        pass
    elif navigation_eingabe == 6:
        pass
    else:
        print('not a number 1-6')
except ValueError: #the type of error if you try to convert a non-integer string to an int.
    print('Pls only give integer numbers.')

如果将无效字符串传递给输入,这将检查每个条件并捕获错误。