【发布时间】:2017-11-20 17:08:58
【问题描述】:
我希望这是一个重复的问题,但我找不到答案。对不起。
我编写了一个简单的函数,它应该返回一个空字符串或一个字符的字符串。但是,有时它会返回 None。 即使它应该匹配其中一个操作数,并且如果不匹配,仍会输出一个字符串。
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 语句:
# else: is not necessary
return ""
工作正常。但是,我仍然想知道为什么永远不会触发这个 else 语句。
P.S.:有没有更简洁的方法来解释字符串,例如 "10 - 7 = 3" 以获得布尔结果?我对 python 比较陌生,什么都想不出来。
编辑:
以下代码,参数脱离上下文,打印无:
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:。 - “”返回。
我仍然想知道为什么没有显示我预期的这种行为,但没关系。仅使用一个 return 语句以及不使用 else: 是很好的解决方案。
我还发现了以下作品,这与我想要完成的工作最接近:
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 ""
我已经多次为所有解决方案计时,这个最终解决方案似乎比拆分 if 语句和使用一个返回的变量快 15%。
【问题讨论】:
-
你说的这个else语句永远不会触发是什么意思,因为如果操作数不是有效的运算符就会被触发。
-
请添加一个示例,说明您如何调用该函数以及为什么它的行为不像您希望的那样。
-
您的函数有时返回
None的原因是因为您并不总能找到导致return的条件。当它在没有return的情况下从您的外部if中退出时,它将直接落入函数末尾并给出默认返回值。 -
&在python中不是逻辑运算符,它是二元运算符。你的意思可能是and。
标签: python python-3.x if-statement