前言:
大多数题目来源于菜鸟教程
题目:用过哪些模块
- os 对于系统层面操作的内置模块
- sys 提供程序本身路径
- time 时间模块
- random 随机数
- datetime 重新封装的time模块,提供更多接口和类
- hashlib 加密模块,提供字符加密功能
- logging 日志模块
- ......
题目:python2与python3的主要差异
python3中:
- print成为函数,要使用()
- 编码问题,不再有Unicode对象,默认str就是unicode
- 除法变化.除号返回浮点数,并且使用//表示除
- 优化函数,super()方便直接调用父类函数
- 一切返回迭代器,省内存
- 新增yield from 链接子生成器
- asyncio内置库,async/await 原生协程支持异步编程
- 新增内置库mock,asyncio等
题目:python函数问题,异常处理
try: 可能会抛出异常的代码
except 可以捕获多个异常并处理
else 异常没有发生的时候代码逻辑
finally 直接放行
题目:Pyhton性能分析与优化,GIL
同一时间只能有一个线程执行字节码
CPU密集程序难以利用多核优势 可以使用进程池规避
IO密集不影响 如果是IO密集时可以使用多线程/协程
题目:Python生成器与协程
.....
题目:Python单元测试
- nose/pytest较为常用的库
- mock 模块用于模拟替换网络请求等
题目:字典,列表推导,生成器
a = ['a','b','c']
b = [1,2,3]
d = {k:v for k,v in zip(a,b)}
print(d)
# 一个列表推导式
l = [i for i in range(10)]
print(l)
# 一个列表生成器,可以节省内存
l = (i for i in range(10))
print(type(l))
for i in l:
print(i)
题目:使用过python哪些装饰器
题目:python的解释器
- Cpython 命令行打开的python
- Ipython交互式的
....
题目:实现一个简单的装饰器
闭包是装饰器的基础
- 必须要有内嵌函数
- 内嵌函数必须要引用外部函数的变量
- 外部函数的返回值必须是内嵌函数
def wsm(func):
def wzj(*args,**kwargs):
for i in range(10):
print(i)
res = func(*args,**kwargs)
return res
return wzj
@wsm
def func1():
print('hello')
func1()
题目:什么是闭包
指定义在一个函数内部的函数,一个函数看做一个包,内层函数可以使用外层函数中的变量
题目:列表推导式和生成器表达式
print([x % 2 for x in range(10)])
print((x % 2 for x in range(10)))
题目:python递归的最大层数
998
题目:python的垃圾回收机制
.....
题目:简述python的深浅拷贝
copy():浅拷贝,仅仅拷贝数据集合的第一层数据
deepcopy:深拷贝,拷贝数据集合的所有层
题目:列举字符串,列表,元组,字典每个常用的5个方法
- 字符串 repleace,strip,split,reverse,upper(变大写),lower(变小写),join....
- 列表
append,pop,insert,remove,sort,count,index...- 元组
index,count,len(),dir()- 字典
get,keys,values,pop,clear,items,update
题目:删除一个列表中的重复元素list1=[1,4,5,6,6,8,9,9,2,7]
set天然去重
list1=[1,4,5,6,6,8,9,9,2,7]
print(list(set(list1)))
题目:俩个列表求交集和差集list1=[1,4,5,6,7],list2=[2,4,6,8,7]
考查使用set集合,&交集,^差集
list1=[1,4,5,6,7]
list2=[2,4,6,8,7]
set1 = set(list1)
set2 = set(list2)
print(set1&set2)
print(set1^set2)
题目:写一个列表生成式,公差为2
print([x*2 for x in range(12)])
题目:常见的字符串格式化有哪几种
1.占位符 %d % ()
2.format '{} 你好'.format(name)
3.f-string(python3.6才有)
s = f'{name}你好'
题目:list = [{'name':'a','age':20},{'name':'b','age':25},{'name':'c','age':28}],列表按从大到小排序
import operator
list = [{'name':'a','age':20},{'name':'b','age':25},{'name':'c','age':28}]
a = sorted(list,key=operator.itemgetter('age'),reverse=True)
print(a)
题目:反转字符串Aser
利用切片反转
a = 'Aser'
print(a[::-1])
题目:文件操作时xreadlines和readlines的区别
readlines是把全部内容读到内存,并解析为list
xreadlines直接返回一个迭代器
题目:列举布尔值为False的常见值
0,[],{},(),'',False,None
题目:is和==的区别
is
比较的是id
==
比较的是值
题目:字典排序d= {'a':24,'b':32,'c':12,'d':20}
考查知不知道sorted排序
d = {'a':24,'b':32,'c':12,'d':20}
a = sorted(d.values())
print(a)
题目:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。
for i in range(1, 5):
for n in range(1, 5):
for k in range(1, 5):
if (i != n) and (n != k) and (i != k):
print(i, n, k)
题目:输入三个整数x,y,z,请把这三个数由小到大输出
range随机输入三个数,然后每次添加到列表中,最后sort排序从大到小,打印排序后的列表
l = []
for i in range(3):
x = int(input('请输入:\n'))
l.append(x)
l.sort()
print(l)
题目:斐波那契数列
我讨厌数学,但很遗憾,面试时被问到了,然而我不会
0、1、1、2、3、5、8、13、21、34
题目:将一个列表的数据复制到另一个列表中
利用切片打印的方式进行复制,如果切片没有指定从哪开始切,那么会打印整个列表
a = [1,2,3]
b = a[:]
print(b)
题目:暂停一秒输出
import datetime
import time
print('开始时间:',datetime.datetime.now())
time.sleep(1)
print('结束时间:',datetime.datetime.now())
题目:暂停一秒输出,并格式化当前时间
import datetime
import time
print('开始时间:',time.strftime('%Y-%m-%d %H:%M:%S'))
time.sleep(1)
print('结束时间:',time.strftime('%Y-%m-%d %H:%M:%S'))
题目:判断101-200之间有多少个素数,并输出所有素数。
判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数
# 求奇数,不准确
l = []
for i in range(101,201):
if i % 2 != 0:
l.append(i)
print(l)
题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方
利用for循环控制100-999个数,每个数分解出个位,十位,百位,主要是能写出一个数字的个十百位上的数字
for n in range(100,1000):
i = n // 100 # 分解一个数后的百位数
j = n // 10 % 10 # 分解一个数后的十位数
k = n % 10 # 分解一个数后的个位数
if n == i ** 3 + j ** 3 + k ** 3:
print(n)
题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示
python 内判断及运算符使用
s = int(input('输入分数:\n'))
if s >= 90:
w = 'A'
elif s >= 60:
w = 'B'
else:
w = 'C'
print('%d 属于 %s' % (s, w))
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
主要考查string下的方法
s = input('请输入一个字符串:\n')
zm = 0
kb = 0
sz = 0
qt = 0
for i in s:
if i.isalpha():
zm += 1
elif i.isspace():
kb += 1
elif i.isdigit():
sz += 1
else:
qt += 1
print('字母有:%d个,空白有:%d个,数字有:%d个,其他有:%d个'% (zm,kb,sz,qt))
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
考查sum求和函数
# 几次反弹的总数
tour = []
# 几次反弹的高度计数
height = []
hei = 100 #起始高度
tim = 10 # 次数
for i in range(1,tim +1):
if i == 1:
tour.append(hei)
else:
# 计算运行总路程
tour.append(2*hei)
hei /= 2
height.append(hei)
# sum()是将矩阵中所有的元素进行求和
print('总高度:tour = %s' % sum(tour))
print('第10次反弹高度:height = {0}'.format(height[-1]))
题目:打印一个菱形图案
主要考查range取奇数和偶数,reversed反转函数,还有center居中
s = '*'
for i in range(1, 8, 2):
print((i * s).center(7))
for i in reversed(range(1,6,2)):
print((i*s).center(7))
题目:将输入的字符,以相反顺序打印出来
a = input('请输入:\n')
listall = list(reversed(a))
for i in listall:
print(i)
题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字
考查如何分解每一位数
x = int(input('请输入一个数:\n'))
a = x // 10000 # 万
b = x % 10000 // 1000 # 千
c = x % 1000 // 100 # 百
d = x % 100 // 10 # 十
e = x % 10 # 个
if a != 0:
print('5位数倒序:',e,d,c,b,a)
题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同
注意len只能取str类型
x = int(input('请输入一个数字:\n'))
x = str(x)
if len(x) != 5:
print('这不是一个5位数字')
else:
if x[0] != x[4] and x[1] != x[3]:
print('这不是一个回文数')
else:
print('这是一个回文数:',x)
题目:['one', 'two', 'three']倒序排列此列表
列表倒序的三种方法分片,reverse,reversed,注意reversed后是一个对象要重新转为列表类型
a = ['one', 'two', 'three']
a.reverse()
print(a)
a = list(reversed(a))
print(a)
print(a[::-1])
题目:使用逗号分隔列表
考查join的使用,注意join是字符串下的方法,所以后边列表生成器要使用str进行转换
L = [1,2,3,4,5]
s = ','.join(str(n) for n in L)
print(s)
题目:求100之内的素数
素数,除了1和能被自身整除的数
for i in range(1,101):
if i >1:
for j in range(2,i):
if i % j == 0:
break
else:
print(i)
题目:两个 3 行 3 列的矩阵,实现其对应位置的数据相加,并返回一个新矩阵
分行分列之后行列分别相加,需要用到俩个for循环
X = [[12, 7, 3],
[4, 5, 6],
[7, 8, 9]]
Y = [[5, 8, 1],
[6, 7, 3],
[4, 5, 9]]
result = [[0, 0, 0],
[0, 0, 0],
[0, 0, 0]]
for i in range(3):
for j in range(3):
result[i][j] = X[i][j] + Y[i][j]
for r in result:
print(r)
题目:统计1到100之间的和
a = sum(range(1,101))
print(a)
题目:使用lambda来创建匿名函数
题目:输出随机数
import random
print random.random() #输入0-1之间的随机数
print random.uniform(10,20) #输出10-20之间的随机数
print random.randint(10,20) #输出10-20之间的随机整数
print random.choice([x for x in range(1,100)]) #输出1-99间的随机数
题目:查找字符串
字符串中的常用方法,find,会打印查找到的字符串最小索引
s = 'asdjf123'
b = '123'
print(s.find(b))
# 输出结果为最小索引5
题目:输入三个数字,按大小顺序排列打印
s = []
for i in range(3):
a = int(input('请输入:\n'))
s.append(a)
d = set(s)
for x in d:
print(x)
题目:列表转换为字典
注意列表要双数
a = [1,2]
c = ['a','b']
b = dict([a,c])
print(b)
题目:向一个文件中输入字母转换为大写
考查字符串upper变大写的方法还有打开文件并写入使用with open配合
with open('test.txt', 'w') as f:
s = input('请输入字母:\n')
f.write(s.upper())
题目:计算字符串中子串出现的次数
考查字符串的方法count,统计次数
str1 = input('请输入一个字符串:\n')
str2 = input('请输入一个子字符串:\n')
ncount = str1.count(str2)
print(ncount)
题目:字符串日期转换为易读的日期格式
题目:写一个判断输入字符串长度的函数
def cd():
s = input('请输入一个字符串:\n')
print(len(s))
cd()
题目:列表排序及连接
考查列表排序sort的使用,还有连接俩个列表的两种方法extend
a = [1, 3, 2]
b = [3, 4, 5]
a.sort()
print(a)
print(a+b)
a.extend(b)
print(a)
题目:字典的排序
考查sorted,打印整个字典就需要lambda匿名函数配合
person = {"li": 18, "wang": 50, "zhang": 20, "sun": 22}
a = sorted(person.values())
print('按values大小排序,只打印values:',a)
a = sorted(person.items(),key=lambda x:x[1])
print('按values大小排序并打印整个字典:',a)
题目:not,and,or优先级
# 输出为3
x = True
y = False
z = False
if not x or y:
print(1)
elif not x or not y and z:
print(2)
elif not x or y or not y and x:
print(3)
else:
print(4)
加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数
def greetPerson(*name):
print('Hello', name)
greetPerson('Runoob', 'Google')
# 输出结果:Hello ('Runoob', 'Google')