如何解题:
1、分析问题,明确结果
2、思考需要的知识,或探索新知识
3、思考切入点
4、尝试解决问题的一部分
5、重复1-4步
用一道经典的题目来详细解释上述步骤:用Python打印出九九乘法表:
题目要求是“打印九九乘法表”,为了让问题变得清晰,我们得先知道“九九乘法表”长什么样,即我们最终想要呈现在终端结果是什么样。
1、假设我们的目标是在终端打印出这种格式的九九乘法表:
2、知道了需要实现的结果后,我们就来思考一下,解决这个问题到底要用到什么知识。
首先很明显,要打印信息就必须用到最基本的print()函数。
虽然最取巧的办法是像下面这样写,但显然这么操作,Python会很生气的,因为实在太太太大材小用了。
此时可以留意到,九九乘法表是有一定规律,重复的结构,所以我们可以想到用循环来处理。
同时,我们能看到数字是在灵活变动的,所以用“格式化字符串”来为变动的数字预留位置会方便些。
3、现在我们知道需要用到“循环”和“格式化字符串”相关知识,那我们就可以开始思考切入点:先从什么地方入手来解决这个问题。
我们再来观察九九乘法表,我们会发现一个规律:每一行的等式里,第一位数会递增,第二位数则会保持不变,并且在第几行就会有多少个等式。
也就是说,每一行其实都可以是一个小循环,那我们就可以以此为切入点,先把每一行的小循环写出来,再进一步寻找规律。
记住从简单的切入点入手,解决一部分问题,往往会让问题变得更简单,更容易被解决。
4、尝试解决问题的一部分
【当循环次数是确定的时候,我们优先使用for循环】
先用for循环打印出九九乘法表的第二行和第三行:
可能你捣鼓一阵后答案是这样子的:
你会发现字符串只能与字符串用'+'号拼接,要拼接数字的话还得先用str()转换,煞是麻烦。所以用我们刚才所说的格式化字符串处理会轻松得多。
这时,之前讲的【用法查询笔记】也能派上用场了:
所以,刚刚的那段代码就可以写成:(主要看格式符的用法,然后点击运行):
但是,运行后你会发现这样写的话每一个等式都会换行:
for i in range(1,3):
print('%d X %d = %d' % (i,2,i*2))
for i in range(1,4):
print('%d X %d = %d' % (i,3,i*3))
1 X 2 = 2
2 X 2 = 4
1 X 3 = 3
2 X 3 = 6
3 X 3 = 9
而我们想要的结果是:
5、解决问题的时候发现了新的问题,所以,我们回到第2步重新思考:
现在我们希望print出来的东西不换行,那怎么实现呢?你可能突发奇想,想到用拼接一个空字符串来实现。
但这样写且不说麻烦,也会让循环发挥不了作用。
现在看来,我们目前已有的知识的确没什么好的办法。不过这就难倒我们了么?
正如我反复强调的,很多零碎的知识点老师无法都直接教给你们,需要我们碰到实际问题的时候再去补充,这时就需要我们发挥“搜索大法”,主动搜索新知识。
点进链接就能搜索到答案。
原来print()函数里有个参数'end'是用来控制换行行数和结尾字符,比如说,你可以运行下列代码,感受一下,留意'end='后面的内容:
print('hello', end='')
print('world')
print('hello', end=' ')
print('world')
print('hello', end='!')
print('world')
helloworld
hello world
hello!world
那么我么就要在刚才代码的基础上,打印出不换行的效果
说打就打,有些同学们一开始的答案可能是这样子的:
for i in range(1, 3):
print('%d X %d = %d' % (i, 2, i * 2), end=' ')
for i in range(1, 4):
print('%d X %d = %d' % (i, 3, i * 3), end=' ')
1 X 2 = 2 2 X 2 = 4 1 X 3 = 3 2 X 3 = 6 3 X 3 = 9 >>> for i in range(1, 3):
但是这样子会发现,天啊真是磨人的小机精,现在所有的等式又都挤在一行了 = =。
别愁,问题很好解决,这里就教给大家一个小技巧,用print('')来控制换行,那么就应该这么打出代码:
for i in range(1, 3):
print('%d X %d = %d' % (i, 2, i * 2), end=' ')
print('')
for i in range(1, 4):
print('%d X %d = %d' % (i, 3, i * 3), end=' ')
print('')
1 X 2 = 2 2 X 2 = 4
1 X 3 = 3 2 X 3 = 6 3 X 3 = 9
可算输出了我们想要的结果了,那么依葫芦画瓢,把所有的等式放在一起就是:
for i in range(1,2):
print( '%d X %d = %d' % (i,1,i*1) ,end = ' ' )
print('')
for i in range(1,3):
print( '%d X %d = %d' % (i,2,i*2) ,end = ' ' )
print('')
for i in range(1,4):
print( '%d X %d = %d' % (i,3,i*3) ,end = ' ' )
print('')
for i in range(1,5):
print( '%d X %d = %d' % (i,4,i*4) ,end = ' ' )
print('')
for i in range(1,6):
print( '%d X %d = %d' % (i,5,i*5) ,end = ' ' )
print('')
for i in range(1,7):
print( '%d X %d = %d' % (i,6,i*6) ,end = ' ' )
print('')
for i in range(1,8):
print( '%d X %d = %d' % (i,7,i*7) ,end = ' ' )
print('')
for i in range(1,9):
print( '%d X %d = %d' % (i,8,i*8) ,end = ' ' )
print('')
for i in range(1,10):
print( '%d X %d = %d' % (i,9,i*9) ,end = ' ' )
print('')
1 X 1 = 1
1 X 2 = 2 2 X 2 = 4
1 X 3 = 3 2 X 3 = 6 3 X 3 = 9
1 X 4 = 4 2 X 4 = 8 3 X 4 = 12 4 X 4 = 16
1 X 5 = 5 2 X 5 = 10 3 X 5 = 15 4 X 5 = 20 5 X 5 = 25
1 X 6 = 6 2 X 6 = 12 3 X 6 = 18 4 X 6 = 24 5 X 6 = 30 6 X 6 = 36
1 X 7 = 7 2 X 7 = 14 3 X 7 = 21 4 X 7 = 28 5 X 7 = 35 6 X 7 = 42 7 X 7 = 49
1 X 8 = 8 2 X 8 = 16 3 X 8 = 24 4 X 8 = 32 5 X 8 = 40 6 X 8 = 48 7 X 8 = 56 8 X 8 = 64
1 X 9 = 9 2 X 9 = 18 3 X 9 = 27 4 X 9 = 36 5 X 9 = 45 6 X 9 = 54 7 X 9 = 63 8 X 9 = 72 9 X 9 = 81
虽然看起来还有些繁琐和复杂,但是我们通过观察规律,可以看到以上代码是有规律的三行结构,同一结构重复了九次,这提醒我们可以再用一层循环嵌套,来彻底解决重复劳动。
我们再来看看九九乘法表,可以发现行数是固定的,范围是range(1,10),而列数(等式)则是逐行加一,即第N行就有N个等式。
基于此和上述已完成的代码,你想到了如何用两层for循环消灭重复吗?
答案如下:
for i in range(1,10):
for j in range(1,i+1):
print( '%d X %d = %d' % (j,i,i*j),end = ' ' )
print(' ')
1 X 1 = 1
1 X 2 = 2 2 X 2 = 4
1 X 3 = 3 2 X 3 = 6 3 X 3 = 9
1 X 4 = 4 2 X 4 = 8 3 X 4 = 12 4 X 4 = 16
1 X 5 = 5 2 X 5 = 10 3 X 5 = 15 4 X 5 = 20 5 X 5 = 25
1 X 6 = 6 2 X 6 = 12 3 X 6 = 18 4 X 6 = 24 5 X 6 = 30 6 X 6 = 36
1 X 7 = 7 2 X 7 = 14 3 X 7 = 21 4 X 7 = 28 5 X 7 = 35 6 X 7 = 42 7 X 7 = 49
1 X 8 = 8 2 X 8 = 16 3 X 8 = 24 4 X 8 = 32 5 X 8 = 40 6 X 8 = 48 7 X 8 = 56 8 X 8 = 64
1 X 9 = 9 2 X 9 = 18 3 X 9 = 27 4 X 9 = 36 5 X 9 = 45 6 X 9 = 54 7 X 9 = 63 8 X 9 = 72 9 X 9 = 81
到这里,我们就成功打印出九九乘法表了!
如果用while循环,也是可以的,不过对比一下,是不是还是第一种解法的代码最简洁呢~
i = 1
while i <= 9:
j = 1
while j <= i:
print('%d X %d = %d' % (j,i,i*j),end = ' ')
j += 1
print('')
i += 1
1 X 1 = 1
1 X 2 = 2 2 X 2 = 4
1 X 3 = 3 2 X 3 = 6 3 X 3 = 9
1 X 4 = 4 2 X 4 = 8 3 X 4 = 12 4 X 4 = 16
1 X 5 = 5 2 X 5 = 10 3 X 5 = 15 4 X 5 = 20 5 X 5 = 25
1 X 6 = 6 2 X 6 = 12 3 X 6 = 18 4 X 6 = 24 5 X 6 = 30 6 X 6 = 36
1 X 7 = 7 2 X 7 = 14 3 X 7 = 21 4 X 7 = 28 5 X 7 = 35 6 X 7 = 42 7 X 7 = 49
1 X 8 = 8 2 X 8 = 16 3 X 8 = 24 4 X 8 = 32 5 X 8 = 40 6 X 8 = 48 7 X 8 = 56 8 X 8 = 64
1 X 9 = 9 2 X 9 = 18 3 X 9 = 27 4 X 9 = 36 5 X 9 = 45 6 X 9 = 54 7 X 9 = 63 8 X 9 = 72 9 X 9 = 81
通过这个案例,你发现了吗,我们的解题步骤其实也是一个循环~所以当我们遇到复杂的题不要怂,学会拆解问题,找到突破口,就能一步步KO掉难题啦!
当然,编程能力的进阶不是一朝一夕就能达成的,所以即使目前你在学习上遇到了瓶颈,也不要气馁。只要你投入精力,一定会学有所成。万事开头难,而事实上你已经渡过了最难的一关。