关于Python,你需要知道的一些简单的小练习

前言:

大多数题目来源于菜鸟教程

题目:用过哪些模块
  • 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')
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容