Kaprekar numbers:I Get ValueError:基数为10''的int()的文本无效

2024-05-19 16:34:42 发布

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

我不知道为什么我会犯这种错误。。这段代码是关于在一个特定的区间内寻找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: '

Tags: forinputlenif错误findintprint
2条回答
>>> 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?你知道吗

这个程序有几个问题。正如其他人指出的,在编写时,它试图将空字符串转换为整数,这会导致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)

相关问题 更多 >