關(guān)于Python,你需要知道的一些簡單的小練習(xí)

前言:

大多數(shù)題目來源于菜鳥教程

題目:用過哪些模塊
  • os 對于系統(tǒng)層面操作的內(nèi)置模塊
  • sys 提供程序本身路徑
  • time 時間模塊
  • random 隨機數(shù)
  • datetime 重新封裝的time模塊,提供更多接口和類
  • hashlib 加密模塊,提供字符加密功能
  • logging 日志模塊
  • ......
題目:python2與python3的主要差異

python3中:

  • print成為函數(shù),要使用()
  • 編碼問題,不再有Unicode對象,默認(rèn)str就是unicode
  • 除法變化.除號返回浮點數(shù),并且使用//表示除
  • 優(yōu)化函數(shù),super()方便直接調(diào)用父類函數(shù)
  • 一切返回迭代器,省內(nèi)存
  • 新增yield from 鏈接子生成器
  • asyncio內(nèi)置庫,async/await 原生協(xié)程支持異步編程
  • 新增內(nèi)置庫mock,asyncio等
題目:python函數(shù)問題,異常處理

try: 可能會拋出異常的代碼
except 可以捕獲多個異常并處理
else 異常沒有發(fā)生的時候代碼邏輯
finally 直接放行

題目:Pyhton性能分析與優(yōu)化,GIL
  • 同一時間只能有一個線程執(zhí)行字節(jié)碼

  • CPU密集程序難以利用多核優(yōu)勢 可以使用進程池規(guī)避

  • IO密集不影響 如果是IO密集時可以使用多線程/協(xié)程

題目:Python生成器與協(xié)程

.....

題目:Python單元測試
  • nose/pytest較為常用的庫
  • mock 模塊用于模擬替換網(wǎng)絡(luò)請求等
題目:字典,列表推導(dǎo),生成器
a = ['a','b','c']
b = [1,2,3]
d = {k:v for k,v in zip(a,b)}
print(d)

# 一個列表推導(dǎo)式
l = [i for i in range(10)]
print(l)
# 一個列表生成器,可以節(jié)省內(nèi)存
l = (i for i in range(10))
print(type(l))
for i in l:
    print(i)
題目:使用過python哪些裝飾器
題目:python的解釋器
  • Cpython 命令行打開的python
  • Ipython交互式的
    ....
題目:實現(xiàn)一個簡單的裝飾器

閉包是裝飾器的基礎(chǔ)

  • 必須要有內(nèi)嵌函數(shù)
  • 內(nèi)嵌函數(shù)必須要引用外部函數(shù)的變量
  • 外部函數(shù)的返回值必須是內(nèi)嵌函數(shù)
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()
題目:什么是閉包

指定義在一個函數(shù)內(nèi)部的函數(shù),一個函數(shù)看做一個包,內(nèi)層函數(shù)可以使用外層函數(shù)中的變量

題目:列表推導(dǎo)式和生成器表達式
print([x % 2 for x in range(10)])
print((x % 2 for x in range(10)))
題目:python遞歸的最大層數(shù)

998

題目:python的垃圾回收機制

.....

題目:簡述python的深淺拷貝
  • copy():淺拷貝,僅僅拷貝數(shù)據(jù)集合的第一層數(shù)據(jù)

  • deepcopy:深拷貝,拷貝數(shù)據(jù)集合的所有層

題目:列舉字符串,列表,元組,字典每個常用的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
題目:刪除一個列表中的重復(fù)元素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)
題目:反轉(zhuǎn)字符串Aser

利用切片反轉(zhuǎn)

a = 'Aser'
print(a[::-1])
題目:文件操作時xreadlines和readlines的區(qū)別

readlines是把全部內(nèi)容讀到內(nèi)存,并解析為list
xreadlines直接返回一個迭代器

