如何在 Python 中制作回文计算器

How to make a Palindrome Calculator in Python

我目前正在完成一个学校项目,该项目要求我创建一个 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

回文数从右到左和从左到右的书写方式相同:例:

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 早午餐,如下所示:

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)

由于这是学校作业,我看不出为您编写代码有什么好处,但这里是分解问题的方法。

正如您示例中的评论所说,您将要从 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 为长度的一半(向下舍入为最接近的整数)。在循环内取字符串两端的 切片 并比较它们。

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

string = 'abcd' string[0+x] 'a' string[-(1+x)] 'd'

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

回文是倒过来写的和原数相同的数。比如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

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

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)
# 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的回文是什么:)