Kaprekar数字:我得到ValueError:int()的无效文字,基数为10''

时间:2015-07-15 17:18:46

标签: python python-3.x numbers number-theory

我不知道为什么会出现这种类型的错误..此代码是关于在特定区间内查找kaprekar数字

def find_kaprekar(p,q):   
    numbers = []
    for i in range(p,q):
        str_i = str(i)
        if len(str_i) % 2 == 1:
            midone = str_i[:int((len(str_i)+1)/2)]
            midtwo = str_i[int((len(str_i)+1)/2):]
            if int(midone) + int(midtwo) == i**2:
                numbers.append(i)
        elif len(str_i) % 2 == 0:
            midone = str_i[:int(len(str_i)/2)]
            midtwo = str_i[int(len(str_i)/2):]
            if int(midone) + int(midtwo) == i**2:
                numbers.append(i)

    if len(numbers) == 0:
        print('INVAlID RANGE')
    else:
        print(numbers)

if __name__ == '__main__':
    p = int(input())
    q = int(input())
    find_kaprekar(p, q)

当我运行它时,我总是得到这个:

    if int(midone) + int(midtwo) == i**2:
ValueError: invalid literal for int() with base 10: '

2 个答案:

答案 0 :(得分:1)

>>> int('')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: ''

你正在抓取数字的子串,其中一个子串是空的。

例如,如果p == 1midone = '1'midtwo =''。我不知道算法,但您可能想将空字符串视为0

答案 1 :(得分:0)

此程序存在一些问题。正如其他人所指出的,正如所写,它试图将空字符串转换为整数,这会导致OP的ValueError

更重要的是,它不会输出Kaprekar numbers,这个数字的方形 K 可以分为两部分 K' K ',这样 K' + K'' = sqrt( K )。 OP的计划似乎打算产生数字 J ,可以分为 J' J'两部分,以便 J ' + J'' = J ^ 2。除了数字00等似是而非的例子,后一种数字似乎不太可能。

以下是输出Kaprekar数字的程序。

def find_kaprekar(p,q):
    numbers = []
    for candidate in range(p,q):
        candidate_squared = candidate**2
        candidate_squared_string = '%d'%candidate_squared
        for split_point in range(1,len(candidate_squared_string)):
            part_1 = candidate_squared_string[:split_point]
            part_2 = candidate_squared_string[split_point:]
            if int(part_1)+int(part_2)==candidate:
                numbers.append(candidate)
                break
if __name__ == '__main__':
    p = int(input())
    q = int(input())
    find_kaprekar(p, q)