【问题标题】:How to use some operator that has been scraped from a string如何使用从字符串中抓取的一些运算符
【发布时间】:2020-04-29 05:20:14
【问题描述】:

我正在尝试根据整数之间的符号来加、减或乘两个整数,如5 + 6。当我在脚本中明确使用 + 时,它可以工作。但是,我希望从给定的字符串中解析该运算符,以便使用 int(numbers[0]) + operator + int(numbers[1]) 或类似的东西。

我试过了:

import re

str_number = "5 + 6"

numbers = re.findall('[0-9]+', str_number)
operator = re.findall('([^\s\d]+?)',str_number)[0]
result = int(numbers[0]) + operator + int(numbers[1])
print(result)

当我运行上面的,我得到下面的错误:

result = int(numbers[0]) + operator + int(numbers[1])
TypeError: unsupported operand type(s) for +: 'int' and 'str'

【问题讨论】:

    标签: python python-3.x operators


    【解决方案1】:

    您可以使用内置的operator 模块并定义一个mappings 字典,将给定的运算符映射到其相应的操作。 使用:

    import operator
    
    mappings = {'+': operator.add, '-': operator.sub, '*': operator.mul, '/': operator.floordiv}
    
    equation = "5 + 6"
    n1, op, n2 = equation.split()
    result = mappings[op](int(n1), int(n2))
    
    print(result)
    

    打印出来:

    11
    

    【讨论】:

      【解决方案2】:

      如果我是正确的,那是不可能的,因为操作符变量是 str,但数字 number 变量是 int,如果没有类型转换,您将无法对它们做任何事情 但是你可以通过使用 if else 语句来实现你的想法。

      【讨论】:

        【解决方案3】:

        尝试一下,将方程转换为字符串并使用 eval() 函数

        result = numbers[0] + operator + numbers[1]
        print(eval(result))
        

        【讨论】:

        • eval 很危险,这里不需要
        • 有几种方法可以做同样的事情,他没有要求一种不危险的方法,所以 eval 有效:)
        猜你喜欢
        • 2020-04-29
        • 1970-01-01
        • 2020-09-30
        • 1970-01-01
        • 2013-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多