【问题标题】:How to solve and equation with inputs in python [duplicate]如何在python中使用输入求解和方程[重复]
【发布时间】:2018-05-20 03:24:12
【问题描述】:

我正在尝试创建一个在方程式中使用用户输入的 python 程序。当我运行程序时,它给出了这个错误代码,“answer = ((((A*10A)**2)(B*C))*D**E) TypeError: unsupported ** 或 pow() 的操作数类型:'int' 和 'str'"。我的代码是:

import cmath

A = input("Enter a number for A: ")
B = input("Enter a number for B: ")
C = input("Enter a number for C: ")
D = input("Enter a number for D: ")
E = input("Enter a number for E: ")

answer = ((((A*10**A)**2)**(B*C))*D**E)
print(answer)`

【问题讨论】:

    标签: python input equation exponent


    【解决方案1】:

    input()函数返回一个字符串值:需要使用Decimal转换成数字:

    from decimal import Decimal
    
    A = Decimal(input("Enter a number for A: "))
    # ... etc
    

    但您的用户可能输入的不是十进制数,因此您可能需要进行一些检查:

    from decimal import Decimal, InvalidOperation
    
    def get_decimal_input(variableName):
        x = None
        while x is None:
            try:
                x = Decimal(input('Enter a number for ' + variableName + ': '))
            except InvalidOperation:
                print("That's not a number")
        return x
    
    A = get_decimal_input('A')
    B = get_decimal_input('B')
    C = get_decimal_input('C')
    D = get_decimal_input('D')
    E = get_decimal_input('E')
    
    print((((A * 10 ** A) ** 2) ** (B * C)) * D ** E)
    

    【讨论】:

      【解决方案2】:

      编译器认为您的输入是字符串类型。您可以使用 float() 包装 A、B、C、D、E 中的每一个,以将输入转换为浮点类型,前提是您实际上是在终端输入数字。这样一来,您就可以使用浮点数而不是字符串,而 python 不知道如何处理。

      A = float(input("Enter a number for A: "))
      B = float(input("Enter a number for B: "))
      C = float(input("Enter a number for C: "))
      D = float(input("Enter a number for D: "))
      E = float(input("Enter a number for E: "))
      

      【讨论】:

        【解决方案3】:

        该代码在 python 2.7 上运行良好我认为您使用的是 python 3.5+,因此您必须强制转换变量,所以这会变成这样

        import cmath
        
        A = int(input("Enter a number for A: "))
        B = int(input("Enter a number for B: "))
        C = int(input("Enter a number for C: "))
        D = int(input("Enter a number for D: "))
        E = int(input("Enter a number for E: "))
        
        answer = ((((A*10**A)**2)**(B*C))*D**E)
        print(answer)
        

        我测试过

        Enter a number for A: 2
        Enter a number for B: 2
        Enter a number for C: 2
        Enter a number for D: 2
        Enter a number for E: 2
        10240000000000000000
        

        【讨论】:

          【解决方案4】:

          有三种方法可以解决它,要么

          A = int(input("Enter a number for A: "))
          B = int(input("Enter a number for B: "))
          C = int(input("Enter a number for C: "))
          D = int(input("Enter a number for D: "))
          E = int(input("Enter a number for E: "))
          

          这将您限制为整数(整数)

          或:

          A = float(input("Enter a number for A: "))
          B = float(input("Enter a number for B: "))
          C = float(input("Enter a number for C: "))
          D = float(input("Enter a number for D: "))
          E = float(input("Enter a number for E: "))
          

          限制你使用浮点数(小数点两边都有数字,which can act a bit weird

          第三种方式不如其他两种方式推荐,因为我不确定它是否适用于 python 3.x 但它是

          A = num_input("Enter a number for A: ")
          B = num_input("Enter a number for B: ")
          C = num_input("Enter a number for C: ")
          D = num_input("Enter a number for D: ")
          E = num_input("Enter a number for E: ")
          

          【讨论】:

            【解决方案5】:

            input() 返回一个字符串,您必须先将输入转换为integers(或floats,或decimals...),然后才能在数学方程式中使用它们。我建议创建一个单独的函数来包装您的输入,例如:

            def num_input(msg):
                # you can also do some basic validation before returning the value
                return int(input(msg))  # or float(...), or decimal.Decimal(...) ...
            
            A = num_input("Enter a number for A: ")
            B = num_input("Enter a number for B: ")
            C = num_input("Enter a number for C: ")
            D = num_input("Enter a number for D: ")
            E = num_input("Enter a number for E: ")
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2021-12-22
              • 1970-01-01
              • 2013-11-06
              • 1970-01-01
              • 2013-12-05
              • 1970-01-01
              • 2015-07-28
              相关资源
              最近更新 更多