【问题标题】:Python CodeLab Question About Exceptions -- Try, Except ValueErrorPython CodeLab 关于异常的问题——尝试,除了 ValueError
【发布时间】:2020-08-02 02:44:29
【问题描述】:

问题

“三个变量——x、y 和 z——应该包含数字字符串,适合转换为整数。编写将这些变量转换为整数的代码并打印这三个整数的和。但是,如果任何变量有值不能转换为整数的,打印出字符串“bad value(s) in:”,后跟具有错误值的变量的名称(以空格分隔,按字母升序排列)。

例如,如果 x、y 和 z 的值分别为“3”、“9”和“2”,则将打印数字 14。另一方面,如果值是“abc”、“15”和“boo”,那么输出将是:bad value(s) in: x z。


注意:这个问题来自图灵的Craft CodeLab,它似乎需要特定的标准输入才能得到正确的答案。我包含了 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. 在每个测试用例中:a) stdout 不正确 和 b) 没有打印到标准输出
  2. 您几乎肯定应该使用:+
  3. 我还没有看到使用以下方法的正确解决方案:" "
  4. 我还没有看到使用以下方法的正确解决方案:" x"
  5. 我还没有看到正确的解决方案使用:“y”
  6. 我还没有看到一个正确的解决方案使用:“z”
  7. 我们认为您可能需要考虑使用:==
  8. 我们认为您可能需要考虑使用:sum
  9. 采用您的方法的解决方案通常不使用:!=
  10. 采用您的方法的解决方案通常不使用:。 (句号)
  11. 采用您的方法的解决方案通常不使用:1
  12. 采用您的方法的解决方案通常不使用:2
  13. 采用您的方法的解决方案通常不使用:[ ]
  14. 采用您的方法的解决方案通常不使用:输入
  15. 采用您的方法的解决方案通常不使用:strip
  16. 我们认为您可能要考虑使用:

我的第二次尝试

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')

'错误分析' Attempt #2:


  1. 在某些测试用例中stdout 不正确
  2. 您几乎肯定应该使用:=
  3. 我还没有看到使用以下方法的正确解决方案:"bad value(s) in:"
  4. 我还没有看到使用以下方法的正确解决方案:'x'
  5. 我还没有看到一个正确的解决方案使用:'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='')

'错误分析' Attempt #3:


  1. 在某些测试用例中stdout 不正确
  2. 我还没有看到使用以下方法的正确解决方案:"bad value(s) in:"
  3. 采用您的方法的解决方案通常不使用:''
  4. 采用您的方法的解决方案通常不使用:ValueError

我错过了什么?

【问题讨论】:

标签: python python-3.x python-2.7 exception valueerror


【解决方案1】:

你为什么不尝试在每个变量之前添加空格,我想这会有所帮助。我也遇到过这类问题。

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='')

【讨论】:

    【解决方案2】:

    这也应该可以工作:

    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】:

      感谢大家的帮助!我发现答案是:

      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',)
      

      【讨论】:

        【解决方案4】:
        sum=0
        badvalues=""
        try:
            sum += int(x)
        except ValueError:
            badvalues += " x"
        try:
            sum += int(y)
        except ValueError:
            badvalues += " y"
        try:
            sum += int(z)
        except ValueError:
            badvalues += " z"
        if badvalues=="":
            print(sum)
        else:
            print("bad value(s) in:"+badvalues)
        

        【讨论】:

          猜你喜欢
          • 2014-03-29
          • 2015-01-25
          • 2021-01-30
          • 1970-01-01
          • 2018-05-16
          • 2019-04-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多