这是我使用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()
但是在这段代码中,语句工作正常,为什么不在第一个代码中呢?这是函数式编程逻辑的问题,还是语句结构的问题?但我看不出这两个代码的区别。
谢谢!
答案 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
的内容分为except
和def 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
,然后使用else
。 else
下的代码块仅在其他条件为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.')
如果将无效字符串传递给输入,这将检查每个条件并捕获错误。