为啥代码/逻辑在不同范围内的工作方式不同?

Posted

技术标签:

【中文标题】为啥代码/逻辑在不同范围内的工作方式不同?【英文标题】:Why the Code/Logic is working differently for different ranges?为什么代码/逻辑在不同范围内的工作方式不同? 【发布时间】:2021-11-20 02:54:26 【问题描述】:

我为 Project Euler 的问题 4 编写了代码—— 它适用于范围 (10,100)-- 案例1--

for i in range(10,100):
    for j in range(10,100):
        a = i*j
        b = str(a)
        d = str(a)[::-1]
        if b == d:
            c = b
            p1 = i
            p2 = j
print(f"c is palindrome ")

但对于范围 (100,1000) 案例2---

for i in range(100,1000):
    for j in range(100,1000):       
        a = i*j
        b = str(a)
        d = str(a)[::-1]
        if b == d:
            c = b
            p1 = i
            p2 = j    
print(f"c is palindrome ")

输出错误 为什么?? 为什么代码的工作方式不同? 对于 case1,它给出了正确的输出。但是随着范围的变化,它会提供错误的输出。

【问题讨论】:

请发帖minimal reproducible example。将您的函数包装在一个以两个范围和 c 作为参数的函数中。 p1 和 p2 似乎没有被使用。你得到什么数据,你期望什么? 因为你找到了一个较小的回文数并在找到最大的回文数后将其分配给c。您需要添加一个检查,以便只存储找到的最大回文 预期输出是什么? 【参考方案1】:

在您的逻辑中,如果发现任何回文,它会自动分配给c,而不检查它是否大于c。 例如,当i=993j =913 然后c= 906609 但当i =995j = 583 时,此值替换为580085。所以你不能得到预期的输出。

首先,试试,我提供了下面的示例代码。仅在您不了解的情况下查看。

c=0
for i in range(100,1000):
    for j in range(100,1000):       
        a = i*j
        b = str(a)
        d = str(a)[::-1]
        if b == d:

            if a>c:
                c=a

            p1 = i
            p2 = j    
print(f"c is palindrome ")

【讨论】:

以上是关于为啥代码/逻辑在不同范围内的工作方式不同?的主要内容,如果未能解决你的问题,请参考以下文章

为啥以下代码中逗号运算符的工作方式有所不同?

尽管代码相同,为啥这两个 html/css 文件的工作方式不同? [关闭]

为啥将列表元素分配给变量在这里以不同的方式工作?

为啥 &= 运算符与 && 的工作方式不同

为啥在数组中的值的情况下比较的工作方式不同

为啥此相关子查询在 Oracle 和 SQL Server 中的工作方式不同