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

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

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

第一题 二进制中的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等语言,让菜鸟爱上编程,进阶成为高手,欢迎关注。

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

爆款文案

点这里,获取新手福利!!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值