python 笔试总结
1、对比两种函数对应结果
def fn(x):
if x>0:
print(x)
fn(x-1)
****结果******
3
2
1
$$$$$$另外一种$$$$$$$$$
def fn(x):
if x>0:
fn(x-1)
print(x)
****结果******
1
2
3
2.简单的方式写下斐波那契数列
1、递推法
def fn(n):
a,b=0,1
for i in range(n+1)
a,b=b,a+b
return a
print(fn(5))
******结果********
8
2、递归法
def fn(n):
if n==1 or n==0:
return 1
return fn(n-1)+fn(n-2)
print(fn(5))
*****结果******
8
3、给出一个整数求各个位的数值
def get_diget(num,i):
return num//(10**i)%10 #各位数i取0
print(get_diget(1314,2))
4、将一个整数变成一个列表
def int2list(num):
li=[]
while num>0:
li.append(num %10) #每次取余数得出最后一位的值加入列表
num= num //10#运算一位后整除10,剩下的num少一位进入下次循环
li.reverse()
return li
print(int2list(13156))
******结果******
[1,3,1,5,6]
5、对整数进行翻转操作(123=>321)
def reverse_int(num):
res=0
while num>0:
res=res*10 #从十位开始每次*10位数增加一位
res+=num % 10 #num %10 得出最后一个的值 加到res
num=num//10 #循环一次num的值少一位
return res
print(reverse_int(123))
****结果******
321
如果输入结果123000 翻转后结果也是321
6、用装饰器写一个计时函数:
装饰器的作用:1、引入日志 2、函数执行时的时间统计 3、执行函数前预备处理 4、执行函数后的清理处理 5、权限校验等场景 6、缓存
def metric(fn):
#空白处 #当装饰器内部调用了__name__等类的方法时候需要在空白处填写@functools.wraps(fn),如果没有调用类的内置方法无需填写
def wrapper(*args,**kwargs):
start=time.time()
func=fn(*args,**kwargs)
end=time.time()
print('运行时间%s'%(end-start)) #print('%s 运行时间 %s s'% (fn.__name__, end-start ))
return func
return wrapper
@metric
def reverse_int(num):
res=0
while num>0:
res=res*10 #从十位开始每次*10位数增加一位
res+=num % 10 #num %10 得出最后一个的值 加到res
num=num//10 #循环一次num的值少一位
return res
print(reverse_int(123))
7 、two sum问题:给定一个整数数组和一个目标值,找出数组中和为目标值的两个数要求返回这两个数所在的位置
第一种两边找方法:时间复杂度o(n) 该方法要求给定的列表要是有序的列表。
def two_sum(li,num):
i=0 #i是轮询查找起始位置
j=len(li)-1 #j为轮询查找最后一个位置
dict={}
for k,v in enumerate(li): #将列表转换为字段,列表的值作为key,列表元素下标做字典的value
dict[v]=k
li_sort=sorted(dict.keys()) #对生成的字典按key进行排序得到排序后的列表
while i<j : #只要i<j 说明轮询查找未结束
s=li_sort[i]+li_sort[j] #列表中两个元素相加的结果
if s==num :
return dict[li_sort[i]],dict[li_sort[j]] #根据得到的值查询得到结果在原始列表的下标
elif s<num :
i+=1 #当两个元素相加值小于要查找的结果时说明前面的数值太小 i的位置向后移动一个位置
elif s>num:
j-=1 #当两个元素相加值大于要查找的结果时说明后面的数值太大 j的位置向前移动一个位置
else:
return -1
b=[8,3,6,9,7,2]
c=two_sum(b,14)
print(c)
****结果*****
(2, 0)
第二种:利用哈希表的方式:时间复杂度0(n)
def two_sum2(li,num):
dict={}
for i in range(len(li)):
a=li[i]
b=num-a
if b not in dict: #检查b是否在字典中,若果没有将值写入字典,直到找到要得到的值
dict[a]=i
else:
return dict[b],i
else:
return -1
b=[8,3,6,9,7,2]
c=two_sum2(b,14)
print(c)
*****结果*****
(0,2)
8、1 and 2 or 3 and 4的结果
在python里面,0,'',[],{},() 和None为假,其它任何东西都为真。
一、and的使用
1 and 2 和 [] and 1
如果没有假值,返回的是最后一个真值,如果有假值,则返回的是第一个假值。
***结果****
2
[]
二、or 的使用
2 or 3 和 [] or 2
如果没有真值,返回的是最后一个假值,如果有真值,则返回的是真值。
***结果****
2
2
三、在不加括号的前提下 and 的优先级大于or
所以 1 and 2 or 3 and 4 运算结果为:
1 and 2 为2 >- 3 and 4 为4 >- 2 or 4 为2
9、利用堆栈的方法做一个括号匹配函数:
def brace_match(n):
stack=[]
dict={'(':')','[':']','{':'}'}
for ch in n:
if ch in ('(','{','[') :
stack.append(ch)
elif len(stack) == 0: #注意判断stack的长度要先与出栈右括号
print('多出一个右括号%s' % ch)
return False
elif dict[stack[-1]]==ch:
stack.pop()
else:
print('括号%s处不匹配'%ch)
if len(stack)==0:
return True
else:
print('剩余左括号未匹配')
return False
10.利用队列读取一个文件的最后n行数据
from collections import deque
q=deque(open('test.txt','r',encoding='utf-8'),5)
原理:设定了固定长度的队列,当读取的时候直接进队出队,直到最后N个数据
例如: q=deque([1,2,3,4,5,6],5)
print(list(q))
***结果****
[2,3,4,5,6] #1由于队列长度限制已经出队,剩余2,3,4,5,6
11、利用python内置方法求差级、交集、并集
a=[1,2,3]
b=[3,4,5]
c=list(set(a)|set(b) #求并集
c=list(set(a)&set(b))#求交集
c=list(set(a)-set(b))#求差级(求差级两个变量位置不同得出的结果不同)
c=list(set(a)^set(b))对称差集(项在a或b中,但不会同时出现在二者中)
*****结果******
[1,2,3,4,5]
[3]
[1,2]
[1,2,4,5]
差集举例
c=list(set(b)-set(a))
结果为[4,5]
12、给定两个有序数组,对这两个数组进行排序
def merge2list(arr1,arr2):
arr=[]
i=0
j=0
while i< len(arr1) and j< len(arr2):
if arr1[i] <= arr2[j]:
arr.append(arr1[i])
i+=1
else:
arr.append(arr2[j])
j+=1
while i< len(arr1):
arr.append(arr1[i])
i+=1
while j< len(arr2):
arr.append(arr2[j])
j+=1
return arr
arr1=[1,3,5,7]
arr2=[2,4,6,8,10]
print(merge2list(arr1,arr2))
13,二分发查找,要求数据为有序数列
def bin_search(data_set,val):
#low 和high代表下标 最小下标,最大下标
low=0
high=len(data_set)-1
while low <=high:# 只有当low小于High的时候证明中间有数
mid=(low+high)//2
if data_set[mid]==val:
return mid #返回他的下标
elif data_set[mid]>val:
high=mid-1
else:
low=mid+1
return # return null证明没有找到
data_set = list(range(100000000))
python 笔试总结的更多相关文章
- 『Python题库 - 填空题』151道Python笔试填空题
『Python题库 - 填空题』Python笔试填空题 part 1. Python语言概述和Python开发环境配置 part 2. Python语言基本语法元素(变量,基本数据类型, 基础运算) ...
- Python 笔试集(4):True + True == ?
目录 目录 前文列表 面试题True Ture 布尔值 布尔类型是特殊的整数类型 前文列表 Python 笔试集:什么时候 i = i + 1 并不等于 i += 1? Python 笔试集(1):关 ...
- Python笔试、面试 【必看】
本文由EarlGrey@编程派独家编译,转载请务必注明作者及出处. 原文:Sheena@codementor 译文:编程派 引言 想找一份Python开发工作吗?那你很可能得证明自己知道如何使用Pyt ...
- Python笔试面试题_牛客(待完善)
中文,免费,零起点,完整示例,基于最新的Python 3版本.https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42 ...
- python笔试面试题_视频中(待完善)
一.选择填空题 1. 用一行代码交换a,b的值 a,b = 1,2 print(a,b) a,b = b,a print(a,b) 2. 元祖中有一个元素,有逗号则类型是元祖,无逗号则是远数据类型 t ...
- 以后可得记住了--Python笔试面试题小结
1.字符串处理 将字符串中的数字替换成其两倍的值,例如: 修改前:"AS7G123m (d)F77k" 修改后:"AS14G246m (d)F154k" 个 ...
- Python笔试面试题目及答案
1.is 和==的区别? is:比较的是两个对象的id值是否相等,也就是比较俩对象是否为同一个实例对象.是否指向同一个内存地址 == : 比较的两个对象的内容/值是否相等,默认会调用对象的eq()方法 ...
- Python 笔试集(3):编译/解释?动态/静态?强/弱?Python 是一门怎样的语言
面试题 解释/编译?动态/静态?强/弱?Python 到底是一门怎样的语言? 编译 or 解释? 编译.解释都是指将(与人类亲和的)编程语言翻译成(计算机能够理解的)机器语言(Machine code ...
- Python 笔试集(2):你不知道的 Python 整数
面试题 分别给出下述代码在终端(e.g. IPyhon)中和在程序中的运行结果: a = 256 b = 256 c = 257 d = 257 def foo(): e = 257 f = 257 ...
随机推荐
- 559. N 叉树的最大深度
给定一个 N 叉树,找到其最大深度. 最大深度是指从根节点到最远叶子节点的最长路径上的节点总数. 例如,给定一个 3叉树 : 我们应返回其最大深度,3. 说明: 树的深度不会超过 1000.树的节点总 ...
- LeetCode Single Number III (xor)
题意: 给一个数组,其中仅有两个元素是出现1次的,且其他元素均出现2次.求这两个特殊的元素? 思路: 跟查找单个特殊的那道题是差不多的,只是这次出现了两个特殊的.将数组扫一遍求全部元素的异或和 x,结 ...
- hiho一下 第三十七周 二分查找之k小数
题目链接:http://hihocoder.com/contest/hiho37/problem/1 , 简单二分. 算法: 题目即为求一个无序数组数组中第k小的数,由于数据量太大,排序是会超时的. ...
- linux 命令——39 grep (转)
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达 ...
- 定义多个属性 Object.defineProperties()
var book = {} Object.defineProperties(book,{ _year:{ value:2004 }, editable:{ value:1 }, year:{ get: ...
- BZOJ3932(主席树上二分+差分
按时间作为主席树的版本,每个版本的主席树都是一个权值线段树. 差分消去时间影响 对于当前时间版本的主席树查询前K大即可. 树上二分时结束后切记判定l==r的状态(易错 l==r叶子节点可能存在多个值( ...
- 2018.6.6 基于Oracle数据库的航天信息系统JDBC练习
综合练习 一.语言和环境 A.实现语言 Java B.环境要求 JDK 6.0及其以上版本.MyEclipse7.5及其以上版本.Oracle11g.PL/SQL Developer 二.功能要求 开 ...
- react的ant design的UI组件库
PC官网:https://ant.design/ 移动端网址:https://mobile.ant.design/docs/react/introduce-cn antd-mobile :是 Ant ...
- linux网络编程之断点传输文件
以下载链接"http://www.boa.org/boa-0.94.13.tar.gz"为例: 断点续传实验大概步骤: ===================== 1,使用geth ...
- BZOJ3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛(dp)
题意 约翰要带N(1≤N≤100000)只牛去参加集会里的展示活动,这些牛可以是牡牛,也可以是牝牛.牛们要站成一排.但是牡牛是好斗的,为了避免牡牛闹出乱子,约翰决定任意两只牡牛之间至少要有K( ...