python - 如何将字符串转换为 float (不添加行)

标签 python string int calculator

我正在尝试用尽可能少的行编写 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/

相关文章:

python - 元组的 Pandas 数据框?

java - 尝试运行 Google Search Api 时出现 StringIndexOutofBoundsException

c - C中的double到int的转换

actionscript-3 - 为什么我不能在 OS X Lion x64 上的 Flash Player 11 中拥有 120,000x120,000 像素的位图数据?

c++ - 让函数返回字符串而不是整数不好吗? (C++)

python - 在 Windows 7x64 上从 Python3.x 调用 Matlab2013

python - 在 Any 上调用 __new__

python - 将 BoxLayout 与 GridLayout 内的按钮居中

javascript - 正则表达式获取第一个 "space"之后的文本?

linux - 使用命令行用一个逗号替换连续的空格