社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

从屌丝到高手,三道Python编程题,九种解题算法,看看你属于哪一类

菜鸟学Python • 4 年前 • 578 次点击  

大家在平时刷题的过程中,不仅仅要注意理解问题的本质,而且要在解决问题的基础上,优化自己的解题思路和程序。


今天,小编就带领大家来进行三道简单问题的解决,从屌丝解法到进阶解法再到高手解法,一步步的带领大家来提升自己的解题技巧和编程思路。



第一题 二进制中的1的个数

1).题目描述:

给定一个非负数,请编写一个函数,该函数以整数作为输入,并返回该数字的二进制表示形式中等于1的位数。例如,对于整数14来说,它的二进制形式为01110,所以它的二进制表示形式中等于1的位数就是3

2).屌丝解法

对于这道题来说,屌丝解法该如何解决呢?

  • 首先设置结果result=0,然后判断输入num是否大于0;

  • 如果大于0,就让输入的整数num取余2,如果取余2等于1,则result加1;

  • num不断的除以2;

  • 输出最终的结果result。

3).进阶解法

进阶的解法中,可以利用python内置的bin函数,将十进制转化为2进制;

然后将二进制数值转化为字符串的形式

然后不断循环,判断字符串的每一位是不是1。

4).高手解法

高手解法中,不仅可以利用bin函数,而且在特定字符统计上也可以利用count函数。充分利用python的内置函数,可以帮助我们在解题过程中大大的节省时间和程序。


第二题  矩形转成正方形

题目描述:将一个二维的矩形切割成为标准的正方形,用户将获得两个维度信息(lng和wdth)请返回每个正方形大小的集合。如下图所示。

上图中的一个3x5(lng=3,wdth=5)维的二维矩阵,可以分割为一个3x3的矩阵,一个2x2的矩阵和两个1x1的矩阵。所以对于输入的参数3,5。返回的结果为[3,2,1,1]。

1).屌丝解法

初级的解法应该如何来对待这个问题呢?

  • 首先是判断lng和wdth哪个比较短,较短的边可以直接构成一个正方形;

  • 然后较长的边减去较短的边;

  • 不断的重复循环上述的操作,直到某一个边长小于等于1。

2).进阶解法

对于进阶解法,可以采用递归算法来解决该题,例如对于sqInRect(3,5)可以分解为下面的解题思路。

可以看到,程序可以通过不断的递归循环来解决,通过递归循环,可以减少程序量。


3).高手解法

对于高手解法,直接采用lambda匿名函数,一行代码就可以解决问题,大大减少了程序的编程量,让程序具有了简洁的python语言特色。


第三题  你的名字有多性感?

1).题目描述

编写一个程序sexy_name,根据以下条件计算一个人的名字的性感程度。

有一个预装的字母分数字典,称为SCORES。将名称中的字母(不区分大小写)加起来以获得性感的分数。忽略其他字符。其中SCORES为:

程序必须根据“性感分数排名”图表返回姓名的性感程度,其中,score为名字的得分,例如:

示例:sexy_name('SAMANTHA') = 'THE ULTIMATE SEXIEST'sexy_name('you') = 'VERY SEXY'


2).屌丝解法

这道题非常容易理解,只需要按部就班就可以写出来最简单的代码。

  • 首先将name全部大写,设置总得分score=0;

  • 然后循环计算总的得分情况;

  • 最后根据总得分来返回姓名的性感程度。


3).进阶解法

对于屌丝解法中,可以看到通过for循环来计算总得分让程序看起来非常的low,所以我们来优化这个问题,通过sum函数来一行代码求取综合得分。

4).高手解法

在高手解法中,有两个点值得我们学习:

利用SCORES.get(x, 0)来获取字典中的数值,如果字典中不存在键值x,则返回默认值0。从而有效的规避了name中无效的字符。

利用sum([score >= 61,score >= 301,score >= 600])求和来作为索引。例如我们的socre为320分,则[score >= 61,score >= 301,score >= 600] = [1,1,0],则sum([score >= 61,score >= 301,score >= 600])=2,对应返回的姓名性感程度为“VERY SEXY”。巧妙的利用求和来作为索引,非常值得大家学习。


总结

通过以上三道题目的讲解,可以看到,虽然都是解决一道问题,但是程序所体现出来的个人编程能力却有着巨大的差别!

所以只有不断的优化,打磨自己的编程技巧,才能让自己不断向着高手迈进!

欢迎大家在留言区吱一声,如何才能提高自己的Python技巧!





菜鸟编程大本营,已经正式上线

专注于分享趣味的编程技巧,不限于Java, Python ,Go, Javascript等语言,让菜鸟爱上编程,进阶成为高手,欢迎关注。




    
菜鸟编程本营,从菜鸟进阶高手


爆款文案





    

点这里,获取新手福利

!!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/107259
 
578 次点击