根据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: ''
请看以下几行:
这使得假设
str(i)
的长度小于sqr
的长度。对于输入值0、1、2和3,情况并非如此,因此sqr[d:]
最终将为空,因此出现错误这种情况发生在输入
p < 4
上。然后sqr
的值将只是一个单位数字符串,这意味着sqr[d:]
的结果将是一个空字符串(并且您不能解析空字符串的整数值)要解决函数的问题,如果提供的值低于该值,只需手动将
p
的值设置为4即可相关问题 更多 >
编程相关推荐