python_编程面试题
使用递归方法对一个数组求最大值和最小值
"""
用递归算法求解一个数组的最大值和最小值
思路:
1、首先假设这个列表只有1个元素或两个元素
2、再考虑超过两个元素的情况,将该列表从中间位置一分为二
3、然后递归调用该函数
"""
def myMaxMin(L,start,end):
'''递归来得到数组的最大值和最小值'''
if end - start <= 1:#基准点的情况
return(max(L[start],L[end]),min(L[start],L[end]))
else:
max1, min1 = myMaxMin(L,start,(start+end)//2)#求前半部分的
max2, min2 = myMaxMin(L,(start+end)//2+1,end)#求后半部分的
return max(max1,max2),min(min1,min2) def maxMin(L):
assert(type(L) == type([]) and len(L) > 0)
maxV, minV = myMaxMin(L,0,len(L)-1)
print(maxV,minV)
return maxV, minV L = [1,3,5,6,7,8,5,7,8,-9]
assert(maxMin(L) == (8,-9))
使用递归的方法求出10个球的颜色可能性打印出来(颜色只有黑、白两种)
'''
有10个球,每个球有两种颜色选择,黑与白,使用递归的方法把这10个球的颜色可能性打印出来
1、将这10个球放入到一个列表中,全部用0表示,0表示白,1表示黑
2、找基准点(程序结束的条件)start = end,打印结果
'''
count = 0
def perm(L,start,end):
if start == end:#基准点,表示已经给每个球都赋值了一个颜色
print(L)
global count
count += 1
else:
perm(L,start+1,end)
L[start] = (L[start]+1)%2#实现1与0的互换
perm(L,start+1,end) L=[0,0,0,0,0,0,0,0,0,0]
res = perm(L,0,len(L))
print(count)#1024,2**10
使用两个栈实现一个队列
'''
使用两个栈实现一个队列
队列:a,b,c -->c,b,a
'''
class QueueWithStacks: def __init__(self):
self.s1 = []
self.s2 = [] def push(self,e):
self.s1.append(e) def pop(self):
if len(self.s2) == 0:
while len(self.s1) > 0:
t = self.s1.pop()
self.s2.append(t)
assert len(self.s2) > 0,'队列已经为空'#此时说明队列没有元素
return self.s2.pop() q = QueueWithStacks()
q.push('a')
q.push('b')
q.push('c')
print(q.pop())
print(q.pop())
print(q.pop())
print(q.pop())#AssertionError: 队列已经为空
实现单例模式
class Singleton:
__instance = None
@classmethod
def get_instance(cls):
if cls.__instance:
return cls.__instance
else:
cls.__instance = Singleton()
return cls.__instance
obj1 = Singleton.get_instance()
print(obj1) # <__main__.Singleton object at 0x7eff2ce22b70>
obj2 = Singleton.get_instance()
print(obj2) # <__main__.Singleton object at 0x7eff2ce22b70>
class Singleton(object):
def __new__(cls, *args, **kwargs):
if not hasattr(cls,'_instance'):
cls._instance = super(Singleton,cls).__new__(cls)
return cls._instance s1 = Singleton()
s2 = Singleton()
print(s1 == s2) # True
闭包
def foo():
return [lambda x: i+x for i in range(4)] print([x(3) for x in foo()]) # 将上面的程序改写,以便更好的理解
def foo():
function_list = []
for i in range(4):
function_list += [lambda x: i+x]
return function_list # 返回一个存有四个函数的列表 # x其实就是表示x=lambda x: i+x,所以x(3)就表示lambda 3: i+3,只不过此处用到了闭包的概念:i是foo函数的局部变量,x是foo的内嵌函数
# 内嵌函数引用外部函数的变量i,当foo函数执行完毕返回一个函数列表时,i的值已经是3了,所以当x函数中的i就是3,所以结果就是[3+3,3+3,3+3,3+3]
print([x(3) for x in foo()])
编译一个目录,找出该目录下的所有文件
import os
file_list = []
def traversal_directory(dir):
for child in os.listdir(dir):
parent_child = os.path.join(dir, child)
if os.path.isdir(parent_child):
traversal_directory(parent_child)
else:
file_list.append(parent_child)
return file_list if __name__ == "__main__":
for file in traversal_directory("slideshow"):
print(file)
is与==的区别
"""
==符号判断的是字面值
is判断的是对象的地址
==符号为True则用is判断也必定为True
is判断为True时用==符号判断未必是True
"""
class A:
@staticmethod
def __eq__(var):
return True
if __name__ == "__main__":
print(A() == 1) # True
print(A() is 1) # False
print("A()的id",id(A()))
print("1的id",id(1))
python与C语言在运行效率上哪个更快,并编写代码验证
求第45个斐波那契数
import time def fun(n):
if n <= 2:
return 1
return fun(n-1) + fun(n-2) start = time.time()
res = fun(45)
end = time.time()
tm = end - start
print(tm) # 287.7714354991913,大约5分钟
print(res)
#include <stdio.h>
#include <time.h>
#include <unistd.h> //导入sleep函数
long fib(int n){
if(n <= ){
return ;
}else{
return fib(n-) + fib(n-);
}
}
int main(){
unsigned long start = time();
long res = fib();
unsigned long end = time();
double time = end - start;
printf("time:%f\n",time); //大约5秒钟
printf("res:%ld\n", res);
return ;
}
python_编程面试题的更多相关文章
- C语言编程规范试题(标准答案)
C语言编程规范试题(标准答案) 一.单选题(每小题3分,共20小题60分) 1.1-1.5 B D A C B 1.6-1.10 C A D B C 1.11 ...
- C语言编程规范试题
C语言编程规范试题 [说明]: 1.本试题中不考虑头文件引用问题(假定已经包含正确的头文件),C语言的标准函数都可用: 2.如果不特别说明,假定程序运行环境为:操作系统Windows 2000, VC ...
- Java 并发编程面试题
并发编程面试题-内存模型说下内存模型定义为什么要有内存模型为什么要重排序,重排序在什么时候排如何约束重排序规则happens-before什么是顺序一致性CAS 实现的原理,是阻塞还是非阻塞方式?什么 ...
- C++ 高质量编程附录试题
附录B :C++/C试题 本试题仅用于考查C++/C程序员的基本编程技能.内容限于C++/C常用语法,不涉及数据结构.算法以及深奥的语法.考试成绩能反映出考生的编程质量以及对C++/C的理解程度,但不 ...
- Java并发编程面试题 Top 50 整理版
本文在 Java线程面试题 Top 50的基础上,对部分答案进行进行了整理和补充,问题答案主要来自<Java编程思想(第四版)>,<Java并发编程实战>和一些优秀的博客,当然 ...
- 合格linux运维人员必会的30道shell编程面试题及讲解
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51cto.com/2561410/1632876 超深度 ...
- (转)合格linux运维人员必会的30道shell编程面试题及讲解
超深度讲解shell高级编程实战,截至目前shell编程课程国内培训机构最细的课程,不信请看学员表现的水平. 课程牛不牛,不是看老师.课表,而是看培养的的学生水平,目前全免费中伙伴们赶紧看啊. htt ...
- Linux运维必会的实战编程笔试题(19题)
以下Linux运维笔试面试编程题,汇总整理自老男孩.马哥等培训机构,由运维派根据实战需求,略有调整: 企业面试题1:(生产实战案例):监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理 ...
- java网络编程面试题
1.网络编程时的同步.异步.阻塞.非阻塞? 同步:函数调用在没得到结果之前,没有调用结果,不返回任何结果.异步:函数调用在没得到结果之前,没有调用结果,返回状态信息.阻塞:函数调用在没得到结果之前,当 ...
随机推荐
- 第二十六章 system v消息队列(二)
msgsnd int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); 作用: 把一条消息添加到消息队列中 参数: msqi ...
- 学习笔记59_python字符串处理
python中,字符串可以使用 '或"括起来 1. 要想写成 "hellow "aaaa" ",在python中,可以"hellow ' ...
- SJ定理的坑点
目录 \(\bf Anti-Nim\) 定义 结论 \(\bf Anti-SG\) 定义 SJ 定理 由于出题人在膜你赛出了假题,于是就发现了这个坑点-- 反正这个出题人出的都是假题 我感觉这个好像大 ...
- Ubuntu16.04下nvidia驱动+nvidia-docker+cuda9+cudnn7安装
一.宿主机安装nvidia驱动 打开终端,先删除旧的驱动: sudo apt-get purge nvidia* 禁用自带的 nouveau nvidia驱动 sudo gedit /etc/modp ...
- js基础总结02--字符串操作
1.字符串中对单个字符位置的操作 indexOf(char); 从左往右查找,返回匹配到的第一个字符的位置,没有匹配则返回-1 lastiIndexOf(char); 从右往左查找,返回匹配到的第一个 ...
- 2019年10月11号 王庆超 linux
1.计算机操作系统简介 (1)掌握操作系统的定义:操作系统是一个用来协调.管理和控制计算机硬件和软件资源的系统 程序,它位于硬件和应用程序之间. (2)掌握操作系统的内核的定义:操作系统的内核是一个管 ...
- 【html css js】实现一个简易日历
——[效果预览] 实现了日历最基础的功能,当前日期红色显示,可通过上方的左右按钮查看上一月或下一月的日期. ——[代码部分] 1. HTML <body> <div class=&q ...
- JavaScript with Image:创建缩略图
当图片很大,直接把图片从Server下载到浏览器上看是一种很不明智的做法,浪费了服务器的资源,网络带宽和客户端的资源.所以,通常Server和Client之间会传输缩略图,只有当Client请求某张图 ...
- VMware安装Ubuntu 16.04.4 LTS
1.下载Ubuntu镜像 https://www.ubuntu.com/download/desktop 2.创建新的虚拟机 3. 4.这里默认即可,可以不选 5. 6. 7.这里位置可以随时改 8. ...
- django_5:表单1
CSRF( Cross Site Request Forgery)跨站点请求欺骗 方法一. {% csrf_token %} 方法二.在setting.py中注释掉MIDDLEWARE中的'djang ...