[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python**蓝桥杯真题解析100讲》,**这是解读系列的第13讲。
**九九乘法表,**本题是2019年~2020年举办的第11届蓝桥杯青少组Python编程选拔赛真题(具体日期不详),题目要求编程输出一个排版整齐的九九乘法表。
先来看看题目的要求吧。
一.题目说明
编程实现:
请编写程序输出如下图所示的九九乘法表。
九九乘法表一共要分九行输出,输出样式如下图,并要求排版整齐。
提示信息:
print(*objects, end='\t')能够将多个输出自动对齐。
输入描述:
无
输出样例:
评判标准:
-
30 分:能够输出任一行乘法口诀,不论排版与样例是否相同;
-
50分:能够正确输出完整的乘法表,不论排版与样例是否相同;
-
100分:完全符合题目要求,输出格式与样例完全一致。
二.思路分析
这是一道打印字符串效果的题目,考察的知识点包括嵌套循环和字符串操作。
乘法口诀也叫"九九歌",在我国很早就已产生。远在春秋战国时代,九九歌就已经有着广泛地运用。
如今,九九乘法表是小学二年级的数学知识,是我们学习乘法的基础,几乎每个小朋友都能够熟练地背诵出来。
对于熟练掌握嵌套循环的同学来说,本题是比较简单的,但对于初学者来说,还是有点难度。
任何一个复杂的问题,我们都可以将其拆分成多个简单的问题。因此,我们可以将本题拆分成如下4个部分:
-
直接输出单个乘法算式
-
使用变量输出单个乘法算式
-
输出指定行的乘法算式
-
输出完整的乘法表
先从第一步开始,直接输出单个乘法算术,是不是非常的简单,代码如下:
print("3 * 4 = 12")
这里的数字,可以是任何数字。
接下来是第二步,使用变量输出单个乘法算式,我们用变量a和b表示两个乘数,对应的代码如下:
print(str(a) + "*" + str(b) = a * b)
需要注意,对于等号左边的部分,需要原样输出数字,不能直接写 a * b,应该使用字符串连接运算。
由于a和b都是数字,需要先转换成字符串再进行连接运算,否则会报错。
然后是第三步,输出指定行的乘法算式。
如果行数为4,需要输出如下4个算式:
1*4=4 2*4=8 3*4=12 4*4=16
如果行数为5,需要输出如下5个算式:
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
找到这里面的规律了吗?
对于给定行数,乘法算式的个数刚好等于当前行数,而乘法算式中的两个乘数,一个是固定的,就是当前行数,另一个则是从1开始,每次增加1,截止到当前行数。
如果使用变量i表示行数,上面的算式可以表示如下:
1*i=1*i 2*i=2*i 3*i=3*i 4*i=4*i ......
其实,每个乘法算式基本上都是一样的,可以使用循环来实现,代码如下:
for j in range(1, i+1): print(str(j) + "*" + str(i) = i * j)
最后一步,也比较简单,再使用一个循环输出多行就可以了。
思路有了,接下来,我们就进入具体的编程实现环节。
三.编程实现
根据上面的思路分析,我们编写代码如下:
代码不难理解,需要强调3点:
1). range(start, end)函数的特点是虎头蛇尾(也可以形容为顾头不顾腚,它包含起始点start,不包含end),start的默认值为0,我们需要根据实际情况来确定start和end;
2). print()函数,默认以换行字符结束,可以使用end参数来指定结束的符号,题目给出了提示,使用'\t',这里的'\t'是转义字符,表示制表符,在Python编程中,一般占4个空格;
3). 一行乘法算式打印完毕,需要换行,需要单独使用一个print()语句。
运行程序,效果如下所示:
至此,整个程序就全部完成了。
四.总结与思考
本题的分数为100分,代码在5行左右,涉及到的知识点包括:
-
循环语句,主要是for...in循环
-
range()函数的特点及用法;
-
嵌套循环;
-
字符串处理,包括连接运算和类型转换;
-
print()函数的灵活运用;
题目难度一般,代码量非常小,关键是熟练掌握嵌套循环的用法。
短短的四五行代码,就可以打印出一个漂亮的九九乘法表,相信你已经感受到循环的强大了。实际上,循环是计算机最擅长的事情,也是我们学习在编程时使用最多的结构。
对于初学者来说,要理解嵌套循环是需要一个过程的,所以超平老师建议初学者按照前面的思路分析,将一个复杂的问题拆分成几个简单的问题。简单到什么程度呢,其标准就是这个简单问题是自己非常熟悉的。
不仅仅是在学习编程时才会用到拆分的思维和技巧,对于任何知识的学习,任何问题的解决,都可以采用这种思维,你会变得越来越厉害的。
超平老师给你留一道思考题,上面的代码是按行的顺序打印乘法表的,如果要求按列的顺序来打印乘法表,该怎么实现呢,赶紧动手试试吧。
你还有什么好的想法和创意吗,也非常欢迎和超平老师分享探讨。
如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄
需要源码的,可以移步至"超平的编程课"gzh。