我的回文总和码是否正确?如何计算周期长度?

时间:2016-02-20 01:54:27

标签: python

我有一个创建程序的任务,该程序要求在打印出具有最长循环长度的数字的范围内开始和结束数字。我对编程很陌生,不确定我是否正确地进行编程。我不确定我的程序是否选择了周期最长的数字。我如何要求程序提供周期长度?我有两个定义(is_palindromic和rev_num)是我的教授给我的,我必须在我的任务中。

# determines if a number is palindromic
def is_palindromic (n):
    return (n == rev_num(n))

# reverses a number
def rev_num (n):
    rev_n = 0
    while (n > 0):
        rev_n = rev_n * 10 + (n % 10)
        n = n // 10
    return (rev_n)

def main():
    start = eval (input ("Enter starting number: "))
    end = eval (input ("Enter ending number: "))
    total = 0
    cycle_length = 0
    while (start <= end):

        if (is_palindromic((start))):
            total += start
        start = start + 1
        cycle_length += 1
    print (total)
    print (cycle_length)

main()

1 个答案:

答案 0 :(得分:0)

这是我发现的一些鸭子:

  

如果任何数字被反转并添加到自身,并且该过程重复了足够长的时间,则大部分时间都会产生回文数字。回文编号是向前和向后读取相同的编号。

     

我们将在此场景中定义循环长度作为实现回文数所需的步骤数。步骤被定义为向自身添加数字的反转。

     

所有回文数的周期长度为零。由于所有单位数字都是回文,因此它们的周期长度为零。

     

如果起始编号为57,则达到回文编号所需的步骤数为2.

     

57

     

132 [57 + 75 = 132]

     

363 [132 + 231 = 363]

以下是一些提示让你前进的提示:

  1. 您不应更新start,因为您可能希望在程序结束时的某处打印起始和结束数字。如果可以避免,请不要丢失信息。只需创建另一个变量。
  2. 存在range()函数来处理一系列数字的迭代。请注意包含结尾成员,因此您必须range(start, end+1)
  3. 周期长度是您正在考虑的个别号码的特征。因此,您不会将其作为最外层循环的一部分递增。
  4. 但是,您需要跟踪最长周期长度。所以你应该保留一个max_key, max_value对,你可以每次测试和更新。 (如果current_value&gt; max_value,则设置max_key = current_key,max_value = current_value)
  5. 如果我是你,我会在你的周期长度计算中包含一个“健全性检查”,因为这项任务警告说某些周期似乎是无限的。只需选择一个数字,如100,如果计算的周期长度超过该数字,则停止计算(并可能打印警告信息)。
  6. 如果您了解编写函数,计算循环长度将是一个很好的函数。