我正在尝试用尽可能少的行编写 Python 计算器,到目前为止(理论上)我已经将它减少到 10。唯一的问题是我似乎无法弄清楚如何将两个字符串更改为 float , 无需添加更多行。
x = raw_input("Enter calc instructions. ")
a, b, c = x.split()
if b == "-":
print (a-c)
elif b == "+":
print (a+c)
elif b == "*":
print (a*c)
elif b == "/":
print (a/b)
我知道我必须在某个地方执行float(),只是我还没找到位置。
编辑:*我试图尽可能地降低它的挑战,在这种情况下,我不在乎它是否凌乱。我也知道不要让您的代码过于“重叠”和混淆。
最佳答案
如果你想要简短,那么下面就是简短的(尽管你可以将第 2 行和第 3 行合并在一起)。但是,它不是可读的。
from operator import add, sub, truediv, mul
ops = {"+": add, "-": sub, "/": truediv, "*": mul}
x, op, y = [float(string) if i % 2 == 0 else string for i, string in enumerate(raw_input("Enter calc instructions. ").split())]
print(ops[op](x, y))
从所有这一切中得出的教训是,虽然简洁是好的——较短的代码通常更快、更容易阅读——但如果代码过于复杂,则无法达到简洁的目的。
对于虐待狂(以上作为一个衬垫):
(lambda x, op, y, operator=__import__("operator"), opnames={"+": "add", "-": "sub", "/": "truediv", "*": "mul"}: getattr(operator, opnames[op])(x, y))(*[float(s) if i % 2 == 0 else s for i, s in enumerate(raw_input("Enter calc instructions. ").split())])
对于知道如何使用的人 ast.literal_eval
:
__import__("ast").literal_eval(raw_input("Enter calc instructions.\n"))
对于那些不介意他们的计算器存在安全漏洞的人...
input("Enter calc instructions.\n")
关于python - 如何将字符串转换为 float (不添加行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29082423/