Как сделать калькулятор python, который может складывать, вычитать, умножать, делить, степени и по модулю более чем на два числа - PullRequest
0 голосов
/ 20 июня 2020

Я новичок в Python, и мне было интересно, как сделать калькулятор, который я могу складывать, вычитать, умножать, делить и другие операторы для более чем двух чисел. Буду признателен, если вы дадите мне объяснение. Я сомневаюсь, потому что у меня в голове ужасный и неэффективный способ сделать это, а именно добавить больше тегов elif для большего количества операторов и большего количества чисел

TL: DR (я думаю): я думал о создании калькулятор, сделанный с python, который имеет варианты для большего количества операторов и чисел (но я не знаю, как сделать более простой: например: 30 + 30 * 30. 67,874 / 20. 69 + 69 + 69 + 69 + 69 + 69. 30 ** (я думаю, это оператор мощности) 2. et c. Я могу помочь вам, если вы не поняли, чего я хочу, вы можете задать мне вопрос

Ответы [ 2 ]

0 голосов
/ 21 июня 2020

это мой обычный калькулятор без ввода более двух чисел и одного оператора

def add(x, y):
return x + y


def subtract(x, y):
return x - y


def multiply(x, y):
return x * y


def divide(x, y):
return x / y


num1 = float(input("Enter a number :"))
op = input("Enter your selected operator :")
num2 = float(input("Enter another number :"))

if op == "+":
print(num1, "+", num2, "=", add(num1, num2))

elif op == "-":
print(num1, "-", num2, "=", subtract(num1, num2))

elif op == "*":
print(num1, "*", num2, "=", multiply(num1, num2))

elif op == "/":
print(num1, "/", num2, "=", divide(num1, num2))

else:
print("Invalid input")

Я знаю, что этот код комментария / ответа не имеет отступа, но стек не позволяет мне публиковать с отступом и сам файл имеет отступы, поэтому idk

0 голосов
/ 20 июня 2020

ваш вопрос недостаточно ясен, но если я правильно понял, то это должно сработать. Важно отметить: использование функции eval () не является хорошей практикой, поскольку это может быть очень опасно, если входные данные исходят не от вас. Вот некоторые из его опасностей: https://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html

Код:

# the function takes an operator as a string like: “*” and multiple numbers thanks to the * (args) operator.
def calculate(operator, *numbers):
    
    result = numbers[0]

    #the for cycle goes through all numbers except the first
    for number in range(1, len(numbers)):
        #the eval() function makes it possible to python to interpret strings as a code part
        result = eval(f"{result} {operator} {str(numbers[i])}")
    print(result)

Вот код без eval ().


import operator

# the function takes an operator as a string like: “*” and multiple numbers thanks to the * (args) operator.
def calculate(op, *numbers):

   # binding each operator to its string counterpart
   operators = {
       "+": operator.add,
       "-": operator.sub,
       "*": operator.mul,
       "/": operator.truediv
   }

   result = numbers[0]

   #the for cycle goes through all numbers except the first
   for number in range(1, len(numbers)):
       # carrying out the operation, using the dictionary above
       result = operators[op](result, numbers[number])
   print(result)

...