Как проверить операторы с целыми числами для программы калькулятора? - PullRequest
0 голосов
/ 08 декабря 2018

Я пытаюсь создать программу, которая позволяет пользователю вводить один из 4 операторов (сложение, вычитание, умножение или деление), а затем два числа.Затем программа рассчитывает операцию.Я не могу проверить операторы для вывода, хотя.Я пытаюсь с if ... else заявлением сейчас, но не повезло.Здесь есть указатели?

operator = ""
numbers = []
inputNumbers = ["first number", "second number"]

def userInput():
    try:
        operator = input("Please choose a valid operation (+, -, *, /): ")
    except:
        print("Please enter a valid operator.")
    for inputNumber in inputNumbers:
        user_num_input = -1
        while user_num_input < 0:
            try:
                user_num_input = int(input("Type in {}: ".format(inputNumber)))
            except:
                user_num_input = -1
                print("Please enter a whole number.")
            if user_num_input > -1:
                numbers.append(user_num_input)
userInput()

def addNumbers():
    add = numbers[0] + numbers[1]
    return add(numbers)

def subNumbers():
    sub = numbers[0] - numbers[1]
    return sub(numbers)

def mulNumbers():
    mul = numbers[0] * numbers[1]
    return mul(numbers)

def divNumbers():
    div = numbers[0] / numbers[1]
    return div(numbers)

def userOutput():
    if operator == "+":
        print(numbers[0], "+", numbers[1], "=", addNumbers())
    elif operator == "-":
        print(numbers[0], "-", numbers[1], "=", subNumbers())
    elif operator == "*":
        print(numbers[0], "*", numbers[1], "=", mulNumbers())
    elif operator == "/":
        print(numbers[0], "/", numbers[1], "=", divNumbers())
userOutput()

Ответы [ 3 ]

0 голосов
/ 08 декабря 2018

Вы должны использовать встроенный operator модуль Python.Тогда вы можете использовать такой диктовку:

import operator

operator_dict = {"+": operator.add, 
                 "-": operator.sub, 
                 "*": operator.mul,
                 "/": operator.truediv}
user_input = input("Please choose a valid operation (+, -, *, /): ")
operator_func = operator_dict.get(user_input, None)
# if operator_func is not None then the input was correct!
if operator_func is not None:
    ... get the numbers ...
    print("{}{}{}={}".format(num1, user_input, num2, operator_func(num1, num2))

Таким образом, вам не нужно самостоятельно реализовывать простую функциональность оператора.

0 голосов
/ 08 декабря 2018

Самый простой и чистый способ сделать это - использовать модуль operator в Python, поэтому ваш метод userOutput будет выглядеть следующим образом.Несколько изменений, которые вы должны сделать в своем коде, это переименовать переменную hour operator в op, так как это будет конфликтовать с именем модуля python, и обновить operator как возврат от userInput():

import operator
op = ""
numbers = []
inputNumbers = ["first number", "second number"]
operators = {
        '+' : operator.add,
        '-' : operator.sub,
        '*' : operator.mul,
        '/' : operator.truediv,
        '%' : operator.mod,
        '^' : operator.xor,
}

def userInput(op):
    while not op:
        op = input("Please choose a valid operation (+, -, *, /): ")
        if op not in operators:
            print("Please enter a valid operator.")
            op = ""
    for inputNumber in inputNumbers:
        user_num_input = -1
        while user_num_input < 0:
            try:
                user_num_input = int(input("Type in {}: ".format(inputNumber)))
            except:
                user_num_input = -1
                print("Please enter a whole number.")
            if user_num_input > -1:
                numbers.append(user_num_input)
    return op

def userOutput(op, operators):
    result = operators[op](numbers[0], numbers[1])
    print("{} {} {} = {}". format(numbers[0], op, numbers[1], result))

op = userInput(op)
userOutput(op, operators)
0 голосов
/ 08 декабря 2018

Вы должны проверить, если пользователь ввел правильную операцию, try except здесь не будет работать, так как input() не выдаст никаких ошибок.Также вот более элегантный способ получить 2 действительных целых числа от пользователя и вычислить окончательное уравнение (используя eval())

inputNumbers = ["first number", "second number"]
operations = ['+', '-', '*', '/']

numbers = []
operator = ''

while not operator:
    operator = input('Please choose a valid operation (+, -, *, /): ')
    if operator not in operations:
        print("Please enter a valid operator.")

while len(numbers) < len(inputNumbers):
    try:
        numbers.append(int(input("Type in {}: ".format(inputNumbers[len(numbers)]))))
    except:
        print("Please enter a whole number.")

result = eval(operator.join(map(str, numbers)))
print('{} {} {} = {}'.format(numbers[0], operator, numbers[1], result))

Вывод:

Please choose a valid operation (+, -, *, /): addition
Please enter a valid operator.
Please choose a valid operation (+, -, *, /): /
Type in first number: 123.321
Please enter a whole number.
Type in first number: 10 
Type in second number: hundred
Please enter a whole number.
Type in second number: 100
10 / 100 = 0.1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...