Нужна помощь в создании этого калькулятора в Python3 - PullRequest
0 голосов
/ 06 мая 2020
import operator
num1 = float(input("Enter first number: "))
operation = ("")

ops = {
    "+" : operator.add,
    "_" : operator.add,
    "*" : operator.mul,
    "/" : operator.div
}


while operation != ops:
    operation = input("Enter operator: ")
    print("false entry")

num2 = float(input("Enter second number:"))

result = (float(num1) + ops + float(num2))
print(result)

Я пытаюсь сделать так, чтобы оператор, если ввод не оператор, повторить и попросить еще раз набрать до тех пор, пока он не станет равен одной из операций, перечисленных в словаре.

I только начал кодировать как 4 дня go и толком не знаю, в чем проблема. Я был бы рад, если бы мне кто-нибудь помог.

Ответы [ 4 ]

2 голосов
/ 06 мая 2020

Хорошая попытка! Здесь есть несколько проблем ...

В операциях вам следует изменить вторую пару ключ / значение, чтобы включить вычитание, возможно, вы ищете что-то вроде этого:

ops = {
    "+" : operator.add,
    "-" : operator.sub,
    "*" : operator.mul,
    "/" : operator.div
}

Когда спрашивая оператора, вы должны проверить, находится ли оператор в ключах ops. Теперь вы проверяете, совпадает ли оператор со словарем ops. Как указывает @Ayam, это может быть что-то вроде этого:

operation = input("Enter operator: ")
while operation not in ops:
    print("false entry")
    operation = input("Enter operator: ")

Наконец, возникает проблема при выполнении расчета. Когда у вас есть операция и вы уверены, что она находится в ключах ops, вы можете использовать значение (в данном случае функцию), связанное с этим ключом:

result = ops[operation](num1, num2)
print('result is', result)

Надеюсь, это поможет! Продолжай учиться! :)

1 голос
/ 06 мая 2020

Вы рядом! Попробуйте следующее:

operation = input("Enter operator: ")
 while operation not in ops:
   print("false entry")
   operation = input("Enter operator: ")

Что не так в вашем коде, так это то, что операционная переменная сравнивается со словарем под названием ops. Установив флажок 'operator in ops', вы проверяете, соответствует ли оператор одной из клавиш команды ops.

0 голосов
/ 06 мая 2020

оператор импорта num1 = float (input ("Введите первое число:"))

ops = {"+": operator.add, "_": operator.add, "*": operator. mul, "/": operator.truediv} operation = input ("Enter operator:") while True: if operation not in ops: print ("Wrong input") operation = input ("Enter operator:") else: break num2 = float (input ("Введите второе число:"))

result = ops [operation] (num1, num2) print ('result is', result)

0 голосов
/ 06 мая 2020

попробуйте это:

   import operator
num1 = float(input("Enter first number: "))
operation = ("")

ops = {
    "+" : operator.add,
    "_" : operator.add,
    "*" : operator.mul,
    "/" : operator.truediv
}

while operation not in ops:
    operation = input("Enter operator: ")
    if(operation not in ops):
        print("false entry")

num2 = float(input("Enter second number:"))

result = (ops.get(operation)(float(num1),float(num2)))
print(result)

Небольшие изменения:

  1. while operation != ops: сравнивает строку со всем dict, поэтому сначала извлеките ключи, а затем сравните

    while operation not in ops:

  2. Вы печатаете «Ложный ввод», только если операция недействительна, поэтому:

    if(operation not in ops): print("false entry")

  3. Почему вы добавляете здесь dict и 2 значения

    result = (float(num1) + ops + float(num2))

Вы хотите использовать операторную функцию. Часть значения dict, поэтому вам нужно извлечь ее с помощью dict.get (key). Также для операторных функций требуются оба аргумента, поэтому сделайте следующее:

    `result = (ops.get(operation)(float(num1),float(num2)))`

Пример: ops.get ("+") (2,2) возвращает operator.add (2,2) = 4

...