Функция Def не возвращает никаких выходных данных, даже если указан правильный ввод

#python

Вопрос:

Я новичок в программировании, использую Python 3.9. Итак, я делаю простую математическую программу из того, что я понимаю в чтении и учебниках.

вот код:

 print('n Simple Math ')


def num():

    if choice == 1:
        sum = first_num   second_num
        print('Sum is: ', sum)
    elif choice == 2:
        diff = first_num - second_num
        print('Difference is: ', diff)
    elif choice == 3:
        mul = first_num * second_num
        print('Product is: ', mul)
    elif choice == 4:
        div = first_num / second_num
        print('Quotient is: ', div)


while True:
    print('n 1. Add: n 2. Subtract: n 3. Multiply: n 4. Divide: n')
    choice = int(input('Select an operator: '))
    if choice > 4 or choice < 1:
        choice = int(input('Input only valid selection from above! nSelect again: '))
        first_num = float(input('Enter first number: '))
        second_num = float(input('Enter second number: '))
        num()
    break
 

Моя проблема выше заключается в том, что, когда я добавил часть «Ввод только допустимого выбора сверху!», если пользователь вводит данные за пределами номера выбора, он ничего не делает, когда я пытаюсь ввести от 1 до 4. Но если я введу 5, это будет хорошо работать.

Я уже пытался поместить first_num и second_num за пределы цикла while или выше def, пытался поместить num() перед while, но все равно выдает ошибку. Я сомневаюсь в части «если выбор > 4 или выбор > Хотя я вроде как застрял и не знаю, что делать дальше.

Буду признателен за любую помощь… спасибо

Простите, я действительно абсолютный новичок… 😅

Комментарии:

1. Передайте значения функции в качестве аргументов.,

2. У вас есть все внутри if . Посмотрите на заявление. Если вы введете юридическое значение, ничего не запустится. Вам нужна строка else: после строки «Ввод только допустимого выбора».

3. Здесь есть много вопросов, связанных с базовыми знаниями. Просмотрите множество руководств по функциям и утверждениям if, они, как правило, гораздо более высокого качества, чем комментарии и ответы на stackoverflow, и вам даже не нужно ждать.

Ответ №1:

Ваш код был довольно хорошим началом. Однако было несколько недостатков.

  1. вам нужно передать переменные для использования в вашу num функцию
  2. вы должны индивидуализировать логику ввода 3 чисел (я использовал здесь отдельную функцию).

Ниже приведена рабочая версия.

Теперь вы можете попытаться улучшить его, например, добавив проверки значений first_num/second_num (скажем, запретить 0 i second_num для деления). Вы также можете попытаться переместить проверки в validate_input функцию.

 print('n Simple Math ')

def num(choice, first_num, second_num):

    if choice == 1:
        sum = first_num   second_num
        print('Sum is: ', sum)
    elif choice == 2:
        diff = first_num - second_num
        print('Difference is: ', diff)
    elif choice == 3:
        mul = first_num * second_num
        print('Product is: ', mul)
    elif choice == 4:
        div = first_num / second_num
        print('Quotient is: ', div)

def validate_input(prompt='?: ', input_type=int):
    while True:
        try:
            return input_type(input(prompt))
        except ValueError:
            print('Incorrect input')

while True:
    print('n 1. Add: n 2. Subtract: n 3. Multiply: n 4. Divide: n')
    choice = -1
    while choice > 4 or choice < 1:
        choice = validate_input('Select an operator: ')
    first_num = validate_input('Enter first number: ', float)
    second_num = validate_input('Enter second number: ', float)
    num(choice, first_num, second_num)
 

Комментарии:

1. так мило… спасибо за понимание. Кстати, о «подсказке=»? «»в разделе проверка, это тот, который содержит значение ввода в целом?

2. Это значение по умолчанию в приглашении, если вы можете использовать функцию, не устанавливая ее

Ответ №2:

Не нужно извиняться, вы сказали, что вы новичок, ошибки случаются с продвинутыми программистами. Вы должны передать эти числа в функцию, чтобы использовать ее. Также в условии if его лучше использовать while , потому что, как только вы введете неверный ввод, он покажет ошибку, а затем снова запросит ввод. Теперь, даже если вы введете неверный ввод, он будет принят, потому что он не будет снова проверять, правильно ли он введен. Попробуйте сделать это:

 print('n Simple Math ')


def num(first_num, second_num):

    if choice == 1:
        sum = first_num   second_num
        print('Sum is: ', sum)
    elif choice == 2:
        diff = first_num - second_num
        print('Difference is: ', diff)
    elif choice == 3:
        mul = first_num * second_num
        print('Product is: ', mul)
    elif choice == 4:
        div = first_num / second_num
        print('Quotient is: ', div)


while True:
    print('n 1. Add: n 2. Subtract: n 3. Multiply: n 4. Divide: n')
    choice = int(input('Select an operator: '))
    while choice > 4 or choice < 1:
        choice = int(input('Input only valid selection from above! nSelect again: '))
    first_num = float(input('Enter first number: '))
    second_num = float(input('Enter second number: '))
    num(first_num,second_num)
    break
 

Комментарии:

1. спасибо за это… похоже, что while лучше, так как каждый раз, когда я использую if, я всегда зацикливаюсь на том, как я должен зацикливать его, когда ввод неверен…

2. Точно. If проверит условие только один раз, в то время как будет проверять каждый раз, когда вы вводите ввод