为什么这会出错而这不会?

2024-05-19 15:21:26 发布

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

我正在解决一个黑客银行的问题:https://www.hackerrank.com/challenges/kaprekar-numbers/problem

一直在处理这个错误: ValueError:以10为基数的int()的文本无效:''

我的第12行代码产生了错误,也在工作代码中。所以我不明白为什么我的不起作用

这是我的密码:

a = input()
b = input()
l = []
for i in range(a, b + 1):
    s = i*i
    s = str(s)
    if i == 1:
        l.append(i)
    length = len(s)
    if length <= 1:
        pass
    temp = int(s[0:length/2]) + int(s[length/2:]) #error came from this line
    if temp == i:
        l.append(i)
    else: 
        pass

if not l:
    print "INVALID RANGE"
else:
    print " ".join(map(str, l))

这是一个有效的方法:

def kaprekar(i):
    if i == 1:
        return True
    s = i ** 2
    s = str(s)
    length = len(s)
    if len(s) <= 1:
        return False
    temp = int(s[0:length/2]) + int(s[length/2:])
    if temp == i:
        return True
    else:
        return False
a = input()
b = input()
l = []
for i in range(a, b + 1):
    if kaprekar(i):
        l.append(i)
if not l:
    print "INVALID RANGE"
else:
    print " ".join(map(str, l))

Tags: 代码forinputlenreturnif错误length
1条回答
网友
1楼 · 发布于 2024-05-19 15:21:26
if length <= 1:
    pass

pass实际上什么都不做,所以这个检查什么都不做。无论length是或不是<= 1,您将继续int(s[length/2:]),如果字符串太短,它将产生所述错误

但是,return False退出函数,下面的代码将不会执行,因此check可以防止您尝试处理短字符串

相关问题 更多 >