Kaprekar numbers: I Get ValueError: invalid literal for int() with base 10 ''
Kaprekar numbers: I Get ValueError: invalid literal for int() with base 10 ''
我不知道为什么会出现这种类型的错误。此代码是关于在特定时间间隔内查找 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: '
>>> int('')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
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 31=] 这样 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)
我不知道为什么会出现这种类型的错误。此代码是关于在特定时间间隔内查找 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: '
>>> int('')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
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 31=] 这样 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)