python编程思维初探-学习编程的瓶颈之如何解题

如何解题:

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掉难题啦!

当然,编程能力的进阶不是一朝一夕就能达成的,所以即使目前你在学习上遇到了瓶颈,也不要气馁。只要你投入精力,一定会学有所成。万事开头难,而事实上你已经渡过了最难的一关。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值