Как получить сообщение «Ошибка», напечатанное в этой ситуации, потому что выражение «еще» не работает? - PullRequest
0 голосов
/ 27 сентября 2018

Напишите программу, которая читает на входе три целых числа a, b и c.Если целое число c равно 1, то программа выводит (выводит) значение a + b;если c равно 2, то программа отображает значение ab;если c равно 3, то на выходе будет значение a b.Наконец, если значение 4 назначено для c, то программа отображает значение a ^ 2 + b a.Если c содержит другое значение, программа отображает сообщение «Ошибка»

a = int(input())
b = int(input())
c = int(input())

if c == 1:
    print(a + b)

if c == 2:
    print(a - b)

if c == 3:
    print(a * b)

if c == 4:
    print(a**2 + b*a)

else:
    print('Error')

Ответы [ 4 ]

0 голосов
/ 27 сентября 2018

Ты почти у цели.Основная проблема вашей программы в том, что ваши операторы if независимы, тогда как утверждение о проблемах предполагает, что их не должно быть.Измените их для операторов elif, что будет означать, что ваша ветвь Error выполняется только тогда, когда c вычисляется как целое число, которого нет в наборе {1, 2, 3, 4}.


Проблема 1: программа имеет(возможно) плохой поток управления

В большинстве языков программирования оператор if является базовой конструкцией, используемой для условного выполнения блока кода, если выражение истинно.В следующем Python-подобном псевдокоде код за блоком if выполняется только в том случае, если значение, полученное вычислением EXPRESSION, истинно:

if EXPRESSION:
    # Do something only if EXPRESSION is true

# Execution continues here after the "if" block irrespective of
# whether EXPRESSION was true and the body of the "if" statement
# was executed.

Вы можете дополнить операторы if с помощью else ветви.В этом случае мы выполняем тело оператора if, если EXPRESSION оценивается как true, и выполняем другой ветвь ветви (ветвь else), если условие не оценивается как true (по законуисключенное среднее, это ложно):

if EXPRESSION:
    # As before, control is passed here if EXPRESSION is true.
else:
    # If EXPRESSION was false, control is passed to this arm.

# After executing either the "if" arm or the "else" arm, control
# returns to the outer scope outside the "if" statement.

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

if answers(fixed_telephone):
    # Connect to the fixed telephone to communicate
else:
    if answers(portable_telephone):
        # Connect to the portable telephone to communicate
    else:
        # Not available on either telephone. Send an email.

Как вы можете себе представить, эта логика быстро усложняется, если есть много вложенных условий «если», что не является необычным в реальных сценариях.Большинство языков программирования предоставляют конструкцию, позволяющую выводить вложенные операторы «if» на верхний уровень.В Python это elif, и код, эквивалентный приведенному выше:

if answers(fixed_telephone):
    # ...
elif answers(portable_telephone):
    # ...
else:
    # ...

(комментарии для краткости).

В вашем коде, как написано в настоящий момент, каждый из вашихif операторы будут выполняться независимо , за исключением последнего if c == 4, который упадет до ветви else, если c не равно 4. Как вы хотите, чтобы тесты cбыть взаимоисключающими, т.е. вы не хотите, чтобы что-либо происходило, если передан более ранний случай, и вы хотите вывести ошибку только в том случае, если none случаев было выполнено, вы должны использовать вложенные операторы ifкоторые лучше всего реализованы с использованием вышеупомянутой языковой конструкции elif.


Проблема 2: программа принимает правильно сформированные целые числа

Ваша программа также принимает значения, считанные из STDIN для ab и c - правильные целые числа.Если вы введете значение, которое не может быть проанализировано как целое число, оно прервется при целочисленном преобразовании в вызове int(...) и не достигнет вашей линии print('Error').Это пример того, как Python вызывает исключение , потому что обнаружена проблема, от которой интерпретатор не может самостоятельно восстановиться.Поток управления не начнет выполнять блоки if, поэтому оператор print никогда не будет выполнен.

Если вы хотите исправить эту проблему , вам нужно пойматьОшибка, возвращаемая методом int(...), когда он не может проанализировать предоставленное значение как целое число.Это значит научиться ловить исключения, о которых вы можете узнать больше в документации по Python .

(Подсказка: Python вызовет встроенное исключение типа ValueError при вводеint не может быть проанализирован, поэтому вам нужно обернуть вызовы, которые заполняют три переменные a, b и c блоком try... catch, который перехватывает такую ​​ошибку:

try:
    a = int(input())
catch ValueError:
    # Implement logic to handle this error, which may include
    # returning an error from your function, setting a default
    # value, or taking some action. You can optionally take
    # some action locally, such as print a log message, and then
    # re-raise the exception so it propagates to this method's
    # callers (using the "raise" keyword).
0 голосов
/ 27 сентября 2018

После первого оператора if вы должны использовать elif, что сокращенно от "else if".Там нет сообщения об ошибке, потому что нет ошибки, у вас просто неверная логика.Компилятор обрабатывает каждый оператор if независимо, так что иначе он работает, пока c не равен 4.

0 голосов
/ 27 сентября 2018

Похоже, что вы его получили, просто используйте elif вместо цепочки ifs, вы также можете добавить сообщение внутри input('Here'), которое будет напечатано при запросе ввода

a = int(input("Enter a number: ))

b = int(input("Enter a number: ))

c = int(input("Enter a number: ))

if c == 1 :
    print(a + b)
elif c == 2 :
    print(a - b)
elif c == 3 :
    print(a * b)
elif c == 4 :
    print(a**2 + b*a)
else:
    print('Error')
0 голосов
/ 27 сентября 2018

Ваша if работа, но вы несколько сместили логику.

Использование if elif и else

if c==something:
    print("this")
elif c==something_else:
    print("that")
else:
    print("error") 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...