python笔(面)试题
python小明
bug虐我千百遍,我待bug如初恋!
展开
-
给定两数组,对两者进行合并排序(python实现)
实例:输入:[4,3,2,1],[9,8,7,6]输出:[1, 2, 3, 4, 6, 7, 8, 9]class demo(): def fun(self,a,b): arr = list(set(a + b)) return self.qus(arr) def qus(self,arr): less = [] great = [] pivot = [] if len(arr) <原创 2021-04-25 21:28:23 · 360 阅读 · 0 评论 -
求字符串中的最长回文子串(python实现)
实例:输入:12344356输出:3443'''中心扩散法'''class demo(): def func1(self,string): #记录回文串的起始位置 start = 0 #记录回文串的终止位置 end = 0 for i in range(len(string)): #字符串长度为奇数时,扩散中心为当前节点i left1,right1 = sel原创 2021-04-25 21:24:10 · 498 阅读 · 0 评论 -
S型循环输出字符串指定个数(python实现)
题目:给定一个字符串,给定起始位置,给定要输出的个数,S型循环输出字符串内容直到个数到达指定个数为止。例:输入字符串:‘123456’输入起始位置下标:1输入个数:11输出结果:2 3 4 5 6 5 4 3 2 1 2'''解题思路:设置一个游标位,在输出个数未达到指定个数前,如果游标指向的是字符串的第一个字符,则下一次循环输出时游标向右移动,即+1,;如果游标指向的是字符串的最后一个字符时,则下次循环输出时游标向左移动,即-1,直到输出到指定个数的字符为止。'''mystr = '原创 2021-03-24 21:47:33 · 740 阅读 · 0 评论 -
实现驼峰规则变量名转换为下划线连接(python实现)
题目:将驼峰规则命名的字符串转换为以下划线连接的字符串例:输入:‘WoAiZhongGuo’输出:'wo_ai_zhong_guo''''方法解析:分两步:一、将字符串第一个字符小写,第二步、将除开第一大写字母外的大写字母替换为‘_’加上该字母的小写字母。也可以先进行替换操作,最后在全部转换为小写。'''#方法一:my_str = 'WoAiZhongGuo'result = ''for i in my_str.replace(my_str[0],my_str[0].lower()):原创 2021-03-24 21:03:46 · 1871 阅读 · 0 评论 -
字符串反转后压缩空格拼接(python一行代码实现)
题目:将一个带有空格的字符串压缩成只用一个空格分隔,并将空格分隔的每一部分反转。例如:输入字符串:“abc def ghi”最终输出:“cba fed ihg”'''方法解析:首先将字符串按照空格进行分割,然后将每一部分反转,最后只用一个空格拼接起来下面我的方法用到了lambda,map,reversed'''my_list = 'abc def ghi'#方法一:print(' '.join([''.join(reversed(x)原创 2021-03-24 20:12:06 · 302 阅读 · 0 评论 -
python之关于round函数的bug
round()函数:此函数慎用!!!作用:返回浮点数x的“奇进偶舍值”。round() 方法的语法:round( x [, n] )参数:x – 数值表达式。n – 数值表达式,表示保留小数点后的位数。返回值:返回浮点数x的“奇进偶舍值”。注意:-------------- 该方法和python版本有关。阅读python的文档,里面是这么写的:在python2.7的doc中,round()的最后写着,“Values are rounded to the closest multipl原创 2021-03-22 22:21:27 · 1578 阅读 · 1 评论 -
二维矩阵的行列互换(求矩阵的转置Python实现)
a = [ [1,2,3], [4,5,6], [7,8,9],]'''方法一:通过列表推导式来实现'''b1 = [[row[col] for row in a] for col in range(len(a[0]))]print('b1:',b1)'''方法二:通过内置函数zip()来实现'''b2 = list(zip(*a))print('b2',b2)运行结果:[[1, 4, 7], [2, 5, 8], [3, 6, 9]][(1, 4, 7),原创 2021-03-22 16:39:16 · 3053 阅读 · 0 评论 -
python之迭代器,生成器
什么是迭代器协议对象需要提供next方法,它要么返回迭代中的下一项,要么就引起一个StopIteration异常,终止迭代.什么是可迭代对象实现了迭代器协议的对象就是可迭代对象(实现方式是,实现iter方法)迭代器迭代器对象就是实现了iter() 和 next()方法的对象.其中iter()返回迭代器本身,而next()返回容器的下一个元素,在结尾处引发StopInteration异常.迭代器有两个方法:iter() 和 next()Iterator甚至可以表示一个无限大的数据流,例如全体自然数原创 2021-03-21 18:43:51 · 141 阅读 · 0 评论 -
python基础试题(2)
1.Python和Java、PHP、C、C#、C++等其他语言的对比?python是一种脚本语言,它的运行需要python解释器,属于解释型的语言,python本身就是由C语言开发出来的,而且是开源的,由此可见C语言的强大,;C语言属于中级语言,它介于高级和低级语言之间,C是编译型的语言,它的运行必须经过编译器的处理才能形成最终的执行代码,C语言的应用非常广泛,C语言最主要的用途就是系统底层的应用。简单的说,它们都是编程语言。是在第三代和第四代编程语言。 都和C有关系。 底层解释器都是C写的。都存在进程原创 2021-03-21 17:37:34 · 13975 阅读 · 0 评论 -
python基础试题(1)
一.填空题:(共32分,一空两分,最后一题4分)1、在Python中__________表示空类型?ANS:None2、break/continue/return的区别_____________、_____、ANS:Break:用于退出所有循环continue:跳出本次循环,继续执行下次循环return:程序返回,不再执行下面的代码3、位和字节的关系____________________________________ANS:一个字节(byte)=8位(bit) ?位为最小的单位4、原创 2021-03-18 22:52:40 · 3713 阅读 · 2 评论 -
打印魔方阵(python)实现
'''魔方阵是我国古代发明的一种数字游戏: n阶魔方是指这样一种方阵,他的每一行,每一列以及对角线上的各数之和为同一个相同的常数,这个常数是:n*(n**2 + 1)/2,此常数称为魔方阵常数。由于偶数次阶的方阵求解起来比较困难,这里只考虑n为奇数的情况 以下就是一个n=3的魔方阵: 6 1 8 7 5 3 2 9 4 它的各行各列及对角线元素之和为15算法设计: 采用穷举法时,对于n比较到时,计算机也需要很长时间才能找出来。原创 2020-11-27 20:12:19 · 12058 阅读 · 5 评论 -
打印螺旋矩阵(python)实现
螺旋阵:任意给定n的值,an如下螺旋方式输出方阵'''n = 3 输出:1 8 7 2 9 6 3 4 5n = 4 输出:1 12 11 10 2 13 16 9 3 14 15 8 4 5 6 7算法设计1: 此例按照摆放数据的过程,逐圈分别处理每圈的左,下,右,上方的数据。以能n=4为例: 把1--12看做一层,1原创 2020-11-27 20:09:34 · 1446 阅读 · 1 评论 -
简述最优二叉树(赫夫曼树)
什么是哈夫曼树:给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。哈夫曼树被用来进行哈夫曼编码,下面来介绍哈夫曼编码:假设需要传送的电文为“ABACCDA”,它只有四种字符,只需要用两个字符的串就可以分辨,假设A,B,C,D的编码分别是00,01,10,11,则该电文的编码便是:“00010010101100”,总长为14位,对方接收时,只需要二位一原创 2020-11-16 19:59:32 · 17895 阅读 · 0 评论 -
浅谈大根堆,小根堆,以及堆排序(python)实现
既然要说堆排序,那么必然要说说什么是大根堆,小根堆了。大根堆: 若根节点存在左右子节点,那么根节点的值大于或等于左右子节点的值。小根堆: 若根节点存在左右子节点,那么根节点的值小于或等于左右子节点的值。通俗来说,那顾名思义,大根堆就是根节点比左右孩子都要大或者等于的二叉树,小根堆就是根节点比左右孩子都要小或者等于的二叉树。那么我们可以总结出关于大根堆和小根堆的结论:(1)、堆是一棵完全二叉树;(2)、小根堆的根节点是堆中最小值,大根堆的根节点是堆中最大值;(3)、堆适合采用顺序存储。堆最重要原创 2020-11-16 17:18:36 · 11328 阅读 · 1 评论 -
希尔排序(python)实现
'''排序思想:先将整个待排记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录"基本有序"时,再对全体记录进行一次直接插入排序。'''def shell_sort(arr_list): n = len(arr_list) gap = int(n / 2) while gap > 0: for i in range(gap, n): temp = arr_list[i] j = i原创 2020-11-14 15:41:05 · 148 阅读 · 0 评论 -
插入排序(python)实现
'''排序过程:从第二个元素开始与前i-1,i-2,....个元素进行比较,如果该元素大于第i个元素,则将i到改元素之间的向后移动,将改元素插入到改位置。'''def insert_sort(arr_list): for i in range(1, len(arr_list)): key = arr_list[i] #待排序元素 j = i - 1 while j >= 0 and key < arr_list[j]: #从j-原创 2020-11-14 14:39:14 · 119 阅读 · 0 评论 -
堆排序(python)实现
def MAX_Heapify(heap,HeapSize,root):#在堆中做结构调整使得父节点的值大于子节点 left = 2*root + 1 right = left + 1 larger = root if left < HeapSize and heap[larger] < heap[left]: larger = left if right < HeapSize and heap[larger] < heap[原创 2020-11-02 20:41:33 · 160 阅读 · 0 评论 -
快速排序(python)实现
快速排序1. 介绍: 快速排序使用分治法策略,把一个串行(list)分为两个子串行(sub - lists)。 快速排序,快,而且效率高!它是处理大数据最快的排序算法之一了。 快排的思想:首先任意选取一个数据(通常选用数组的第一个数)作为关键数据, 然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。 2. 一趟快速排序的算法是: 设置两个变量i、j,排序开始的时候:i = 0,j = N - 1; 以第一个数组元素作为原创 2020-11-02 20:27:47 · 449 阅读 · 0 评论 -
归并排序(python)实现
'''*******归并排序****** >>> more important 时间复杂度:O(nlog₂n) 空间复杂度O(n)''' # 分区合并def merge(a, b): c = [] h = j = 0 while j < len(a) and h < len(b): if a[j] < b[h]: c.append(a[j]) j +=原创 2020-11-02 20:19:51 · 179 阅读 · 0 评论 -
选择排序(python)实现
'''选择排序1. 算法步骤 a:首先在未排序序列中找到最小元素,存放到排序序列的起始位置 b:再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾。 c:重复第二步,直到所有元素均排序完毕。2. 复杂度 时间复杂度:O(n²) 空间复杂度:O(1)3. 稳定性:不稳定'''def select(arr): for i in range(len(arr) - 1): minIndex = i for j i原创 2020-11-02 20:15:19 · 218 阅读 · 1 评论 -
冒泡排序(python)实现
'''冒泡排序:1. 算法步骤: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的操作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。2. 复杂度 时间复杂度:O(n²) 空间复杂度:O(1)3稳定性:稳定'''def M_P_select(arry): for i in原创 2020-11-02 20:11:37 · 169 阅读 · 0 评论 -
求一个数的整数分化问题(python)实现
整数的分化问题:对于一个正整数n的分划,就是把n表示成一系列正整数之和的表达式。分划与顺序无关,例如6=5+1和6=1+5被认为是同一种分划。另外,这个正整数自身也算是一种分化。例:对正整数n=6的分划:65+14+2 4+1+13+3 3+2+1 3+1+1+12+2+2 2+2+1+1 2+1+1+1+11+1+1+1+1+1求:对于正整数n,计算其分划的数目P(n)模型建立:找出建立递归分划数目的公式根据n=6的实例可以发原创 2020-10-31 18:31:28 · 662 阅读 · 0 评论 -
汉诺塔(python)实现
汉诺塔问题: 古代有一个梵塔,塔内有三个基座,A,B,C,开始时A基座上有64个盘子,盘子的大小不等,大的在下,小的在上。有一个老和尚想把这64个盘子从A基座上移动到B基座上,但每次只允许移动一个盘子,且在移动过程中,3个基座上的盘子都始终保持着大盘在下,小盘在上。移动过程中可以利用C基座做辅助。此问题又被称为“世界末日问题”,因为以最高效的移动(无不必要的移动)方法,以每秒移动一次的速度,64 个盘子也需要近580亿年的时间。'''算法:大规模转化为小规模问题,把上面的n-1个盘子看做一个小盘子,那原创 2020-10-31 18:12:55 · 2658 阅读 · 0 评论 -
求n的阶乘(python)实现
求n的阶乘是一个很简单的问题,循环操作和递归操作都能够实现。'''求n的阶乘'''#for循环写法def func1(n): sum_n = 1 for i in range(1,n+1): sum_n *= i return sum_n#递归写法def func2(n): if (n == 0 or n == 1): return 1 else: return n*func2(n-1)def main(原创 2020-10-31 15:58:03 · 28212 阅读 · 0 评论 -
交换两变量的值(python)实现
以下总结了交换两变量的三种方法,分别为:临时变量法,求和做差法和按位异或法。'''临时变量法'''def func1(i,j): print("临时变量法:\n交换前:a = %s,b = %s:" %(i,j),end='') temp = i i = j j = temp print("交换后:a = %s,nb = %s" %(i,j))'''求和做差法'''def func2(i,j): print("求和做差法:\n交换前:a = %s,原创 2020-10-31 15:51:50 · 278 阅读 · 0 评论 -
求两数的最大公约数的三种方法(python实现)
求两个数的最大公约数,有三种方法,分别是:短除法,辗转相除法,更相减损法。短除法:运用短除法找到两个数的最大公约数,具体过程是逐步找出两个数的所有公约数,再把这些公约数累乘起来,就得到两个数的最大公约数。def func1(): a = int(input("请输入第一个数:")) b = int(input("请输入第二个数:")) a1,b1 = a,b t=1 for i in range(2,min(a,b)): while(a % i原创 2020-10-29 21:18:06 · 43131 阅读 · 3 评论 -
数字三位分节法(即整数部分从右向左,每隔三位用逗号分开)python实现
题目:将输入的一个数字先保留两位小数,整数部分用三位分节法表示。样例:输入:1234567.89输出:1,234,567.89def format_number(amount): ''' 将一个数进行格式化输出: 先将该浮点型数进行四舍五入,保留两位小数,然后转换为string类型,以小数点分割,切割出整数部分和小数部分, 再对整数部分进行格式化,最终将格式化的整数部分与小数部分进行拼接就是最终结果。 :param amount: float :re原创 2020-10-28 13:44:15 · 8785 阅读 · 0 评论 -
将一个字符串分割成相同字符组成的子串(python实现)
题目:有这样一个字符串s,将其分割为相同字符组成的子串,例如:s1 = “aabbccdd” ,结果:[“aa”,“bb”,“cc”,“dd”]输入:s输出:分割后的结果列表方法一:判断相邻的两个字符是否相等,若不相等就添加标志符隔开,然后转换为列表def func1(s): ''' 用来将一个字符串转换成用相同连续字符组成的子串列表 :param s: :return: ''' s1 = list(s) k = 0 for j i原创 2020-10-21 21:48:37 · 1942 阅读 · 0 评论