программа калькулятора python

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

#!/usr/bin/python

def add():        
        print "Enter the two numbers to Add"
        A=int(raw_input("Enter A:"))
        B=int(raw_input("ENter B:"))
        c = A + B 

def sub():            
        print "Enter the two numbers to Subtract"
        A=int(raw_input("Enter A:"))
        B=int(raw_input("Enter B:"))
        c = A - B

def Mul():
        print "Enter the two numbers to Multiply"
        A=int(raw_input("Enter A:"))
        B=int(raw_input("Enter B:"))
        c = A * B

def Div():   
        print "Enter the two number to Divide"
        A=float(raw_input("Enter A:"))
        B=float(raw_input("Enter B:"))
        c = A / B

print "1: ADDITION"
print "2: SUBTRACTION"
print "3: MULTIPLICATION"
print "4: DIVITION"
print "0: QUIT"

while true:

    CHOICE = int(raw_input(("ENTER THE CORRESPONDING NUMBER FOR CALCULATION")) 

    if CHOICE == "1": 
        print 'ADDING TWO NUMBERS:'
        add(c):

    elif CHOICE == "2":
        print 'SUBTRACTING TWO NUMBERS:'
        sub(c):

    elif CHOICE == "3":
        print 'MULTIPLYING TWO NUMBERS:'
        Mul(c):

    elif CHOICE == "4":
        print "DIVIDEING TWO NUMBERS"
        Div(c):

    elif CHOICE == "0":
        return 0:

    else
        Print "The value Enter value from 1-4"

Ошибка:

  File "cal_fun.py", line 44
    if CHOICE == "1": 
                  ^
SyntaxError: invalid syntax

person Prabhu Are    schedule 01.12.2012    source источник


Ответы (4)


Я попытался охватить все проблемы с вашим кодом, которых очень много.

Начиная с syntax ошибок:

# true needed a captial T
while True:   

    # Brackets were mismatched
    CHOICE = int(raw_input("ENTER THE CORRESPONDING NUMBER FOR CALCULATION")) 

    if CHOICE == "1": 
        print 'ADDING TWO NUMBERS:'
        # Calling a function shouldn't have trailing : 
        add(c)

    elif CHOICE == "2":
        print 'SUBTRACTING TWO NUMBERS'
        # Calling a function shouldn't have trailing :
        sub(c)

    elif CHOICE == "3":
        print 'MULTIPLYING TWO NUMBERS'
        # Calling a function shouldn't have trailing :
        Mul(c)

    elif CHOICE == "4":
        print "DIVIDEING TWO NUMBERS"
        # Calling a function shouldn't have trailing :
        Div(c)

    elif CHOICE == "0":
        # can only return from a function use exit here instead
        exit()

    # else needs a trailing :
    else:
        # No capital P for print
        print "The value Enter value from 1-4"

Теперь в коде нет syntax ошибок, но по-прежнему много проблем.

  1. Вы передаете c своей функции, c никогда не инициализируется, что такое c?
  2. Ваша функция не принимает аргументы def add(): (хотя и передает таинственное значение c).
  3. Ваша функция не print и не return результат, который она только что вычислила.
  4. Вы сохраняете CHOICE как int для сравнения со строками, поэтому случай else всегда выполняется и нет возможности выйти из цикла (бесконечный цикл).

Фиксированный код:

#!/usr/bin/python

def add():
        print "Enter the two numbers to Add"
        A=int(raw_input("Enter A: "))
        B=int(raw_input("Enter B: "))
        return A + B 

def sub():
        print "Enter the two numbers to Subtract"
        A=int(raw_input("Enter A: "))
        B=int(raw_input("Enter B: "))
        return A - B

def mul():
        print "Enter the two numbers to Multiply"
        A=int(raw_input("Enter A: "))
        B=int(raw_input("Enter B: "))
    return A * B

def div():
        print "Enter the two number to Divide"
        A=float(raw_input("Enter A: "))
        B=float(raw_input("Enter B: "))
        return A / B

print "1: ADDITION"
print "2: SUBTRACTION"
print "3: MULTIPLICATION"
print "4: DIVITION"
print "0: QUIT"

while True:

    CHOICE = int(raw_input("ENTER THE CORRESPONDING NUMBER FOR CALCULATION ")) 

    if CHOICE == 1: 
        print 'ADDING TWO NUMBERS:'
        print add()

    elif CHOICE == 2:
        print 'SUBTRACTING TWO NUMBERS'
        print sub()

    elif CHOICE == 3:
        print 'MULTIPLYING TWO NUMBERS'
        print mul()

    elif CHOICE == 4:
        print "DIVIDEING TWO NUMBERS"
        print div()

    elif CHOICE == 0:
        exit()
    else:
        print "The value Enter value from 1-4"

Теперь код работает.

Вывод:

1: ADDITION
2: SUBTRACTION
3: MULTIPLICATION
4: DIVITION
0: QUIT
ENTER THE CORRESPONDING NUMBER FOR CALCULATION 1
ADDING TWO NUMBERS:
Enter the two numbers to Add
Enter A: 2
Enter B: 5
7
ENTER THE CORRESPONDING NUMBER FOR CALCULATION 2
SUBTRACTING TWO NUMBERS
Enter the two numbers to Subtract
Enter A: 2
Enter B: 5
-3
ENTER THE CORRESPONDING NUMBER FOR CALCULATION 3
MULTIPLYING TWO NUMBERS
Enter the two numbers to Multiply
Enter A: 2
Enter B: 5
10
ENTER THE CORRESPONDING NUMBER FOR CALCULATION 4
DIVIDEING TWO NUMBERS
Enter the two number to Divide
Enter A: 2
Enter B: 5
0.4
ENTER THE CORRESPONDING NUMBER FOR CALCULATION 0

Функционально, но не идеально, например, нет обработки ошибок для ошибочного ввода.

person Chris Seymour    schedule 01.12.2012
comment
Я получаю ту же ошибку в операторе if даже после внесения всех изменений. Ошибка aslan@aslan-HP-Pavilion-dv6-Notebook-PC:~/Desktop/python$ python cal_fun.py Файл cal_fun.py, строка 47, если ВЫБОР == 1: ^ SyntaxError: неверный синтаксис - person Prabhu Are; 02.12.2012

Вам не хватает концевой скобки в предыдущей строке (частая причина загадочных синтаксических ошибок), измените:

CHOICE = int(raw_input(("ENTER THE CORRESPONDING NUMBER FOR CALCULATION"))

to

CHOICE = int(raw_input("ENTER THE CORRESPONDING NUMBER FOR CALCULATION"))

Это не единственная синтаксическая ошибка в программе — многие строки заканчиваются на :, когда этого не следует делать, например:

    add(c):
    sub(c):
    Mul(c):
    Div(c):

Вы тоже

  1. не иметь : для оператора else (это обязательно)
  2. используйте заглавную букву Print вместо print
  3. иметь оператор return вне любой функции

Есть также ошибки, которые не являются синтаксическими ошибками:

  1. опечатка True как true
  2. сравните CHOICE, целое число, со строкой вроде "1" или "2"
  3. передают несуществующую переменную c функции, которая не принимает аргументов
person David Robinson    schedule 01.12.2012
comment
Я получаю ту же ошибку в операторе if даже после внесения всех изменений. Ошибка в 47 строке файла cal_fun.py, строка 47 если ВЫБОР == 1: ^ - person Prabhu Are; 02.12.2012
comment
@PrabhuAre: убедитесь, что вы изменили эту строку CHOICE = int(raw_input((" на CHOICE = int(raw_input(" (первое изменение, которое я предложил), это единственное объяснение. Вы можете отредактировать свой вопрос, включив в него новый код. (Кроме того, вы уверены, что редактируете правильный файл и что вы его сохранили?) - person David Robinson; 02.12.2012

Вы передаете переменную c своим функциям add() sub() и т. д., но они определены без аргументов.

person Matt    schedule 01.12.2012

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

def add():
    A=int(raw_input("Enter A:"))
    B=int(raw_input("ENter B:"))
    return A + B
...

while true:

    CHOICE = int(raw_input(("ENTER THE CORRESPONDING NUMBER FOR CALCULATION")) 

    if CHOICE == "1": 
        print 'ADDING TWO NUMBERS:'
        answer = add()
        print answer
    ...

или, в качестве альтернативы, укоротите программу, введя A и B в основной цикл, а затем передав их в качестве параметров вычислительным функциям:

def add():
    return A + B
...

while true:

    CHOICE = int(raw_input(("ENTER THE CORRESPONDING NUMBER FOR CALCULATION")) 
    A=int(raw_input("Enter A:"))
    B=int(raw_input("ENter B:"))
    if CHOICE == "1": 
        print 'ADDING TWO NUMBERS:'
        answer = add(A, B)
        print answer
    ...
person Stuart    schedule 01.12.2012
comment
Можно ли будет получить доступ к функции add() в других программах, если я воспользуюсь этим методом. - person Prabhu Are; 03.12.2012