【问题标题】:Fixing calculator function code that returns incorrect numerical value in Python?修复在 Python 中返回错误数值的计算器函数代码?
【发布时间】:2020-03-02 05:48:29
【问题描述】:

我正在尝试用 Python 编写一个简单的 4 函数计算器程序,但我遇到了输出问题。我可以返回正确的添加值,但不能返回任何其他函数。我的代码如下所示:

def binop(expression):
    """expression = math expression"""
    if expression.find("+") != -1:
        operator = expression.find("+")
        num1 = int(expression[0:operator])
        num2 = int(expression[operator + 1: -1])
        return num1 + num2
    elif expression.find("-") != -1:
        operator = expression.find("-")
        num1 = int(expression[0:operator])
        num2 = int(expression[operator + 1: -1])
        return num1 - num2
    elif expression.find("/") != -1:
        operator = expression.find("/")
        num1 = int(expression[0:operator])
        num2 = int(expression[operator + 1: -1])
        return num1 / num2
    elif expression.find("*") != -1:
        operator = expression.find("*")
        num1 = int(expression[0:operator])
        num2 = int(expression[operator + 1: -1])
        return num1 * num2

但它会返回不正确的减法、乘法和除法值。添加很好。

有什么建议吗?我不允许导入或使用任何 eval 或 compile 函数。

【问题讨论】:

    标签: python math calculator


    【解决方案1】:

    您对num2 使用了不正确的切片操作。

    切片的一般语法是"a[start:stop:step]" where

    • 开始 一个整数,指定在哪个位置 开始切片。默认为 0
    • end一个整数,指定在哪个位置结束切片
    • step 指定切片步骤的整数。 默认为 1

    考虑表达式expression = "10/20",这里操作符的索引是2,当你调用expression[operator + 1: -1]时,这将返回2而不是20

    所以你必须调用expression[operator + 1:],这样它才能返回20。 这是正确的代码:

    def binop(expression):
        """expression = math expression"""
        if expression.find("+") != -1:
            operator = expression.find("+")
            num1 = int(expression[0:operator])
            num2 = int(expression[operator + 1:])
            return num1 + num2
        elif expression.find("-") != -1:
            operator = expression.find("-")
            num1 = int(expression[0:operator])
            num2 = int(expression[operator + 1:])
            return num1 - num2
        elif expression.find("/") != -1:
            operator = expression.find("/")
            num1 = int(expression[0:operator])
            num2 = int(expression[operator + 1:])
            return num1 / num2
        elif expression.find("*") != -1:
            operator = expression.find("*")
            num1 = int(expression[0:operator])
            num2 = int(expression[operator + 1:])
            return num1 * num2
    

    【讨论】:

      猜你喜欢
      • 2014-05-19
      • 1970-01-01
      • 1970-01-01
      • 2019-05-02
      • 1970-01-01
      • 2013-07-04
      • 2014-11-17
      • 2019-11-29
      • 2020-12-08
      相关资源
      最近更新 更多