【问题标题】:Kaprekar numbers: I Get ValueError: invalid literal for int() with base 10 ''Kaprekar 数字:我得到 ValueError:int() 的无效文字,基数为 10 ''
【发布时间】:2015-07-15 17:18:46
【问题描述】:

我不知道为什么会出现这种类型的错误。这段代码是关于在特定间隔中查找 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: '

【问题讨论】:

    标签: python python-3.x numbers number-theory


    【解决方案1】:
    >>> 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?

    【讨论】:

    • if int(midone or 0) + int(midtwo or 0) == i**2: 可能(尽管它有点滥用布尔或
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-08-06
      • 2018-09-05
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-17
      • 2012-03-07
      • 2018-01-20
      相关资源
      最近更新 更多