Python CodeLab Вопрос об исключениях - Попробуйте, кроме ValueError - PullRequest
0 голосов
/ 19 апреля 2020

question :

"Три переменные - x, y и z - предположительно содержат строки цифр, подходящие для преобразования в целые числа. Напишите код, который преобразует их в целые числа, и напечатайте сумма этих трех целых чисел. Однако, если какая-либо переменная имеет значение, которое не может быть преобразовано в целое число, выведите строку «bad value (s) in:», за которой следуют имена переменных, имеющих неправильные значения (разделенные через пробелы, в алфавитном порядке возрастания).

Например, если значения x, y и z были соответственно «3», «9» и «2», то число 14 будет напечатано С другой стороны, если бы значения были «ab c», «15» и «boo», то результат был бы: неверные значения в: x z. "


Примечание: Этот вопрос из Craft CodeLab компании Turing, который, кажется, требует определенного стандартного ввода c, чтобы получить правильный ответ. Я включил «анализ ошибок», который CodeLab предоставлял мне после каждой попытки, чтобы дать вам представление о формате, который он ищет.


Попытка # 1 :

error_output = "Bad values in:"
numeric_output = 0
inputs = input().strip().split(" ")
try:
    x = int(inputs[0])
    numeric_output += x
except ValueError:
    error_output += " x"
try:
    y = int(inputs[1])
    numeric_output += y
except ValueError:
    error_output += " y"
try:
    z = int(inputs[2])
    numeric_output += z
except ValueError:
    error_output += " z"
if error_output != "Bad values in:":
    print(error_output)
else:
    print(numeric_output)

Хотя этот код работает без проблем на Idle и Pycharm, это неправильный ответ на CodeLab ... Вот анализ ошибок CodeLab из моего первая попытка :


  1. В каждом тестовом случае : а) стандартный вывод неверен и б) ничего не было напечатано на стандартный вывод
  2. Вы почти наверняка должны использовать: +
  3. Я еще не видел правильное решение, которое использует: ""
  4. Я еще не видел правильное решение, которое использует: "x"
  5. Я еще не видел правильное решение, которое использует: "y"
  6. Я еще не видел правильное решение, которое использует: "z"
  7. Мы думаем, что вы могли бы рассмотреть возможность использования: ==
  8. Мы худеем k Вы можете рассмотреть возможность использования: sum
  9. Решения с вашим подходом обычно не используют: ! =
  10. Решения с вашим подходом don обычно не используют: . (период)
  11. Решения с вашим подходом обычно не используют: 1
  12. Решения с вашим подходом обычно не используют: 2
  13. Решения с вашим подходом обычно не используют: []
  14. Решения с вашим подходом обычно не используют: input
  15. Решения с вашим подходом обычно не используют: strip
  16. Мы думаем, что вы могли бы рассмотреть возможность использования: not

Моя вторая попытка :

try:
    print(int(x) + int(y) + int(z))
except ValueError:
    print("bad value(s) in:")
    if not x.isdigit():
        print(' x')
    if not y.isdigit():
        print(' y')
    if not z.isdigit():
        print(' z')

' Анализ ошибок ' из Попытка # 2:


  1. В некоторых тестовых случаях : стандартный вывод неверен
  2. Вы почти наверняка должны использовать: =
  3. Я еще не видел правильное решение, которое использует: "неверные значения в:"
  4. Я еще не видел правильное решение, которое использует: 'x'
  5. Я еще не видел правильное решение, которое использует: * 11 33 * 'y'
  6. Я еще не видел правильное решение, которое использует: 'z'
  7. Вы почти наверняка должны использовать: str
  8. Мы думаем, что вы можете рассмотреть возможность использования: , (запятая)
  9. Решения с вашим подходом обычно не используют: ValueError

Наконец, вот моя третья попытка (которая, согласно CodeLab, является наиболее точной):

try:
    print(int(x) + int(y) + int(z))
except ValueError:
    print("bad value(s) in:",end='')
    if not x.isdigit():
        print('x',end='')
    if not y.isdigit():
        print('y',end='')
    if not z.isdigit():
        print('z',end='')

' Анализ ошибок ' из Попытка # 3:


  1. В некоторых тестовых случаях : стандартный вывод неправильный
  2. Я еще не видел правильное решение, которое использует: "неверные значения в:"
  3. Решения с вашим подходом обычно не используют: ''
  4. Решения с вашим подходом обычно не используют: ValueError

Что мне здесь не хватает?

Ответы [ 3 ]

0 голосов
/ 19 апреля 2020

это также должно работать, возможно:

try:
    print(int(x)+int(y)+int(z))
except ValueError:
    print('bad value(s) in:', end=' ')
    if not x.isdigit():
        print('x', end=' ')
    if not y.isdigit():
        print('y', end=' ')
    if not z.isdigit():
        print('z', end=' ')
0 голосов
/ 19 апреля 2020

Спасибо за помощь, ребята! Я нашел ответ:

try:
    sum = int(x) + int(y) + int(z)
    print(sum)
except ValueError:
    print("bad value(s) in:",end='')
    if not x.isdigit():
        print(' x',end='')
    if not y.isdigit():
        print(' y',end='')
    if not z.isdigit():
        print(' z',)
0 голосов
/ 19 апреля 2020

Почему бы вам не попробовать добавить пробелы перед каждой переменной, думаю, это поможет. Я также сталкивался с такими проблемами.

try:
    print(int(x) + int(y) + int(z))
except ValueError:
    print("bad value(s) in:",end='')
    if not x.isdigit():
        print(' x',end='')
    if not y.isdigit():
        print(' y',end='')
    if not z.isdigit():
        print(' z',end='')
...