Skip to main content
 首页 » 编程设计

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

2025年05月04日19birdshome

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