【问题标题】:How to make a Palindrome Calculator in Python如何用 Python 制作一个回文计算器
【发布时间】:2015-08-11 10:30:30
【问题描述】:

我目前正在完成一个学校项目,该项目要求我创建一个 python 程序,该程序可以读取两个非负整数、开始和结束,并打印出所有之间发生的回文开始和结束(包括)。我们得到的代码是这样的:

begin = int(input('Enter begin: '))
end = int(input('Enter end: '))

palindromes = 0
# Add your code here. You will want to start with a "for x in range" style loop.

print('There are', palindromes, 'palindrome(s) between', begin, 'and', end)

问题:我如何计算输入的两个数字范围内有多少回文数(哪些数字是回文数)?

研究:我尝试过查看页面,这是一个很好的页面,尽管我(对 python 不熟悉)在将其放入代码时无法理解它: how to check for a palindrome using python logic

【问题讨论】:

  • 你有什么问题?
  • 我如何计算输入的两个数字范围内有多少回文数(哪些数字是回文数)?
  • 您能解释一下您引用的答案的哪一部分您不明白吗?您只需要一个循环和已接受答案中的代码。
  • palindromes = len([i for i in range(begin, end+1) if str(i) == str(i)[::-1]])。现在去向你的老师解释一下。
  • 这或多或少是我所拥有的。我遇到的问题是程序需要打印哪些数字是回文数。

标签: python palindrome


【解决方案1】:

回文数从右到左和从左到右的写法相同:示例:

123 is not a palindrome number because its inverted representation is 321
121 is a palindrome number because its inverted representation is 121

在python中最简单的方法是将数字转换为字符串并将其与其倒置表示进行比较(假设n是一个数字,我们想知道它是否是回文):

if str(n) == str(n)[::-1]:
    print "It's a palindrome number"

因此,您的问题的解决方案是迭代中的 if brunch,如下所示:

print "Enter begin:"
begin = int(raw_input("> "))
print "Enter end:"
end = int(raw_input("> "))

palindromes = 0

for x in range(begin, end):
    if str(x) == str(x)[::-1]:
        palindromes += 1

print "There are %d palindrome(s) between %d and %d" % (palindromes, begin, end)

【讨论】:

    【解决方案2】:

    回文是一个数字,当倒写时与原始数字相同。例如,1234321 是回文。

    所以,要检查这个,你所要做的就是检查数字的反面是否与原来的相同。

    这是代码。

    begin = int(input('Enter begin:'))
    end = int(input('Enter end:'))
    
    palindromes = 0
    
    for i in range(begin, end+1, 1):
        if str(i) == str(i)[::-1]:  #Here I convert the int to string and check if t matches the reverse
           palindromes += 1
           print i
    print "Total number of palindromes = ",palindromes
    

    【讨论】:

      【解决方案3】:

      由于这是学校作业,我认为为您编写代码不会有很大的好处,但这里是解决问题的方法。

      正如您示例中的注释所说,您将希望从 for x in range 循环开始。在这种情况下,我建议您使用range() 的版本,它同时包含一个起点和一个停止点(开始和结束)——请注意,这将在开始和停止之间迭代数字,包括开始但不停止。

      示例 -- 在各自的行上打印数字 1 到 9:

      for x in range(1, 10):
         print(x)
      

      在你的 for 循环中,你可以测试 x 是否是回文。如果是,您需要将其添加到找到的回文列表中。稍后您可以将您的palindromes 变量设置为该列表的length,并根据需要打印出内容。

      要确定x 是否是回文,您找到的答案应该会有所帮助。或者,您可以考虑回文是什么,并尝试编写自己的方法。在开始之前你会想convert x to a string,然后这只是比较字符串的前半部分和后半部分的情况,有一些有趣的方法可以做到这一点:)

      您可以尝试以下两个选项:

      1) 使用 slicing 将字符串分成两半(如果有奇数个字符,则忽略中间字符)。 Reverse字符串的一半,然后与另一半比较;如果它们相同,则为回文。

      2) 使用另一个 for 循环,其中 start 为 0,stop 为一半长度(向下舍入到最接近的整数)。在循环内部取字符串两端的 slices 并比较它们。

      示例(其中 x 是循环计数器,当前值为 0)。

      字符串 = 'abcd' 字符串[0+x] '一种' 字符串[-(1+x)] 'd'

      对于这两个答案,如果您还不熟悉的话,您需要了解如何对字符串进行切片。有一些有用的例子in this Python introduction

      【讨论】:

        【解决方案4】:

        谢谢大家,我找到答案的代码是这样的:

        begin = int(input('Enter begin: '))
        end = int(input('Enter end: '))
        
        palindromes = palindromes = len([i for i in range(begin, end+1) if str(i) ==     str(i)[::-1]])
          for i in range(begin, end+1):
            if str(i) == str(i)[::-1]:
              print(i,'is a palindrome')
        
        print('There are', palindromes, 'palindrome(s) between', begin, 'and', end)
        

        【讨论】:

          【解决方案5】:
          # Palindrome Number Calculator
          
          Palindrome = False
          Test = 0
          newInt = 0
          
          myInt = int(input("Enter a number "))
          myIntReversed = int(str(myInt)[::-1])
          
          if myInt == myIntReversed:
              print("Your number is a palindrome")
              Palindrome = True
              exit()
          
          while Palindrome == False:
          
              myInt += myIntReversed
          
              Test += 1
          
              myIntReversed = int(str(myInt)[::-1])
          
              if myInt == myIntReversed:
                  print("Palindrome")
                  print(myInt)
                  Palindrome = True
          
          exit()
          

          如果您使用 pycharm,那么您可以使用调试功能查看计算机的测试编号。我没有打印这个数字,所以程序运行得更快。试试看你的程序是否能看到 196 的回文是什么:)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-10-12
            • 2019-05-11
            • 2018-01-05
            • 2016-01-28
            • 2018-04-04
            • 2016-03-16
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多