Предмет: Информатика, автор: s201141181s

Питон! 70 баллов! Напишите программу, которая возвращает сумму 2 чисел. Если один из аргументов не является числом (целым или вещественным), функция должна вернуть строку:
"1st argument is not a number"
"2nd argument is not a number"
"all arguments are not a numbers"

Ответы

Автор ответа: csharp
1

Решение "в лоб": на логических конструкциях.

isInt(s) - целочисленное ли число в строке

isFloat(s) - вещественное ли число в строке

Стоит внести ясность в конструкции на строках 25,  27 и 28. Начнём  по порядку:

1. (int(a) if isIntA else float(a)) + (int(b) if isIntB else float(b)) - сумма результатов двух тернарных операторов, имеющих вид:

<результат при True> if <условие> else <результат при False>

Если перевести на русский язык: <перевод строки в целочисленное число>, если <в строке a целочисленное число>, иначе <перевод строки в вещественное число>. Аналогично с выражением после +.

2. isIntOrFloatA ^ isIntOrFloatB - логическая операция XOR, которая возвращает True только в двух случаях: когда только один из операторов равен True или False.

3. 1 if isIntOrFloatA == False else 2 - аналогичная первому выражению запись тернарного оператора: если isIntOrFloatA равняется False (если первый аргумент - не число), то выводим 1, иначе - 2.

Код:

  1. def isInt(s):
  2.    try:  
  3.        int(s)
  4.        return True
  5.    except ValueError:
  6.        return False
  7. def isFloat(s):
  8.    try:  
  9.        float(s)
  10.        return True
  11.    except ValueError:
  12.        return False
  13. def sum(a, b):
  14.  isIntA = isInt(a)
  15.  isFloatA = isFloat(a)
  16.  isIntB = isInt(b)
  17.  isFloatB = isFloat(b)
  18.  isIntOrFloatA = isIntA or isFloatA
  19.  isIntOrFloatB = isIntB or isFloatB
  20.  if isIntOrFloatA and isIntOrFloatB:
  21.    return (int(a) if isIntA else float(a)) + (int(b) if isIntB else float(b))
  22.  else:
  23.    if isIntOrFloatA ^ isIntOrFloatB:
  24.      return "{}st argument is not a number".format(1 if isIntOrFloatA == False else 2)
  25.    else:
  26.      return "all arguments are not a numbers"
  27. a = input()
  28. b = input()
  29. print(sum(a, b))
Похожие вопросы
Предмет: Математика, автор: tatyanakondral