【问题标题】:Python ValueError for code that calculates correct resultsPython ValueError 用于计算正确结果的代码
【发布时间】:2019-04-26 14:48:30
【问题描述】:

问题陈述

给定一个整数 n,找出两个整数 a 和 b 满足,

#a >= 0 and b >= 0
#a + b = n
#DigitSum(a) + Digitsum(b) is maximum of all possibilities

def solve(n): 

    len_of_n = len(str(n))
    len_of_n-=1
    a = '9'
    a = (a*len_of_n)
    #print(a)
    b = (int(n) - int(a) )  # This is the line where it points to error.
    #print(b)

    digits_of_a = []
    digits_of_b = []
    for i in str(a)[::-1]:
         digits_of_a.append(int(i))   
    for i in str(b)[::-1]:
         digits_of_b.append(int(i))

    return (sum(digits_of_a) + sum(digits_of_b))

代码实际上在 codewars.com 上的“尝试”上报告了测试用例的正确答案,但最终提交失败。它以错误代码 1 退出。它说 ValueError: invalid literal for int() with base 10: ''

我已经阅读了关于此的其他线程并了解错误是由于尝试将空格字符转换为整数造成的。无法弄清楚为什么该语句会获得空格字符。它们都是字符串的int表示...?

【问题讨论】:

  • 遇到错误时na 的值是多少?它以及你传递给函数的内容是什么?我认为,最有可能的是字符串 n 无法转换为 int,因为它是空字符串或因为其中包含非数字字符。
  • N 已经是一个 int 为什么你要 int(n) ?
  • 你有没有机会传递一个数字的值?
  • n 是传递给函数的整数。 a 是根据 n 中的总“数字”动态构建的。错误表明这是由于空字符串。但我无法弄清楚为什么/如何将具有有效 int 值 n 的空字符串传递给 def。
  • @TobiasWilfert 作为试验和错误的一部分进行了更改。最初我只有 (n - int(a)) 我不确定测试通过了哪些值引擎。 codewars 上的测试用例显示所有 8 个断言都已通过,但随后也显示此错误。所以它认为我的代码是不可接受的。下面的快照。

标签: python valueerror


【解决方案1】:

当您将单个数字 int 传递给函数时,您会收到此错误,因为 len_of_n = len(str(n)) 将等于 1 并且 len_of_n-=1 将等于 0。0 * '9' 将为您提供一个无法转换为 int 的空字符串。从而给你错误

以 10 为底的 int() 的无效文字:' '

【讨论】:

  • 宾果游戏!说得通。让我编辑并再试一次!
  • @JigishParikh 如果 n 仅为 1 位数字,您可能需要添加一个额外的案例。
猜你喜欢
  • 2017-07-02
  • 2016-01-01
  • 1970-01-01
  • 2018-08-27
  • 1970-01-01
  • 2014-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多