小于输入的接近回文的整数数(如果只更改一个索引)PYTHON

小于输入的接近回文的整数数(如果只更改一个索引)PYTHON,python,palindrome,Python,Palindrome,这是到目前为止我的代码。它不适用于输入超过3位的所有情况。例如,它不允许我在终端中输入超过5位的数字。它只是转到一个新行,所以我必须打开一个新选项卡。我尝试输入1000000,但没有输出。它应该给我43011。代码必须给出一些不是回文的整数,但是如果你只改变一个数字,比如14351,如果你把4改成5,那就是回文。因此,输入可能是23,输出可能是11(因为如果更改一个数字,小于23的数字将是回文,即10,12,13,14,15,16,17,18,19,20,21)。一位数字不包括在内,因为它们已经

这是到目前为止我的代码。它不适用于输入超过3位的所有情况。例如,它不允许我在终端中输入超过5位的数字。它只是转到一个新行,所以我必须打开一个新选项卡。我尝试输入1000000,但没有输出。它应该给我43011。代码必须给出一些不是回文的整数,但是如果你只改变一个数字,比如14351,如果你把4改成5,那就是回文。因此,输入可能是23,输出可能是11(因为如果更改一个数字,小于23的数字将是回文,即10,12,13,14,15,16,17,18,19,20,21)。一位数字不包括在内,因为它们已经是回文。谢谢!

与其替换数字并测试它是否是回文,不如检查您是否已经看到左右两侧不同的位置。如果有多个数字不同,您不能仅更改一个数字就将其变为回文

因为我们比较的是左侧和右侧,所以只需要迭代字符串的一半(到
l/2
)。因为我们在这里处理整数,如果有奇数位数,我们将在中间位数之前停止

n=int(input())

def palindrome(x):

    m=str(x)
    l=len(m)
    if l==1 or l==2 or l==3: 
        return True
    if l>3:
        for i in m:
            for j in range (0,10):
                k=m.replace(str(i),str(j))
                if k==k[::-1]:
                    return True
                else:
                    return False
def almost(n):

    count=0
    for x in range (10,n):
        if str(x)!=str(x)[::-1] and palindrome(x):
            count+=1
    return count
print (almost(n))        

你只需要计算出,如果只有2个数字在字符串和相反的字符串之间顺序不符,那么接下来你可以交换一个数字来生成回文。。。这也不包括单个数字和回文本身(因为0位数会有所不同),例如:

然后,您的计数为:

def is_almost_palindrome(n):
    s = str(n)
    if sum(a != b for a, b in zip(s, reversed(s))) == 2:
        return True
    return False

注意!非常感谢。只需更改一个数字,如14456,如果您将4更改为5,这将是一个回文-准确程度如何?它不是,但它是…对不起。别理它。如果它是14351,这是一个回文,你把4变成5,那么它就是一个回文。非常感谢!!这给了
sum(范围(1000000)内n的回文数(n))
一个45010的答案,尽管其中一个样本被认为是“几乎回文数”:
[665566998996634436151151962698398399383733223210364546]
所以看起来需要排除准确的回文问题!我对原始问题中的文本感到困惑,其中假设低于4的任何内容都是“几乎”回文,即使它是回文。为了得到与问题(43011)相同的答案,我添加了一个显式检查。
False
True
True
True
False
def is_almost_palindrome(n):
    s = str(n)
    if sum(a != b for a, b in zip(s, reversed(s))) == 2:
        return True
    return False
almost_palindromes = sum(is_almost_palindrome(n) for n in range(1000000))
# 43011