从字符串中解析加法/减法/乘法/除法符号

时间:2016-07-11 10:43:17

标签: python python-2.7 python-3.x

我经历了使用Python创建一个简单计算器的课程,我正在尝试简化它。 问题如下: 我知道可以使用“float()”将字符串(数字)解析为浮点数,但我试图将字符串中的加法/减法/乘法/除法符号解析为浮点数或整数或任何其他符号将执行该操作的格式。以下是我正在尝试做的一个示例:

while True:
    user_input = input("""
        quit - exit program
        add - addition
        sub - subtraction
        mul - multiplication
        div - division
        Please choose function:""")
    actions = ("+-*/")
    user_input_1 = float(input("first number:"))
    user_input_2 = float(input("second number:"))
    operation = user_input_1 float(action) user_input_2
    if user_input == "add":
        action = actions[0]
        answer = operation
        print (answer)

如果user_input为“add” user_input_1是“5” user_input_2为“7” 然后打印(答案)应该导致12

这只是代码的第一部分,我收到了语法错误。问题很可能是无法使用“float()”解析加法符号。还有另一种解析标志的方法吗?

4 个答案:

答案 0 :(得分:3)

即使你应该发布完整的追溯,SyntaxError来自这一行:

operation = user_input_1 float(action) user_input_2

它既不是有效的Python表达式,也不是语句。

不涉及eval的解决方案: 您可以将operator模块和“sign”中的字典用于操作符本身,如此基本(易出错)示例中所示:

import operator

operations_dict = {'+': operator.add,
                   '-': operator.sub} # extend to other operators you see fit

a = float(input('first num'))
b = float(input('second_num'))
sign = input('operator')
print(operations_dict[sign](a, b))
>> first num
   1
>> second num
   2
>> operator
   +
>> 3.0

答案 1 :(得分:1)

在你的情况下,这应该有效:

def operation(action): 
    return user_input_1 + action + user_input_2

if user_input == "add":
    action = actions[0]
    answer = operation(action)
    print (eval(answer))

但这不是进行操作的最佳方式。您可以像这样简单adddivide,也可以为操作构建dictionary

def operation(action): 
    if(action == "add"):
        return user_input_1 + user_input_2
    elif action == "sub":
        return user_input_1 - user_input_2
    elif action == "div":
        return user_input_1 / user_input_2
    # and so on....

answer = operation(user_input)
print (answer)

答案 2 :(得分:0)

您可以在eval('1 + 2')形式中使用eval,这将为您提供所需的结果。 您可以在此处阅读有关eval的更多信息https://docs.python.org/2/library/functions.html#eval

但请记住以下声明

  

用户可以在程序中公开隐藏值,或者调用危险值   function(dangerous_function(“/ etc / passwd”))。当然在大多数情况下   (桌面程序)用户不能做任何超出他们能做的事情   编写自己的python脚本,但在某些应用程序(Web应用程序,   自助服务电脑),这可能是一种风险。

来自http://lybniz2.sourceforge.net/safeeval.html

答案 3 :(得分:0)

I do not recommend using eval() however; setting some rules won't hurt using eval(). This is really basic calculator and its easy to understand.

allowed_characters = "0123456789+-/*= "
print("""
Basic calculator application.
Operators:
    +   addition
    -   subtraction
    *   multiplication
    /   division
Type the desired operation and press ENTER. 
(Example 23 and 46 to multiple
Type 23 * 46 then press ENTER.)
""")
while True:
    data = input("Please enter your calculation: ")
    if data == "q":
        print("Exiting...")
        break
    for s in data:
        if s not in allowed_characters:
            print("Invalid character!")
            quit()
    calculate = eval(data)
    print(calculate)