簡體   English   中英

Kaprekar Number-ValueError: int() 的無效文字,基數為 10:''。 字符串轉整數

[英]Kaprekar Number- ValueError: invalid literal for int() with base 10: ' '. String to int

根據wikipedia ,一個 kaprekar 數是一個數字,如果它的正方形在該基數中的表示可以分成兩部分,其中第二部分有 p 位,加起來就是原始數字。 比如9*9=81,可以寫成8+1,所以81是一個卡普雷卡數。

以下 function 必須打印給定范圍內的 kaprekar 數字,該范圍在 p 和 q 范圍內。 但是,我從第 8 行收到ValueError r = int(sqr[d:])

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))

輸入: 1 100

錯誤:

 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: ''

查看以下幾行:

    d = len(str(i))
    # -- snip --
    r = int(sqr[d:])

這假設str(i)的長度小於sqr的長度。 對於輸入值 0、1、2 和 3,情況並非如此,因此sqr[d:]最終會為空,因此會出現錯誤。

這發生在輸入p < 4上。 那么sqr的值將只是一個數字字符串,這意味着sqr[d:]的結果將是一個空字符串(並且您無法解析空字符串的 integer 值)。

要解決 function 的問題,如果提供的值低於該值,您只需手動將p的值設置為 4。

def kaprekarNumbers(p, q):
    if p < 4: p = 4
    ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM