2016-12-14 6 views
-1

Когда я запускаю и запускаю код, программа, похоже, не сохраняет вход c, поэтому не продолжает код для выполнения остальной функции калькулятора.Почему мой калькулятор Python не работает?

def calc(): 

    print("Press 1 for addition") 
    print("Press 2 for subtraction") 
    print("Press 3 for multiplication") 
    print("Press 4 for division") 

    c = input() 

    if c == 1: 
     print("Enter a number") 
     x = input() 
     print("Enter another number") 
     y = input() 
     return x + y 

    elif c == 2: 
     print("Enter a number") 
     x = input() 
     print("Enter another number") 
     y = input() 
     return x - y 

    elif c == 3: 
     print("Enter a number") 
     x = input() 
     print("Enter another number") 
     y = input() 
     return x * y 

    elif c == 4: 
     print("Enter a number") 
     x = input() 
     print("Enter another number") 
     y = input() 
     return x/y 

calc() 

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

def calc(): 
print("Press 1 for addition") 
print("Press 2 for subtraction") 
print("Press 3 for multiplication") 
print("Press 4 for division") 

c = int(input()) 

def get_inputs(): 
    print("Enter a number") 
    x = int(input()) 
    print("Enter another number") 
    y = int(input()) 
    return x, y 

if c == 1: 
    x, y = get_inputs() 
    return x + y #These return functions seem to be an error 

elif c == 2: 
    x, y = get_inputs() 
    return x - y 

elif c == 3: 
    x, y = get_inputs() 
    return x * y 

elif c == 4: 
    x, y = get_inputs() 
    return x/y 

calc() 
+4

'вход()' возвращает строку в Python 3; вам нужно целое число 'c = int (input())' –

+0

В чем проблема? – harshil9968

ответ

0

input() в Python 3 такой же, как raw_input() в Python 2.7, который возвращает объект str. Вы должны явно ввести отливка его int

c = int(input()) 
+0

Это не касается всех проблем и не объясняет, почему это необходимо .. – Li357

0

Во-первых, использовать c = int(input()) вместо того, чтобы преобразовать входную строку в целое. Кроме того, только чтобы сделать чище программы, так как вы уже используете функции (calc), могли бы также поставить входную часть для каждой операции в функции:

def get_inputs(): 
    print("Enter a number") 
    x = int(input()) 
    print("Enter another number") 
    y = int(input()) 
    return x, y 

И тогда для каждой операции сделать что-то вроде :

if c == 1: 
    a, b = get_inputs() 
    return a + b 

(Edit) попробуйте это:

def get_inputs(): 
    print("Enter a number") 
    x = int(input()) 
    print("Enter another number") 
    y = int(input()) 
    return x, y 

def calc(): 
    print("Press 1 for addition") 
    print("Press 2 for subtraction") 
    print("Press 3 for multiplication") 
    print("Press 4 for division") 

    c = int(input()) 

    if c == 1: 
     x, y = get_inputs() 
     return x + y 

    elif c == 2: 
     x, y = get_inputs() 
     return x - y 

    elif c == 3: 
     x, y = get_inputs() 
     return x * y 

    elif c == 4: 
     x, y = get_inputs() 
     return x/y 

calc() 
+0

Это сработало отлично, но теперь у меня возникают проблемы с отступом. Все еще новые и привыкание к тому, как работают отступы. –

+0

Где у вас проблемы с отступом? – abacles

+0

get_inputs() для каждой математической функции –