我不知道为什么我会犯这种错误。。这段代码是关于在一个特定的区间内寻找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: '
您正在获取数字的子字符串,其中一个子字符串为空。你知道吗
例如,如果
p == 1
,midone = '1'
,midtwo =''
。我不知道算法,但也许你想把一个空字符串当作0
?你知道吗这个程序有几个问题。正如其他人指出的,在编写时,它试图将空字符串转换为整数,这会导致OP的
ValueError
。你知道吗更重要的是,它不输出Kaprekar numbers,即其平方K可以被分成两部分K'和K',这样K'+K'=sqrt(K)。OP的程序似乎打算产生数字J,可以分成两部分J'和J',这样J'+J'=J^2。除了像数字00这样似是而非的例子之外,后一种数字似乎不太可能。你知道吗
下面是一个输出Kaprekar数的程序。你知道吗
相关问题 更多 >
编程相关推荐