分享一些最近Python刷题的经验与思考

举报
技术火炬手 发表于 2019/10/14 11:15:27 2019/10/14
【摘要】 转化学习情绪学习Python一直都是从乐趣、兴趣出发,所以最讨厌做的事莫过于枯燥的刷题了。可公司新规定,每位员工需要在年底前完成5000分的编程答题任务,瞬间就不开心了。还好我是一个脑洞大的人,决定化愤怒为动力,想想什么能让我转化现在的情绪。然后….我发现每道题后面有个发帖讨论的栏位,在里面可以讨论解题思路,大家互相交流。就在一瞬间灵感来了,这不是个免费的广告栏目么。我把每道题的答案发到讨论...

转化学习情绪

640.gif

学习Python一直都是从乐趣、兴趣出发,所以最讨厌做的事莫过于枯燥的刷题了。可公司新规定,每位员工需要在年底前完成5000分的编程答题任务,瞬间就不开心了。还好我是一个脑洞大的人,决定化愤怒为动力,想想什么能让我转化现在的情绪。然后….

我发现每道题后面有个发帖讨论的栏位,在里面可以讨论解题思路,大家互相交流。就在一瞬间灵感来了,这不是个免费的广告栏目么。我把每道题的答案发到讨论帖里,然后在上面备注上我的公众号地址,岂不是能稳稳的收割一波关注度。我都忍不住为自己的机智点赞啊,开心的下班后都不舍得走,坐在工位刷题到8点!

谈谈刷题思路

万事开头难,所以今天想跟大家聊聊刷题的心得与方式…

题型选择

对于新上手刷题的朋友来说,很容易因为挫败感而放弃。所以,建议大家还是从简单的题目入手。当然简单题目也有难度与分类,我们可以通过分类与名字先攻克自己擅长的。如果实在觉得有些困难,也可以借鉴别人的解题思路与代码后,再完成练习。

刷题目的

刷题的目的是让我们提升编程思路,学习更多算法,而非为了刷题而刷题。所以无需太关注刷题的数目,而要将重点放在解题思路上。另外每道题做完后,如果还有余力可以想象是否还有其他解题方式,也可以看看其他人的代码。

举个栗子!

昨天在刷题的时候,有一道题给自己印象很深,不是因为困难,反而是一道简单题,但就是因为太简单反而让人觉得思维固化,在这里分享给大家!

题目

题目原文忘记了,在这里简单说明下:

系统输入两个数字M、N,M为1-9的数字,N为系数。

eg:

输入 2 5,则需计算 2 22 222 2222 22222 的总和,即 24690

输入 1 3,则需计算 1 11 111 的总和,即 123

常规解法

初看这道题,第一个想法就是简单的数字循环叠加求和,无非考虑下10进制的乘数而已。解题如下:

def func():
   M, N = map(int, input().split())
   sum_number = number = 0
   for i in range(N):
       number += M * 10 ** i
       sum_number += number

   print(sum_number)


if __name__ == '__main__':
   func()

灵活解法

上面的解法比较笨,但针对这道题,其实还有更为灵活的方法…

由于M是1—9之间的数字,所以先入为主的将M定义为了数字,但其实如果将M认为是字符串。那么2 --> 222 可以理解为int('2'*3)!这样思考后,题目是否变得更为简单了。解题如下:

def func():
   M, N = input().split()
   print(sum([int(M * i) for i in range(1, int(N) + 1)]))


if __name__ == '__main__':
   func()

The End

本文来自:“清风Python”公众号


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。