Как решить и уравнение с входными данными в python

Я пытаюсь создать программу на Python, которая использует пользовательский ввод в уравнении. Когда я запускаю программу, она выдает этот код ошибки: "answer = ((((A*10A)**2)(B*C))*D**E) TypeError: не поддерживается тип(ы) операнда для ** или 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)`

person John smith    schedule 20.05.2018    source источник


Ответы (5)


Функция 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)
person Richard Inglis    schedule 20.05.2018

Компилятор считает, что ваши входные данные имеют строковый тип. Вы можете обернуть каждый из A, B, C, D, E с помощью float(), чтобы привести ввод к типу с плавающей запятой, при условии, что вы фактически вводите числа на терминале. Таким образом, вы берете полномочия чисел с плавающей запятой вместо строк, с которыми 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: "))
person Wesley    schedule 20.05.2018

Этот код будет работать нормально для 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
person Usama Jamil    schedule 20.05.2018

есть три способа исправить это, либо

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: "))

который ограничивает вас целыми числами (целыми числами)

or:

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: "))

который ограничивает вас числами с плавающей запятой (которые имеют числа по обе стороны от десятичной точки, что может вести себя немного странно)

третий способ не так рекомендуется, как два других, так как я не уверен, что он работает в 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: ")
person 3NiGMa    schedule 20.05.2018

input() возвращает строку, вы должны преобразовать свои входные данные в целые числа (или число с плавающей запятой или десятичные числа...), прежде чем вы сможете использовать их в математических уравнениях. Я бы предложил создать отдельную функцию для переноса ваших входных данных, например:

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: ")
person zwer    schedule 20.05.2018