Kaprekar Number ValueError:以10为基数的int()的文本无效:“”。字符串到整数

2024-05-15 12:53:11 发布

您现在位置:Python中文网/ 问答频道 /正文

根据wikipedia,kaprekar数是一个数字,如果它在该基数中的平方表示可以分为两部分,其中第二部分有p个数字,这两部分相加为原始数字。例如,9*9=81,可以写成8+1。因此,81是kaprekar数

以下函数必须打印p和q范围内给定范围内的kaprekar数。但是,我从第8行收到ValueError

def kaprekarNumbers(p, q):
    list = []
    for i in range(p,q+1):
        d = len(str(i))
        sqr = str(i*i)
        l = int(sqr[:d])
        r = int(sqr[d:])
        if l+r == i:
            list.append(i)
    return list


p = int(input())

q = int(input())

result = kaprekarNumbers(p, q)
print(','.join(str(v) for v in result))

输入:1100

错误:

 Traceback (most recent call last):
 File "Solution.py", line 18, in <module>
 result = kaprekarNumbers(p, q)
 File "Solution.py", line 8, in kaprekarNumbers
 r = int(sqr[d:])
 ValueError: invalid literal for int() with base 10: ''

Tags: inpyforinput数字resultlistfile
2条回答

请看以下几行:

    d = len(str(i))
    #   snip  
    r = int(sqr[d:])

这使得假设str(i)的长度小于sqr的长度。对于输入值0、1、2和3,情况并非如此,因此sqr[d:]最终将为空,因此出现错误

这种情况发生在输入p < 4上。然后sqr的值将只是一个单位数字符串,这意味着sqr[d:]的结果将是一个空字符串(并且您不能解析空字符串的整数值)

要解决函数的问题,如果提供的值低于该值,只需手动将p的值设置为4即可

def kaprekarNumbers(p, q):
    if p < 4: p = 4
    ...

相关问题 更多 >