
导读\]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python**蓝桥杯真题解析100讲》,**这是解读系列的第73讲。 **平方回文数,**本题是2021年11月27日举办的第13届蓝桥杯青少组Python编程选拔赛真题编程部分第4题。题目要求编程输出100到M之间的平方回文数的个数。 先来看看题目的要求吧。 ### 一.题目说明 **编程实现:** 给定一个正整数M(100 \< M \< 2000),输出100到M之间(包含M)的平方回文数的个数。 例如:M为150,则在100到150之间的平方回文数有1个,为121,输出1。 **输入描述:** 输入一个正整数M **输出描述:** 输出100到M之间(包含M)的平方回文数的个数 **样例输入:** 150 **样例输出:** 1 ### 二.思路分享 这是一道经典的数论题,涉及的知识点包括回文数,循环、列表、递归算法和动态规划等。 很明显,这是典型的枚举算法,将100到M之间所有的数字挨个进行判断即可。所以这里的重点是如何判断给定数字是平方回文数。 这里有两个概念,一个是回文数,一个是平方数。 关于回文数的判断,在之前的蓝桥真题中出现过多次,实现的方法也比较多,具体可以参考《[输出回文数-第11届蓝桥杯选拔赛Python真题精选](http://mp.weixin.qq.com/s?__biz=Mzg5NDc5MTE4MA==&mid=2247525198&idx=1&sn=bfabfcc30e689a54469ebdb70b7c0470&chksm=c018182df76f913b88af6451b6538af51db98adb0135a215d4a6780f744675ea2dbabc8f1782&scene=21#wechat_redirect "输出回文数-第11届蓝桥杯选拔赛Python真题精选")》这篇文章。 对于平方数的判断,最常见的就是使用数学方法,如果一个数n是平方数,那么它的平方根一定是一个整数,比如: 100的平方根是10121的平方根是11144的平方根是12 因此我们可以先计算数出n的平方根并转成整数m,再判断m \* m是否等于n,如果相等,说明n为平方数。 为了简化代码,我们可以自定义两个函数分别用于判断,然后在循环中调用函数进行判断并统计平方回文数的个数。 思路有了,接下来,我们就进入具体的编程实现环节。 ### 三.编程实现 根据上面的思路分析,我们分3步来编写程序: * 判断回文数 * 判断平方数 * 统计平方回文数 **1. 判断回文数** 在Python编程中,最简单的方法就是使用切片运算逆序字符串,再判断原字符串和逆序字符串是否相等。 定义函数如下:  代码非常简单,需要注意的是,n是整数,需要先转成字符串再进行处理。 **2. 判断平方数** 根据前面的思路分析,自定义函数如下:  代码非常简单,说明两点: 1). 在Python中,\*\*是幂运算,可以使用 \*\*0.5来计算算术平方根,得到的结果是浮点数,使用int()函数将其转成整型; 2). 在计算平方根的时候,也可以使用math模块中的sqrt()函数,效果一样,但需要引入math模块。 **3. 统计平方回文数** 有了上面定义的两个函数,接下来只需要使用循环挨个判断并统计即可,代码如下:  代码比较简单,注意一个细节,就是循环的起点和终点,根据题目的说明和样例数据,不包括100,但是包括M。 至此,整个程序就全部完成了,你可以输入不同的数字来测试效果啦。 ### 四.总结与思考 本题代码在12行左右,涉及到的知识点包括: * 循环语句; * 字符串处理,重点是切片运算; * 幂运算的应用; * 自定义函数; 本题代码不多,难度一般,关键点有两个,一是如何判断回文数,二是如何判断平方数。 回文数是编程中的经典问题,判断的方法也比较多,在Python编程中,最简单的就是使用字符串逆序方法,尤其是切片运算,真的是太好用了,一定要熟练掌握。 和其他语言不同的是,Python提供了一个强大的幂运算符\*\*,它用于计算一个数的幂,即底数的指数次方。 例如,𝑎𝑏表示𝑎的𝑏次幂,可以直接使用 a \*\* b 来表示,它不仅可以用于计算平方、立方,还可以计算平方根、立方根等,非常强大。 你还有什么好的想法和创意吗,也非常欢迎和超平老师分享探讨。 如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄 需要源码的,可以移步至"超平的编程课"gzh。