題目:列舉布爾值為False的常見值
0,[],{},(),'',False,None
題目:is和==的區(qū)別

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)
題目:有四個數(shù)字:1、2、3、4,能組成多少個互不相同且無重復(fù)數(shù)字的三位數(shù)?各是多少?

程序分析:可填在百位、十位、個位的數(shù)字都是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)

題目:輸入三個整數(shù)x,y,z,請把這三個數(shù)由小到大輸出

range隨機輸入三個數(shù),然后每次添加到列表中,最后sort排序從大到小,打印排序后的列表

l = []
for i in range(3):
    x = int(input('請輸入:\n'))
    l.append(x)
l.sort()
print(l)
題目:斐波那契數(shù)列

我討厭數(shù)學(xué),但很遺憾,面試時被問到了,然而我不會
0、1、1、2、3、5、8、13、21、34

題目:將一個列表的數(shù)據(jù)復(fù)制到另一個列表中

利用切片打印的方式進行復(fù)制,如果切片沒有指定從哪開始切,那么會打印整個列表

a = [1,2,3]
b = a[:]
print(b)
題目:暫停一秒輸出
import  datetime
import time
print('開始時間:',datetime.datetime.now())
time.sleep(1)
print('結(jié)束時間:',datetime.datetime.now())
題目:暫停一秒輸出,并格式化當(dāng)前時間
import  datetime
import time
print('開始時間:',time.strftime('%Y-%m-%d %H:%M:%S'))
time.sleep(1)
print('結(jié)束時間:',time.strftime('%Y-%m-%d %H:%M:%S'))
題目:判斷101-200之間有多少個素數(shù),并輸出所有素數(shù)。

判斷素數(shù)的方法:用一個數(shù)分別去除2到sqrt(這個數(shù)),如果能被整除,則表明此數(shù)不是素數(shù),反之是素數(shù)

# 求奇數(shù),不準(zhǔn)確
l = []
for i in range(101,201):
    if i % 2 != 0:
        l.append(i)
print(l)
題目:打印出所有的"水仙花數(shù)",所謂"水仙花數(shù)"是指一個三位數(shù),其各位數(shù)字立方和等于該數(shù)本身。例如:153是一個"水仙花數(shù)",因為153=1的三次方+5的三次方+3的三次方

利用for循環(huán)控制100-999個數(shù),每個數(shù)分解出個位,十位,百位,主要是能寫出一個數(shù)字的個十百位上的數(shù)字

for n in range(100,1000):
    i = n // 100  # 分解一個數(shù)后的百位數(shù)
    j = n // 10 % 10  # 分解一個數(shù)后的十位數(shù)
    k = n % 10  # 分解一個數(shù)后的個位數(shù)
    if n == i ** 3 + j ** 3 + k ** 3:
        print(n)
題目:利用條件運算符的嵌套來完成此題:學(xué)習(xí)成績>=90分的同學(xué)用A表示,60-89分之間的用B表示,60分以下的用C表示

python 內(nèi)判斷及運算符使用

s = int(input('輸入分?jǐn)?shù):\n'))
if s >= 90:
    w = 'A'
elif s >= 60:
    w = 'B'
else:
    w = 'C'
print('%d 屬于 %s' % (s, w))
題目:輸入一行字符,分別統(tǒng)計出其中英文字母、空格、數(shù)字和其它字符的個數(shù)

主要考查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個,數(shù)字有:%d個,其他有:%d個'% (zm,kb,sz,qt))
題目:一球從100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地時,共經(jīng)過多少米?第10次反彈多高?

考查sum求和函數(shù)

# 幾次反彈的總數(shù)
tour = []
# 幾次反彈的高度計數(shù)
height = []

hei = 100 #起始高度
tim = 10 # 次數(shù)
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取奇數(shù)和偶數(shù),reversed反轉(zhuǎn)函數(shù),還有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位的正整數(shù),要求:一、求它是幾位數(shù),二、逆序打印出各位數(shù)字

