Python - else statement is never triggered
我希望这是一个重复的问题,但我找不到答案。我很抱歉。
我编写了一个简单的函数,它应该返回一个空字符串或一个字符的字符串。但是,有时它不会返回任何值。即使它应该匹配其中一个操作数,如果不匹配,它仍然输出一个字符串。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | baseconvert = digits+ascii_lowercase+"0" def checker(operand, factorlist): # hardcoded interpreter of the calculus converted in base 10. i is equal to the base. if (operand == '+'): if (factorlist[0] + factorlist[1] == factorlist[2]): return baseconvert[i] elif (operand == '-'): if (factorlist[0] - factorlist[1] == factorlist[2]): return baseconvert[i] elif (operand == '*'): if (factorlist[0] * factorlist[1] == factorlist[2]): return baseconvert[i] elif (operand == '/'): if (factorlist[0] / factorlist[1] == factorlist[2]): return baseconvert[i] else: return"" |
因此,当我输入这篇文章时,我发现我可以删除else语句:
1 2 | # else: is not necessary return"" |
工作良好。然而,我仍然想知道为什么这个else语句从未被触发。
注意:有没有一种更清晰的方法来解释字符串,例如"10-7=3"来得到布尔结果?我对python比较陌生,什么都想不出来。
编辑:以下代码(参数不在上下文中)不打印任何内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | from string import digits, ascii_lowercase baseconvert = digits+ascii_lowercase+"0" def checker(operand, factorlist): # hardcoded interpreter of the calculus converted in base 10. i is equal to the base. if (operand == '+'): if (factorlist[0] + factorlist[1] == factorlist[2]): return baseconvert[i] elif (operand == '-'): if (factorlist[0] - factorlist[1] == factorlist[2]): return baseconvert[i] elif (operand == '*'): if (factorlist[0] * factorlist[1] == factorlist[2]): return baseconvert[i] elif (operand == '/'): if (factorlist[0] / factorlist[1] == factorlist[2]): return baseconvert[i] else: return"" i=17 print(checker('+', [1987,222,2227])) |
预期结果:
if (operand =="+") 是真的。if (factorlist[0] + factorlist[1] == factorlist[2]) 是假的。- 第15行的
else: 被调用。 - "回来了。
我仍然想知道为什么我所期望的这种行为没有表现出来,但不管怎样。只使用一个返回语句以及不使用
我还发现了以下作品,这与我试图完成的工作最接近:
1 2 3 4 5 6 7 8 9 10 11 | def checker(operand, factorlist): # hardcoded interpreter of the calculus converted in base 10. i is equal to the base. if ((operand == '+') & (factorlist[0] + factorlist[1] == factorlist[2])): return baseconvert[i] elif ((operand == '-') & (factorlist[0] - factorlist[1] == factorlist[2])): return baseconvert[i] elif ((operand == '*') & (factorlist[0] * factorlist[1] == factorlist[2])): return baseconvert[i] elif ((operand == '/') & (factorlist[0] / factorlist[1] == factorlist[2])): return baseconvert[i] else: return"" |
我对所有的解决方案都进行了多次计时,而且最终的解决方案似乎比使用split if语句和使用一个返回变量快15%。
您的父
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | def checker(operand, factorlist): if operand == '+': if (factorlist[0] + factorlist[1] == factorlist[2]): ... elif operand == '-': if (factorlist[0] - factorlist[1] == factorlist[2]): ... elif operand == '*': if (factorlist[0] * factorlist[1] == factorlist[2]): ... elif operand == '/': if (factorlist[0] / factorlist[1] == factorlist[2]): ... return"" |
您还可以安全地删除最终的
这是主观的,但很多人会说一个函数中只有一个
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | baseconvert = digits+ascii_lowercase+"0" def checker(operand, factorlist): # hardcoded interpreter of the calculus converted in base 10. i is equal to the base. final_value ="" if operand == '+': if factorlist[0] + factorlist[1] == factorlist[2]: final_value = baseconvert[i] elif operand == '-': if factorlist[0] - factorlist[1] == factorlist[2]: final_value = baseconvert[i] elif operand == '*': if factorlist[0] * factorlist[1] == factorlist[2]: final_value = baseconvert[i] elif operand == '/': if factorlist[0] / factorlist[1] == factorlist[2]: final_value = baseconvert[i] return final_value |
注意,在python中,您只需要在条件周围加上括号就可以获得优先权,大多数情况下不需要括号。