初级编程通关练习题 #19 – 判断三角形

给定三个数字作为边长,判断它们是否可以组成三角形。三条线段组成三角形的条件是:任何两条边之和大于第三条边。请实现一个函数 triangle,三个参数是a、b、c,判断a/b/c是否可以组成一个三角形,返回结果为True或者False,要求Python代码长度不能超过40个字符。 输入样例: a = 4b = 3c = 5 输出样例: True 算法思路: 对于限制代码长度的题目,我们需要使用匿名函数来减少字符, 因为lambda函数不需要写关键词return。譬如:triangle=lambda a,b,c:#your code goes here....a, b, c 三边组成三角形的条件是:a + b > c, a + c >…

初级编程通关练习题 #18 – 离坐标中心最近的N个点

给定一组平面坐标集合S,找出这些坐标中距离中心点(0,0)距离最近的N个点列表,N大于1小于坐标集合的长度。 输入样例: S = [[4, 1], [6, 3], [5, -2], [-1, 4], [3, -3], [-2, -4], [1, 1]] N = 3 输出样例: [[1, 1], [4, 1], [-1, 4]] 上面的输入样例中,距离坐标中心点最近的三个点是 [1,…

初级编程通关练习题 #17 – 数组合并区间

给定一个数组,里面的每个元素都是一个区间,即两个数值组成的子数组,第一个数值代表区间低值,第二个数值代表区间高值。实现一个函数检查数组里面的每一个区间,如果两个区间有重合的部分则合并为一个区间,返回合并后的区间列表。 输入样例: array = [[-2, 3], [10, 13], [2, 5], [7, 10], [15, 17]] 输出样例: [[-2, 5], [7, 13], [15, 17]] 算法思路: 首先将数组按照区间的低值由小到大排序从第二个区间开始,检查每一个区间的低值和它前面的区间的高值是否有重合如果有重合则合并两个区间,如果没有重合则把该区间添加到返回列表中。

初级编程通关练习题 #16 – 面积最大值

给定一组整数数组,数组里的每一个数值都代表长方形的边长,另外一边的边长为数值之间的距离(每个数值和相邻数值之间的距离都为 1)请找出该长方形的最大面积。 输入样例: [6, 16, 9, 12, 16, 7, 13, 10, 15, 17] 输出样例: 128 在上面的输入样例中,面积最大值为第二个数值16到最后数值17之间的区域,如下图所示。两个数值之间的距离为8,16 x 8 = 128。 算法思路: 需要准备两个指针,一个从头往后移动,另外一个从尾往前移动。每次移动指针时检查当前指针指向的两个数值所组成的面积,如果比已经找到的最大值要大,则替换最大值。每次只能移动两个指针其中的一个,当前数值最大的那个指针保持不动,移动另外一个指针。每次移动指针后,需要再次比较两个数值来决定下次移动哪一个指针。

初级编程通关练习题 #15 – 电话号码字母组合

给定一个正整数 N(N 的长度大于 1 小于 5),按照下面图案中电话按键每个数字所对应的字母字符串,找出该整数可以表示的全部字母组合。注意:数字 1 没有对应的字母。 (该图片来自维基百科 - https://en.wikipedia.org/wiki/Telephone_exchange_names ) 输入样例: N= 3415 输出样例: ['dgj', 'dgk', 'dgl', 'dhj', 'dhk', 'dhl', 'dij', 'dik', 'dil', 'egj', 'egk', 'egl', 'ehj', 'ehk',…

初级编程通关练习题 #14 – 搜索最小数值

给定一个正整数,在只能将其中的一个数字移位的条件下,找出移位后该正整数新的最小数值,以及应该移位的数字的前后位置索引。 输入样例: 201220071860373372 输出样例: [12200271860373372, 0, 6] 上面的输入样例中,正整数 201220071860373372 的第一位数字 2 (索引为 0)移动到第7个位置(索引为6),可以得到最小数值 12200271860373372。 算法思路: 循环检查正整数的每一个数字,将该数字从前移动到最后,逐一比较得到的新数值,保留最小的数值以及移动的位置。

初级编程通关练习题 #13 – 匿名函数搜索字符串

给定两个字符串列表 arr1 和 arr2,检查列表 arr1 里面的每一个字符串是否包含在列表 arr2里面的字符串中。实现一个函数以 arr1 和 arr2 为参数,返回arr1的字符串可以在 arr2找到的列表,如果都找不到就返回空列表。 编码要求:使用lambda 匿名函数单行完成上面的搜索,并返回结果。全部代码长度不能超过65个字符。 输入样例: arr1 = ["load", "day", "sun", "gone"]arr2 = ["secret", "keep loading", "harvest", "sunshine", "holiday"] 输出样例: ['day',…

初级编程通关练习题 #12 – 寻找立方数

给定一个字符串里面包括有文字和数字,请编写一个函数把其中的数字全部提取出来,如果连续数字超过3个,需要分成两个数字或以上的数,然后查看每一个数字是否是立方数。所谓立方数,就是一个多位数的每一个数字立方之和等于它本身,譬如:数字 407是立方数,因为 43 + 03 + 73 = 407。函数的返回值就是所有立方数列表。 输入样例: "407233-0abde22479,ip address:153.254.162.107" 输出样例: [407, 0, 153, 560] 算法思路: 首先可以利用正则表达式从字符串中提取所有的数字,提取数字时每个数字的长度在1到3之间。检查提取出来的每个数字,如果是立方数就加入到函数返回列表中

初级编程通关练习题 #10 – 匿名函数陷阱

我们在使用Python的匿名函数时,经常会生成临时函数然后在后面再调用,但是如果不注意就会出现意想不到的错误,譬如下面的代码: 我们期望看到的结果是 0、3、6、9,但是实际上显示出来的却是四个 9。 请修改上面的匿名函数代码,让下面循环调用函数 f(3)的结果为 0、3、6、9。 解决思路: 这个问题的本质是Python函数变量作用域里的闭包实现方式所导致的。解决的方法有如下几种:使用函数工厂模式使用函数默认参数使用 eval 方法使用 yield 方法使用 partial 方法使用 tuple