考查如何分解每一位數(shù)

x = int(input('請輸入一個數(shù):\n'))
a = x // 10000 # 萬
b = x % 10000 // 1000 # 千
c = x % 1000 // 100 # 百
d = x % 100 // 10 # 十
e = x % 10 # 個
if a != 0:
    print('5位數(shù)倒序:',e,d,c,b,a)
題目:一個5位數(shù),判斷它是不是回文數(shù)。即12321是回文數(shù),個位與萬位相同,十位與千位相同

注意len只能取str類型

x = int(input('請輸入一個數(shù)字:\n'))
x = str(x)
if len(x) != 5:
    print('這不是一個5位數(shù)字')
else:
    if x[0] != x[4] and x[1] != x[3]:
        print('這不是一個回文數(shù)')
    else:
        print('這是一個回文數(shù):',x)
題目:['one', 'two', 'three']倒序排列此列表

列表倒序的三種方法分片,reverse,reversed,注意reversed后是一個對象要重新轉(zhuǎn)為列表類型

a = ['one', 'two', 'three']
a.reverse()
print(a)

a = list(reversed(a))
print(a)

print(a[::-1])
題目:使用逗號分隔列表

考查join的使用,注意join是字符串下的方法,所以后邊列表生成器要使用str進行轉(zhuǎn)換

L = [1,2,3,4,5]
s = ','.join(str(n) for n in L)
print(s)
題目:求100之內(nèi)的素數(shù)

素數(shù),除了1和能被自身整除的數(shù)

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 列的矩陣,實現(xiàn)其對應(yīng)位置的數(shù)據(jù)相加,并返回一個新矩陣

分行分列之后行列分別相加,需要用到倆個for循環(huán)

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)

題目:統(tǒng)計1到100之間的和
a = sum(range(1,101))
print(a)
題目:使用lambda來創(chuàng)建匿名函數(shù)
題目:輸出隨機數(shù)
import random
print random.random()           #輸入0-1之間的隨機數(shù)
print random.uniform(10,20)     #輸出10-20之間的隨機數(shù)
print random.randint(10,20)     #輸出10-20之間的隨機整數(shù)
print random.choice([x for x in range(1,100)]) #輸出1-99間的隨機數(shù)
題目:查找字符串

字符串中的常用方法,find,會打印查找到的字符串最小索引

s = 'asdjf123'
b = '123'
print(s.find(b))
# 輸出結(jié)果為最小索引5
題目:輸入三個數(shù)字,按大小順序排列打印
s = []

for i in range(3):
    a = int(input('請輸入:\n'))
    s.append(a)
d = set(s)
for x in d:
    print(x)
題目:列表轉(zhuǎn)換為字典

注意列表要雙數(shù)

a = [1,2]
c = ['a','b']
b = dict([a,c])
print(b)
題目:向一個文件中輸入字母轉(zhuǎn)換為大寫

考查字符串upper變大寫的方法還有打開文件并寫入使用with open配合

with open('test.txt', 'w') as f:
    s = input('請輸入字母:\n')
    f.write(s.upper())
題目:計算字符串中子串出現(xiàn)的次數(shù)

考查字符串的方法count,統(tǒng)計次數(shù)

str1 = input('請輸入一個字符串:\n')
str2 = input('請輸入一個子字符串:\n')
ncount = str1.count(str2)
print(ncount)
題目:字符串日期轉(zhuǎn)換為易讀的日期格式

題目:寫一個判斷輸入字符串長度的函數(shù)
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匿名函數(shù)配合

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優(yōu)先級
# 輸出為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)
加了星號 * 的參數(shù)會以元組(tuple)的形式導(dǎo)入,存放所有未命名的變量參數(shù)
def greetPerson(*name):
    print('Hello', name)
  
greetPerson('Runoob', 'Google')
# 輸出結(jié)果:Hello ('Runoob', 'Google')
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容