日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

python3 练习题100道,孰能生巧,之前要想一个下午的内容,马上就有了答案

發布時間:2023/12/19 综合教程 37 生活家
生活随笔 收集整理的這篇文章主要介紹了 python3 练习题100道,孰能生巧,之前要想一个下午的内容,马上就有了答案 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第1章 字符串練習題

1.1交換

已知a的值為“hello”,b的值為“world”,如何交換a和b的值?

得到a的值為“world”,b的值為“hello”

a="hello"
b="world"
#方式1
a,b=b,a
print("a的值:"+a+"; b的值:"+b)
#方式2
a="hello"
b="world"
c=a
a=b
b=c
print("a的值:{}; b的值{}".format(a,b))

1.2回文

回文的定義:“回文”就是正讀倒讀都是一樣的

如奇數個“98789”,這個數字正讀是“98789”倒讀也是“98789”。

偶數個數字“3223”也是回文數。

字母“abcba”也是回文。

判斷一個字符串是否是回文字符串,是打印True,不是打印False。

a=input("請輸入一個字符串:")
print(a)
flag=True
for i in range(len(a)//2):
    if a[i]!=a[-i-1]:
        flag=False
        print("{}不是一個回文字符串;".format(a))
        break
if flag:
    print("{}是一個回文字符串;".format(a))

1.3字符串切割

已知一個字符串為“hello_world_huihui”,如何得到一個隊列["hello","world","huihui"]

a="hello_world_huihui"
print(a.split("_"))

1.4拼接字符串

有個列表['hello', 'world', 'huihui'] 如何把列表里的字符串串聯起來

得到字符串"hello_world_huihui

a=['hello', 'world', 'huihui']
aa=""
for i in a:
    aa+=i
    aa += "_"
print(aa[:-1])

 1.5 替換字符

把字符串s中的每個空格替換成"%20"

輸入:s="We are happy."

輸出:"We%20are%20happy."

s="We are happy."
ss=s.replace(" ","%20")
print(ss)

1.6 九九乘法表

打印99乘法表

for i in range(1,10):
    for j in range(1,i+1):
        print("{}*{}={}".format(j,i,i*j),end="   ")
    print()

1.7字符下標

找出單詞"welcome" 在字符串"Hello,welcome." 中出現的位置,找不到返回-1

從下標0開始索引

a="welcome"
b="Hello,welcme.welcome.."
n=0
if a in b:
    for i in b:
        if i!=a[0]:
            n+=1
        else:
            end=len(a)+n
            # print(end)
            if a==b[n:end]: #[6:14]
                print("單詞{} 在{}的第{}位出現;".format(a,b,n))
                break
            n+=1
else:
    print("單詞{} 未在{}中出現;".format(a,b))

 1.8 統計字符出現的次數

統計字符串"Hello,welcome to my world." 中字母w出現的次數

統計單詞my出現的次數

a="Hello, welcome to my world."
b='w'
# 方式一:
# if b in a:
# #     count=0
# #     for i in a:
# #         if i==b:
# #             count+=1
# #     print("{}在字符串{}中,出現了{}次;".format(b, a,count))
# # else:
# #     print("{}未出現在字符串{}中;".format(b,a))

# 方式二:
 #直接將m替換為my即可
count=0 while True: if b in a: a=a.replace(b,'',1) count+=1 else: break print("{}在字符串{}中,出現了【{}】次;".format(b, a,count))

  

1.9 統計每個字符出現的次數

題目:輸入一個字符串str,輸出第m個只出現過n次的字符, 如在字符串gbgkkdehh中,找出第2個只出現1次的字符,輸出結果:d

# a="gbgkkdehh"
a=input('請輸入一個字符串:')
m=3
n=2
b={}
count=0
for i in a:
    if i not in b.keys():
        b[i]=1
    else:
        b[i]+=1
print(b)
for i in b.keys():
    if b[i]==n:
        count+=1
        if count==m:
            print(i)
            break

1.10 判斷字符a含b

判斷字符串a="welcome to my world" 是否包含單詞b="world",包含返回True,不包含返回False

a="welcome to my world"
b="world"
if b in a:
    print("True")
else:
    print("False")

1.11 查找字符首次出現位置

輸出指定字符串A在字符串B中第一次出現的位置,如果B中不包含A,則輸出-1

從0開始計數

A="hello"

B="hi how are you hello world,hello yoyo !"

A = "hello"
B = "hi how are you hello world, hello yoyo !"
n=0
if A in B:
    b=B.replace(A,'=',1)
    print(b)
    for i in b:
        if i!='=':
            n+=1
        else:
            print("{}在字符串{}中第一次出現的位置是 {}".format(A,B,n))
else:
    print(-1)

1.12 查找字符串最后一次出現位置

輸出指定字符串A在字符串B中最后出現的位置,如果B中不包含A,則輸出-1

從0開始計數

A="hello"

B = "hi how are you hello world, hello yoyo !"  

A = "hello"
B = "hi how are you hello world,hello yoyo !"
n=0
count=0
print(len(B))
while A in B:
    n=B.index(A)
    B=B.replace(A,'',1)
    count+=1
# print(n)
print(n+(count-1)*len(A))

1.13判斷奇數偶數

 給定一個數a,判斷一個數字是否為奇數或偶數

a=int(input("請輸入任意一個整數:"))
# print(a,type(a))
if a%2==0:
    print("偶數")
else:
    print("奇數")

1.14判斷一個姓名是否姓王

 輸入一個姓名,判斷是否姓王

a="王五"

b="老王"

a="老王五"
if a[0]=="王":
    print("{} 姓‘王’".format(a))
else:
    print("{} 不姓'王'".format(a))

1.15 判斷是不是數字

如何判斷一個字符串是不是純數字組成

a="123456"

b="yoyo123"

#方式1
import re a="123456" b=re.findall('d',a) if len(a)==len(b): print("{} 是純數字;".format(a)) else: print("{} 不是純數字;".format(a))

#方式2
a="12345c6"
if a.isdigit():
print("數字字符串")
else:
print("非數字字符串")

1.16 字符串大小寫轉換

將字符串 a="This is string example....wow!" 全部轉成大寫

字符串 b="Welcome To My World"全部轉成小寫

a="This is string example....wow!"
print(a.upper())
print(a.lower())

1.17 字符串去掉首尾空格

將字符串a=" welcome to my world "首尾空格去掉 

a=" welcome to my world "
print(a.strip())
print('abcab'.strip('a'))

1.18字符串去掉左邊指定空格或字符

將字符串a = " welcome to my world !"左邊的空格去掉

a = " welcome to my world ! "
print(a.lstrip())

  

1.19字符串去掉右邊指定空格或字符

將字符串a = " welcome to my world ! "右邊的空格去掉

a = " welcome to my world!"
print(a.rstrip())
print(a.rstrip("!"))

  

1.20 去除字符串里面所有的空格

將字符串a = " welcome to my world ! "里面的所有空格都去掉

a = " welcome to my world ! "
print(a.replace(' ',''))

  

1.21字符串去重后排序

s = "ajldjlajfdljfddd",去重并從小到大排序輸出"adfjl"

s = "ajldjlajfdljfddd"
rs=[]
for i in s:
    if i not in rs:
        rs.append(i)
# rs=sorted(rs) #列表排序方式1
rs.sort()
s="".join(rs)
print(rs,s)

  

1.22字符串去重保留順序

s = "ajldjlajfdljfddd",去重保留原來的順序,輸出"ajldf"

s = "ajldjlajfdljfddd"
rs=""
for i in s:
    if i not in rs:
        rs+=i
print(rs)

 

1.23畫菱形

題目 打印出如下圖案(菱形):

n=7
for i in range(n//2+1):
    print(' '*(n//2-i)+'*'*(2*i+1))#3,1; 2,3; 1,5;;0,7;;
for i in range(n//2-1,-1,-1):
    print(' '*(n//2-i)+'*'*(2*i+1))

1.24 輸入一個正整數,判斷是幾位數

題目 給一個不多于5位的正整數,要求:
一、求它是幾位數,
二、逆序打印出各位數字。
a = 12345

a=input("請輸入一個不超過5位的正整數:")
print("{}是一個【{}】位數;".format(a,len(a)))
print(a[::-1])  

第2章 小學數學題

2.1.水仙花數

如果一個 3 位數等于其各位數字的立方和,則稱這個數為水仙花數。
例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一個水仙花數
那么問題來了,求1000以內的水仙花數(3位數)

result=[]
for j in range(100,1000):
    i=str(j)
    bai=int(i[0])
    shi=int(i[1])
    ge=int(i[2])
    if bai**3+shi**3+ge**3==j:
        result.append(j)
print(result)

  

2.2完全數

如果一個正整數等于除它本身之外其他所有除數之和,就稱之為完全數。
例如:6是完全數,因為6 = 1+2+3;
下一個完全數是28 = 14+7+4+2+1。
求1000以下的完全數

pn=[]
for i in range(1,1000):
    chushu=[1]
    sum=1
    for j in range(2,i):
        if i%j==0:
            chushu.append(j)
            sum+=j
    if sum==i:
        pn.append(i)
        print("{}是一個完全數,真因子有{};".format(i,chushu))
print(pn)

 

2.3 數字1-100求和

求1+2+3…+100和

n=11
if n%2==0:
    sum=(1+n)*(n//2)
else:
    sum=(1+n)*(n//2+0.5)
print("1-{} 的和是{}".format(n,sum))

  

2.4計算求1-2+3-4+5-…-100的值

計算求1-2+3-4+5-…-100的值

n=10
if n%2==0:
    sum=-1*(n//2)
else:
    sum=-1*(n//2)+n
print(sum)

  

2.5計算求1+2-3+4-5... ...100 的值

計算求1+2-3+4-5... ...100 的值

n=100
if (n-1)%2==0:
    sum=(n-1)//2*(-1)+1
else:
    sum=(n-1)//2*(-1)+1+n
    # sum=(1-n)//2+1+n  #取模的數據,千萬不要隨意變更+-號,-9//2=-5
print(sum)

  

2.6計算 1-n 之間的所有 5 的倍數之和

定義一個函數:計算 1-n 之間的所有 5 的倍數之和,默認計算 1-100 ( n 是 一個整數)

n=100
sum=0
nc=n//5
for i in range(1,nc):
    sum+=i*5
print(sum)

  

2.7 n個自然數的立方和

計算公式 13 + 23 + 33 + 43 + …….+ n3
實現要求:
輸入 : n = 5
輸出 : 225
對應的公式 : 13 + 23 + 33 + 43 + 53 = 225

n=5
sum=0
for i in range(1,n+1):
    sum+=i**3
print(sum)

  

2.8 階乘10!

階乘的意思: 10!=10x9x8x7x6x5x4x3x2x1
求10!

n=10
Factorial=1
for i in range(2,n+1):
    Factorial*=i
print(Factorial)

  

2.9求1+2!+3!+...+10!的和

求1+2!+3!+...+10!的和

n=10
sum=1
for i in range(2,n):
    Factorial = 1
    for i in range(1,i+1):
        Factorial*=i
    print(Factorial)
    sum+=Factorial
print(sum)

  

2.10求s=a+aa+aaa+aaaa+aa...a的值

求s=a+aa+aaa+aaaa+aa...a的值

如:n = 5  a = 3
33333 = 3x10**4+ 3x10**3+ 3x10**2 + 3x10**1 +3x10**0
n=5
a=3
tsum=0
sum=0
nn=n-1
for i in range(1,n+1):
    sum=a*i*10**(nn)
    nn-=1
    print(sum,nn)
    tsum+=sum
print(tsum)

  

2.11 斐波那契數列1、1、2、3、5、8、13 .....

已知一個數列:1、1、2、3、5、8、13、。。。。的規律為從 3 開始的每一項都等于其前兩項的和,這是斐波那契數列。
求滿足規律的 100 以內的所有數據

snl=[1,1]
num=2
while num<100:
    snl.append(num)
    num=snl[-1]+snl[-2]
print(snl)

  

第3章 列表練習題

3.1 反轉(判斷對稱)

如何判斷一個數組是對稱數組:
要求:判斷數組元素是否對稱。例如[1,2,0,2,1],[1,2,3,3,2,1]這樣的都是對稱數組
用Python代碼判斷,是對稱數組打印True,不是打印False,如:
x = [1, "a", 0, "2", 0, "a", 1]

x = [1, "ac", 0, "2", 0, "a", 1]
flag=True
count=len(x)//2
for i in range(count):
    if x[i]!=x[-i-1]:
        flag=False
        break
if flag:
    print("{}是一個對稱數組? True".format(x))
else:
    print("{}是一個對稱數組? False".format(x))

  

3.2列表切片

如果有一個列表a=[1,3,5,7,11]
問題:1如何讓它反轉成[11,7,5,3,1]
2.取到奇數位值的數字,如[1,5,11]

a=[1,3,5,7,11]
print(a[::-1])
print(a[::2])

  

3.3列表大小排序

問題:對列表a 中的數字從小到大排序
a = [1, 6, 8, 11, 9, 1, 8, 6, 8, 7, 8]

a = [1, 6, 8, 11, 9, 1, 8, 6, 8, 7, 8]
for i in range(len(a)):
    for j in range(i+1,len(a)):
        if a[i]>a[j]:
            a[i],a[j]=a[j],a[i]
print(a)

  

3.4 取出最大值最小值

L1 = [1, 2, 3, 11, 2, 5, 3, 2, 5, 33, 88]
找出列表中最大值和最小值

L1 = [1, 2, 3, 11, 2, 5, 3, 2, 5, 33, 88]
max=L1[0]
min=L1[0]
count=len(L1)
for i in range(count):
    if L1[i]>max:
        max,L1[i]=L1[i],max
    if L1[i]<min:
        min,L1[i]=L1[i],min
print(max,min)

  

3.5 找出列表中單詞最長的一個

a = ["hello", "world", "yoyo", "congratulations"]
找出列表中單詞最長的一個

a = ["hello", "world", "yoyo", "congratulations"]
max=a[0]
for i in a:
    if len(max)<len(i):
        max=i
print(max)

3.6 切片取出列表中最大的三個數

取出列表中最大的三個值
L1 = [1, 2, 3, 11, 2, 5, 3, 2, 5, 33, 88]

L1 = [1, 2, 3, 11, 2, 5, 3, 2, 5, 33, 88]
L1.sort()
print(L1[-1:-4:-1])

  

3.7列表按絕對值排序

a = [1, -6, 2, -5, 9, 4, 20, -3] 按列表中的數字絕對值從小到大排序

a = [1, -6, 2,2, -5,5,9,-5, 4, 20, -3]
l=[]
for i in range(len(a)):
    if a[i]<0:
        l.append(a[i]) #將負數放在一個列表中;
        a[i]=-a[i]
a.sort()
l.sort() #對負數列表進行排序
print(a,l)

for i in range(len(a)):
    if -a[i] in l:
        a[i]=-a[i]
        del l[-1] #刪除負數列表中相應的數
print(a,l)

  

3.8按字符串長度排序

b = ["hello", "helloworld", "he", "hao", "good"]
按list里面單詞長度倒敘

b = ["hello", "helloworld", "he","h3e","hao", "good"]
lens=[]
for i in b:
    lens.append(len(i)) #將每個字符串的長度放在列表中
lens.sort(reverse=True)
print(lens) #長度列表,降序
for i in b:
    num=lens.index(len(i)) #找到索引位置
    lens[num]=i #將相應索引位置替換為字符串
    print(lens)
print(lens)

  

3.9去重與排序

L1 = [1, 2, 3, 11, 2, 5, 3, 2, 5, 33, 88]
如何用一行代碼得出[1, 2, 3, 5, 11, 33, 88]
L2 = [1, 2, 3, 4, 5] ,L[10:]結果是多少(報錯?還是None,還是[])

L1 = [1, 2, 3, 11, 2, 5, 3, 2, 5, 33, 88]
L1=sorted(list(set(L1))) #set集合是一個無序的不重復的元素序列
# L1.sort()
print(L1)

 [] 

3.10 去重保留順序

將列表中的重復值取出(僅保留第一個),要求保留原始列表順序
如a=[3, 2, 1, 4, 2, 6, 1] 輸出[3, 2, 1, 4, 6]

a=[3, 2, 1, 4, 2, 6, 1]
result=[]
for i in a:
    if i not in result:
        result.append(i)
print(result)

  

3.11 列表合并

a = [1, 3, 5, 7]
b = ['a', 'b', 'c', 'd']
如何得到[1, 3, 5, 7, 'a', 'b', 'c', 'd']

a = [1, 3, 5, 7]
b = ['a', 'b', 'c', 'd']
# a.append(b)
# print(a)
print(a+b)

  

3.12 生成列表(列表推導式)

用一行代碼生成一個包含 1-10 之間所有偶數的列表

n=10
list=[2*x for x in range(1,n//2+1)]
print(list)

  

3.13 列表成員的平方

列表a = [1,2,3,4,5], 計算列表成員的平方數,得到[1,4,9,16,25]

a = [1,2,3,4,5]
result=[i**2 for i in a]
print(result)

  

3.14 找出列表大于0的數

使用列表推導式,將列表中a = [1, 3, -3, 4, -2, 8, -7, 6]
找出大于0的數,重新生成一個新的列表

a = [1, 3, -3, 4, -2, 8, -7, 6]
list=[i for i in a if i>0]
print(list)

  

3.15統計列表有多少大于0

統計在一個隊列中的數字,有多少個正數,多少個負數,如[1, 3, 5, 7, 0, -1, -9, -4, -5, 8]

a=[1, 3, 5, 7, 0, -1, -9, -4, -5, 8]
zheng=0
fu=0
for i in a:
    if i>0:
        zheng+=1
    elif i<0:
        fu+=1
print(zheng,fu)

  

3.16列表排除篩選

a = ["張三","張四","張五","王二"] 如何刪除姓張的

a = ["張三","張四","張五","王二","2張2五"]
aa=a.copy()
# print(id(a),id(aa)) #查看引用地址是否一個
n=0
for i in range(len(a)):
    if a[i][0]=='張':
        del aa[i-n]
        n+=1

print(aa)

  

3.17列表過濾(filter)

題1:有個列表a = [1, 3, 5, 7, 0, -1, -9, -4, -5, 8] 使用filter 函數過濾出大于0的數
題2:列表b = ["張三", "張四", "張五", "王二"] 過濾掉姓張的姓名

b = [1, 3, 5, 7, 0, -1, -9, -4, -5, 8]
def zhengshu(n):
    return n>0
bb=filter(zhengshu,b)
print(list(bb))

# a = ["張三","張四","張五","王二","2張2五"]
# def name(n):
#     return n[0]!='張'
# aa=filter(name,a)
# print(list(aa))

  

3.18過濾列表中不及格學生(filter)

過濾掉列表中不及格的學生
a = [
{"name": "張三", "score": 66},
{"name": "李四", "score": 88},
{"name": "王五", "score": 90},
{"name": "陳六", "score": 56},
]

a = [
{"name": "張三", "score": 66},
{"name": "李四", "score": 88},
{"name": "王五", "score": 90},
{"name": "陳六", "score": 56},
]
def score(n):
        return n["score"] > 60

rs=filter(score,a)
print(rs,list(rs))  

3.19找出列表中最大數出現的位置

有個列表 a = [1, 2, 3, 11, 2, 5, 88, 3, 2, 5, 33]
找出列表中最大的數,出現的位置,下標從0開始

a = [1, 2, 3, 11, 2, 5, 88, 3, 2, 5, 33]
max=max(a)
num=a.index(max)
print(num)

  

3.20找出列表中出現次數最多的元素

a = [
'my', 'skills', 'are', 'poor', 'I', 'am', 'poor', 'I',
'need', 'skills', 'more', 'my', 'ability', 'are',
'so', 'poor'
]
找出列表中出現次數最多的元素

a = [
'my', 'skills', 'are', 'poor', 'I', 'am', 'poor', 'I',
'need', 'skills', 'more', 'my', 'ability', 'are',
'so', 'poor'
]
mstr=a[0]
mcount=1
for i in a:
    if a.count(i) >= mcount:
        mcount=a.count(i)
        mstr=i
print(mstr,mcount)

  

3.21分別統計列表中每個成員出現的次數

a = [
'my', 'skills', 'are', 'poor', 'I', 'am', 'poor', 'I',
'need', 'skills', 'more', 'my', 'ability', 'are',
'so', 'poor'
]

a = [
'my', 'skills', 'are', 'poor', 'I', 'am', 'poor', 'I',
'need', 'skills', 'more', 'my', 'ability', 'are',
'so', 'poor'
]
rs={}
for i in a:
    if i not in rs.keys():
        rs[i]=1
    else:
        rs[i]+=1
print(rs)

  

3.22 列表查找元素位置

給定一個整數數組A及它的大小n,同時給定要查找的元素val,
請返回它在數組中的位置(從0開始),若不存在該元素,返回-1。
若該元素出現多次請返回第一個找到的位置
如 A1=[1, "aa", 2, "bb", "val", 33]
或 A2 = [1, "aa", 2, "bb"]

def find(n,m):
    if m not in n:
        return -1
    else:
        return n.index(m)
A1=[1, "aa", 2, "bb", 2,"val", 33]
print(find(A1,2))

  

3.23列表查找兩數之和

給定一個整數數組nums 和一個目標值target ,請你在該數組中找出和為目標值的那兩個整數,并返回他
們的數組下標。
你可以假設每種輸入只會對應一個答案。但是,數組中同一個元素不能使用兩遍。
示例:
給定nums=[2,7,11,15],target=9
因為nums[0] + nums[1] =2+7 = 9
所以返回[0, 1]

nums=[3,3,5,2,7,11,15]
target=9
newn=[]
def sum(nums,target):
    for i in nums:
        if i<target:
            newn.append(i)
    for i in range(len(newn)):
        for j in range(i+1,len(newn)):
            if newn[i]+newn[j]==target:
                return [i,j]
print(sum(nums,target))

  

3.24二維數組取值(矩陣)

有 a = [["A", 1], ["B", 2]] ,如何取出 2

a = [["A", 1], ["B", 2]]
# for i in range(len(a)):
#     for j in range(len(a[i])):
#         if a[i][j]==2:
#             print('a[{}][{}]'.format(i,j))

for i in range(len(a)):
    if 2 in a[i]:
        print('a[{}][{}]'.format(i,a[i].index(2)))

  

3.25 二維數組拼接

a = [[1,2],[3,4],[5,6]] 如何一句代碼得到 [1, 2, 3, 4, 5, 6]

a = [[1,2],[3,4],[5,6]]
rs=[j for i in a for j in i]
print(rs)

3.26 列表轉字符串

L = [1, 2, 3, 5, 6],如何得出 '12356'?

L = [1, 2, 3, 5, 6]
rs=''
for i in L:
    rs+=str(i)
print(rs)

  

3.27 兩個列表如何得到字典

a = ["a", "b", "c"]
b = [1, 2, 3]
如何得到 {'a': 1, 'b': 2, 'c': 3}

a = ["a", "b", "c"]
b = [1, 2, 3]
rs={}
for i in range(len(a)):
    rs[a[i]]=b[i]
print(rs)

  

3.28列表按age從小到大排序

如下列表
people = [
{"name":"yoyo", "age": 20},
{"name":"admin", "age": 28},
{"name":"zhangsan", "age": 25},
]
按年齡age從小到大排序

people = [
{"name":"yoyo", "age": 20},
{"name":"admin", "age": 28},
{"name":"zhangsan", "age": 25},
]
for i in range(len(people)):
    for j in range(i+1,len(people)):
        if people[i]["age"]>people[j]["age"]:
            people[i]["age"],people[j]["age"]=people[j]["age"],people[i]["age"]
print(people)

  

3.29列表插入元素

現有 nums=[2, 5, 7] ,如何在該數據最后插入一個數字 9 ,如何在2后面插入數字0

nums=[2, 5, 7]
nums.append(9)
n=nums.index(2)
nums.insert(n+1,0)
print(nums)

  

3.30打亂列表順序隨機輸出

有個列表a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
如何打亂列表a的順序,每次得到一個無序列表

a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(list(set(a)))

  

第4 章 元祖字典集合

4.1 輸出1-100除3余1 的數,結果為tuple

輸出1-100除3余1 的數,結果為tuple

rs=[]
for i in range(1,101):
    if i%3==1:
      rs.append(i)
print(tuple(rs))

  

4.2 把2個元祖轉字典

將('a', 'b', 'c', 'd', 'e') 和 (1,2, 3, 4, 5)兩個tuple轉成
(1, 2, 3, 4, 5)為key, ('a', 'b', 'c', 'd', 'e') 為value的字典

a=(1,2, 3, 4, 5)
b=('a', 'b', 'c', 'd', 'e')
c={}
for i in range(len(a)):
    if a[i] not in c.keys():
        c[a[i]]=b[i]
print(c)

    

4.3 把字典的value值轉成str

將字典里的值是數值型的轉換為字符串,如a = {'aa': 11, 'bb': 222}
得到{'aa': '11', 'bb': '222'}

a = {'aa': 11, 'bb': 222}
for i in a.keys():
    a[i]=str(a[i])
print(a)

  

4.4 (1)和(1,)區別,[1]和[1,]

a = [1,2,3] 和 b = [(1),(2),(3) ] 以及 c = [(1,),(2,),(3,) ] 的區別?

a = [1,2,3]
b = [(1), (2), (3)]
c = [(1,), (2,), (3,)]
print(a==b)
print(a==c)
print(type(1),type((1)),type((1,)))
print(type([1]),type([1,]))

  

4.5 map函數將[1,2,3,4]處理成[1,0,1,0]

map函數,有個列表a = [1, 2, 3, 4] 計算列表中每個數除以2 取出余數 得到 [1,0,1,0]

a = [1, 2, 3, 4]
def xx(n):
    return n%2
rs=map(xx,a)
print(rs,list(rs))

  

4.6 map函數將列表[1,2,3,4,5]轉變成[1,4,9,16,25]

map函數將列表 [1,2,3,4,5] 使用python方法轉變成 [1,4,9,16,25]

a=[1,2,3,4,5]
def jiec(n):
    return n**2
rs=map(jiec,a)
print(list(rs))

  

4.7 map函數a=[1,3,5],b=[2,4,6]相乘得到[2,12,30]

map函數對列表a=[1,3,5],b=[2,4,6]相乘得到[2,12,30]

a=[1,3,5]
b=[2,4,6]
def cheng(a,b):
    return a*b
# print(cheng(a,b))
rs=map(cheng,a,b)
print(list(rs))

  

4.8 reduce函數計算1-100的和

reduce函數計算1-100的和

from functools import reduce
def add(x,y):
    return x+y
rs=reduce(add,[i for i in range(1,101)])
print(rs)

  

4.9 reduce函數計算10!

reduce函數計算1!+2!+3!+。。。+10!

from functools import reduce
def add(x,y):
    return x*y
list1=[]
for i in range(1,11):
    rs=reduce(add,[i for i in range(1,i+1)])
    list1.append(rs)
print(list1)
print(sum(list1))
def sum(x,y):
    return x+y
rs1=reduce(sum,list1)
print(rs1)

  

4.10 兩個字典合并a={"A":1,"B":2},b={"C":3,"D":4}

兩個字典合并a={"A":1,"B":2},b={"C":3,"D":4}

a={"A":1,"B":2}
b={"C":3,"D":4}
for i in b.keys():
    if i not in a.keys():
        a[i]=b[i]
print(a)

  

4.11 {'a':1,'b':2,'c':1} 得到 {1:['a','c'],2:['b']}

m1={'a':1,'b':2,'c':1} # 將同樣的value的key集合在list里,輸出{1:['a','c'],2:['b']}

m1={'a':1,'b':2,'c':1}
rs={}
for i in m1.keys():
    if m1[i] not in rs.keys():
        rs[m1[i]]=[i]
    else:
        rs[m1[i]]+=[i]
print(rs)

  

4.12 字典按key排序d={"name":"zs","age":18,"}

d={"name":"zs","age":18,"city":"深圳","tel":"1362626627"}
字典根據鍵從小到大排序

d={"name":"zs","age":18,"city":"深圳","tel":"1362626627"}
kl=[]
dl={}
for i in d.keys():
    kl.append(i)
kl.sort()
print(kl)
for i in kl:
    dl[i]=d[i]
print(dl)

  

4.13 集合(交集、差集、并集)

a = [2, 3, 8, 4, 9, 5, 6]
b = [2, 5, 6, 10, 17, 11]
1.找出a和b中都包含了的元素
2.a或b中包含的所有元素
3.a中包含而集合b中不包含的元素

a = [2, 3, 8, 4, 9, 5, 6]
b = [2, 5, 6, 10, 17, 11]
def xx(m,n,w):
    rs=[]
    if w=='all':
        rs=list(set(m+n))
        return rs
    else:
        rs=m.copy()  #復制列表和直接引用的區別
        if w=='only':
            for i in m:
                if i in n:
                   rs.remove(i)
            return rs
        elif w=='have':
            for i in m:
                if i not in n:
                    rs.remove(i)
            return rs
        else:
            print("參數有誤")
print(xx(a,b,'have')) #a,b中均有
print(xx(a,b,'x'))
print(xx(a,b,'only'))  #a中有b中無
print(xx(a,b,'all'))  #a,b中所有

  

第5章 綜合練習題(上機考試)

5.1 有1、2、3、4組成無重復數的三位數(排列組合)

有1、2、3、4數字能組成多少互不相同無重復數的三位數?
分別打印這些三位數的組合

a=[1,2,3,4]

rs=[]
for i in range(len(a)):
    b=a.copy()
    del b[i]
    for j in range(len(a)-1):
        c=b.copy()
        del c[j]
        for k in range(len(a)-2):
            s1=str(a[i])+str(b[j])+str(c[k])
            rs.append(int(s1))
print(len(rs),rs)
# rs1=list(set(rs))
# print(len(rs1),rs1)

  

5.2 冒泡排序

a = [11, 2, 33, 1, 5, 88, 3]

冒泡排序:
依次比較兩個相鄰的元素,如果順序(如從小到大、首字母從A到Z)
錯誤就把他們交換過來

a = [11, 2, 33, 1, 5, 88, 3]
for i in range(len(a)):
    for j in range(i+1,len(a)):
        if a[i]>a[j]:
            a[i],a[j]=a[j],a[i]
print(a)

  

5.3文本中每行中長度超過3的單詞

在以下文本中找出 每行中長度超過3的單詞:
Call me Ishmael. Some years ago - never mind how long precisely - having
little or no money in my purse, and nothing particular to interest me
on shore, I thought I would sail about a little and see the watery part
of the world. It is a way I have of driving off the spleen, and regulating
the circulation. - Moby Dick

python的預期結果(盡量不超過3行搞定):
[['Call', 'Ishmael.', 'Some', 'years', 'never', 'mind', 'long', 'precisely', 'having'],
['little', 'money', 'purse,', 'nothing', 'particular', 'interest'],
['shore,', 'thought', 'would', 'sail', 'about', 'little', 'watery', 'part'],
['world.', 'have', 'driving', 'spleen,', 'regulating'],
['circulation.', 'Moby', 'Dick']]]

a="""Call me Ishmael. Some years ago - never mind how long precisely - having
little or no money in my purse, and nothing particular to interest me
on shore, I thought I would sail about a little and see the watery part
of the world. It is a way I have of driving off the spleen, and regulating
the circulation. - Moby Dick"""
a=a.replace(',',' ')
a=a.replace('.',' ')
a=a.replace('
',' ')
a=a.split(" ")
rs=[i for i in a if len(i)>3]
print(rs)
# for i in a:
#     if len(i)<=3:
#         a.remove(i)
# print(a)

  

5.4 列表數據寫入txt(open讀寫)

有一個數據list of dict如下
a = [
{"yoyo1": "123456"},
{"yoyo2": "123456"},
{"yoyo3": "123456"},
]
寫入到本地一個txt文件,內容格式如下:
yoyo1,123456
yoyo2,123456
yoyo3,123456

with open("a.txt",mode='w') as f:
    a = [
        {"yoyo1": "123456"},
        {"yoyo2": "123456"},
        {"yoyo3": "123456"},
    ]
    for i in a:
        for j in i.keys():
            f.write(j+','+i[j]+"
")

  

5.5 判斷郵箱程序(正則)

寫一個小程序:控制臺輸入郵箱地址(格式為 username@companyname.com), 程序識別用戶名和公司名后,將用戶名和公司名輸出到控制臺。
要求:

校驗輸入內容是否符合規范(xx@yy.com), 如是進入下一步,如否則拋出提 示"incorrect email format"。注意必須以.com 結尾
可以循環“輸入--輸出判斷結果”這整個過程
按字母 Q(不區分大小寫)退出循環,結束程序

import re
while True:
    a=input("請輸入郵箱地址:")
    if a=='Q':
        break
    elif a=='q':
        break
    else:
        rs=re.findall('.*@.*.com',a)
        print(rs)

  

5.6判斷一個字符串的括號自否閉合(棧) #思考了一下午

判斷一個字符串的括號自否閉合(包括大小中括號)
左括號和右括號必須是一一對應

比如:{[{()}]()}  就是一個閉合的字符串
{[{()}]([)]} 這個里面 ([)] 這種就是不閉合
import re
def needc(s,name,all_name):
    a=[]
    nn=[]
    if name[0] in s:
        for i in range(len(s)):
            if name[0]==s[i]:
                a.append(i)
            elif name[1] == s[i]:
                nn.append([a[-1],i]) #同一類型括號,第一個右括號的左邊,一定是它的當前字符串左邊最后一個左括號;
                del a[-1]
        # print(nn)
        for i in nn:
            news=s[i[0]+1:i[1]]
            # print("{}符號中的列表:{};".format(name,news))
            for j in all_name:
                if news.count(j[0])!=news.count(j[1]):
                    return "{}符號中,在腳標:{},即在列表:{};符號{}異常!".format(name,i,news,j)


    return "符號{}中所有符號均正常;".format(name)

# s="{[{()}]([)]}"
s="{[{()}]()}"
s=re.findall('[^A-Za-z0-9]',s)
all_name=['{}','[]','()']
for i in all_name:
    rs=needc(s,i,all_name)
    print(rs)

參考網上大佬的,這里用到的思想:正常的最小區域的括號,一定是先左,再右;也就是一個字符串中,第一個右括號的左邊,一定是它的左括號({},[],());

def is_closed(m):
    left=[]
    for i in m:
        if i=='{' or i=='[' or i=='(': #遇到左邊的括號,則追加到列表中;
            left.append(i)
        elif i=='}': #遇到有括號,
            if len(left)==0 or left.pop()!='{': #左括號為空,則說明有括號多了;彈出的不是左大括號
                return False
        elif i==']':
            if len(left)==0 or left.pop()!='[':
                return False
        elif i==')':
            if len(left)==0 or left.pop()!='(':
                return False
    if len(left)!=0: #列表不為0,則說明左括號多了
        return False
    return True #以上沒有遇到false,則說明括號正確
a='{[{()}]([)]}'
# a='{[{()}]()}'
print(is_closed(a)) 

  

5.7 計算純數字子串組成的單一數字(子串)

有一個純數字組成的字符串, 返回連續單一數字子串的個數
輸入字符串: “22252”
只含單一數字的子串是
1個字符:2出現4次,5出現1次
2個字符 22 出現2 次
3個字符 222 出現1 次
4個子串 0次
5個字符 0次
總共 4+1+2+1 =8
輸出結果:8

示例:
輸入:22252
輸出: 8

def nums(n):
    onlyn=list(set(n))
    count=0
    for i in onlyn:
        for j in range(1,len(n)+1): #字符個數
            for k in range(len(n)):
                if n[k:k+j]==i*j:
                    count+=1
    return count
a="22252"
print(nums(a))
def nums(s):
    count=0
    for i in range(len(s)):
        count+=1
        for j in range(i+1,len(s)):
            if s[j]==s[i]: #與i相當,則說明數字在重復
                count+=1
            else:
                break
    return count
print(nums('22252'))

   

5.8 移除字符串里面的'ab'

有一個字符串列表['aababbc', 'badabcab'] 將字符串中的'ab' 移除
比如'aababbc' 移除里面的ab后得到abc 需繼續移除ab,得到c,直到字符串中不會出現連續的ab

def remove(n,str):
    for i in range(len(n)):
        # print(n[i])
        while str in n[i]:
            n[i]=n[i].replace(str,'')
    return n

a=['aababbc', 'badabcab']
print(remove(a,'ab'))

  

5.9看代碼得結果(join用法)

x="abc",y="def",z=["d","e","f"],
分別求出x.join(y) 和x.join(z)返回的結果

x="abc"
y="def"
z=["di","e","f"]
print(x.join(y)) #dabcdabcfab 錯誤,末尾不用分割

print(','.join(y))
print(',,'.join(y))
print(x.join(z)) #diabceabcf

  

5.10 看代碼得結果(類和繼承)

閱讀以下代碼,打印結果是什么?

class A(object):

    def __init__(self):
        self.__Gender()
        self.Name()

    def __Gender(self):
        print("A.__Gender()")

    def Name(self):
        print("A.Name()")

class B(A):

    def __Gender(self):
        print("B.__Gender()")

    def Name(self):
        print("B.Name()")
b = B()

b = B()  #默認先調B的構造方法,B沒有,所以調用父類的構造方法;私有方法只有在自己的類中才可以訪問
#A.__Gender()   B.Name()
#_Gender 一個下劃線,是保護變量;
#__Gender 兩個下劃線,是私有變量;

  

5.11 看代碼得結果(閉包)

閱讀以下代碼,得到的結果是什么

def fun():
    temp = [lambda x: i*x for i in range(4)]
    return temp

for everyLambda in fun():
    print(everyLambda(2))

參考:https://blog.csdn.net/qdPython/article/details/107938206

5.12看代碼得結果(列表推導式)

A0 = dict(zip(('a','b','c','d','e'),(1,2,3,4,5)))

A1 = range(10)
A2 = [i for i in A1 if i in A0]
A3 = [A0[s] for s in A0]
A4 = [i for i in A1 if i in A3]
A5 = {i:i*i for i in A1}
A6 = [[i,i*i] for i in A1]
A0 = dict(zip(('a','b','c','d','e'),(1,2,3,4,5)))
A1 = range(10)
A2 = [i for i in A1 if i in A0]
A3 = [A0[s] for s in A0]
A4 = [i for i in A1 if i in A3]
A5 = {i:i*i for i in A1}
A6 = [[i,i*i] for i in A1]
print("A0:{}".format(A0)) #{a:1,b:2...}
print("A1:{}".format(A1)) #range(0,10)
print("A2:{}".format(A2)) #[]
print("A3:{}".format(A3)) #[1,2,3,4,5]
print("A4:{}".format(A4)) #[1,2,3,4,5]
print("A5:{}".format(A5))#{0:0,1:1,2:4,3:9...9:81}
print("A6:{}".format(A6)) #[[0,1][1,2]..[9,81]]

  

5.13 看代碼得結果(函數)

閱讀以下代碼,得到什么結果

def f(x,l=[]):
    for i in range(x):
        l.append(i*i)
    print l
 
f(2)
f(3,[3,2,1])
f(3)
def f(x, l=[]):
    for i in range(x):
        l.append(i * i)
    print(l)
f(3) #[0,1,4]
f(2) #[0,1] 答案錯的;#正確的[0, 1, 4, 0, 1] #所以此處是追加
f(3, [3, 2, 1]) #[3, 2, 1,0,1,4]
print(id(f(3)),id(f(2))) #這里函數調用,引用的是一個地址

   

5.14 看代碼得結果(深拷貝和淺拷貝)

寫出以下程序的輸出結果

from copy import deepcopy, copy

li = [1, 2, [3, 4]]
li_sliced = li[:]
li_copied = copy(li)
li_deep_copied = deepcopy(li)

li[0] = 888
li[2][0] = 666
print(li_sliced, li_copied, li_deep_copied)
from copy import deepcopy, copy

li = [1, 2, [3, 4]]
li_sliced = li[:] #[1, 2, [666, 4]] #淺拷貝,藕斷絲連
li_copied = copy(li) #[1, 2, [666, 4]]
li_deep_copied = deepcopy(li)  #[1, 2, [3, 4]] #深拷貝,徹底無關

print(id(li),id(li_sliced),id(li_deep_copied))
print(id(li[2]),id(li_sliced[2]),id(li_deep_copied[2]))
li[0] = 888
li[2][0] = 666
print(li_sliced, li_copied, li_deep_copied)

  

5.15 map reduce filter的使用

分別使用map reduce filter 函數完成下面的任務

1.計算 1- 100 的和
2.1-10,對每個數字的平方
3. ["a", "ab", "abc", "bc", "cd"] 輸出含有c字符的元素,返回值是list

from functools import reduce
# 1.計算 1- 100 的和
def sum(x,y):
    return x+y
sums=reduce(sum,[x for x in range(1,101)])
print(sums)
# 2.1-10,對每個數字的平方
def s(x):
    return x**2
s=map(s,[x for x in range(1,11)])
print(list(s))
# 3. ["a", "ab", "abc", "bc", "cd"] 輸出含有c字符的元素,返回值是list
def haves(strs):
    return 'c' in strs
ss=filter(haves,["a", "ab", "abc", "bc", "cd"])
print(list(ss))

  

5.16 通過切片操作完成以下任務(切片)

有個字符串為"abcdefg.exe" 通過切片完成下面的任務
1.輸出前3個字符
2.輸出后2個字符
3.倒敘輸出
4.間隔1個字符串輸出

x="abcdefg.exe"
print(x[:3])
print(x[-2:])
print(x[::-1])
print(x[::2])

  

5.17 根據列表數字出現次數排序去重(排序)

a=[1,2,1,2,2,2,3,4,5,6,56,7,1,3,4]
按列表中數字出現的次數,從高到低排序,并去除重復的
比如2出現了4次,排第一個位置。1出現了3次,于是可以得到:[2, 1, 3, 4, 5, 6, 7, 56]

a=[1,2,1,2,2,2,3,4,5,6,56,7,1,3,4]
countl=[]
num=list(set(a)) #a的無重復列表
result=[]
for i in num:
    c=a.count(i)
    countl.append(c) #求出num中每個數字在a中出現的次數
news=sorted(set(countl),reverse=True) #無重復次數列表的降序
print(num,countl,news)
for i in news:
    while i in countl: #次數一直在列表,則循環
        indexs=countl.index(i) #求出首次出現的索引
        result.append(num[indexs]) #結果列表追加該次數的字符
        countl[indexs]='x'
print(result)

 

a=[1,2,1,2,2,2,3,4,5,6,56,7,1,3,4]
dictc={}
onlya=set(a)
result=[]
for i in onlya:
    cn=a.count(i)
    if cn not in dictc.keys():
        dictc[cn]=[i]
    else:
        dictc[cn]=dictc[cn]+[i]
print(dictc)
newd=dict(sorted(dictc.items(),key=lambda d:d[0],reverse=True))
print(newd)
for i in newd.values():
    result+=i
print(result)
參考:https://www.runoob.com/python3/python3-func-sorted.html # 字典根據“鍵”或“鍵值”進行不同順序的排序 # 函數原型:sorted(dic,value,reverse) # 解釋:dic為比較函數,value 為排序的對象(這里指鍵或鍵值), # reverse:注明升序還是降序,True--降序,False--升序(默認)

  

5.18 補缺失的代碼-給個路徑查找文件(遞歸)

def print_directory_contents(sPath):
"""
這個函數接受文件夾的名稱作為輸入參數,
返回該文件夾中文件的路徑,
以及其包含文件夾中文件的路徑。
"""

import os
def file_name(file_dir):
    for root, dirs, files in os.walk(file_dir):
        print(root)  # 當前目錄路徑
        print(dirs)  # 當前路徑下所有子目錄
        print(files) #當前路徑下的所有文件

  

5.19 如何判斷一個字符串有沒有重復字符

判斷一個字符串是否包含重復字符。例如:“hello”就包含重復字符‘l’,而“world”就不包含重復字符, 有重復打印True, 沒重復打印False

a="helo"
b=set(a)
if len(a)!=len(b):
    print(True)
else:
    print(False)

  

5.20 找出一個字符串中子串不含有重復字符的最長子串(子串)

給定一個字符串,請你找出其中不含有重復字符的最長子串的長度。
示例1:
輸入:" abcabcbb" 輸出: 3
解釋:因為無重復字符的最長子串是"abc", 所以其長度為3。
示例2:
輸入: "bbbbb"" 輸出: 1
解釋:因為無重復字符的最長子串是"b", 所以其長度為1。
示例3:
輸入: " pwwkew" 輸出: 3
解釋:因為無重復字符的最長子串是"wke"', 所以其長度為3。
請注意,你的答案必須是子串的長度,"pwke"是一個子序列,不是子串。

a='pwwkew'
n=len(set(a))
result=''
flag=True
print(n) #4
while flag:
    for i in range(len(a)-n+1): # 6-4+1=3; #6-3+1=4
        if len(set(a[i:n+i]))==n:
            result=a[i:n+i]
            # print("當前n:{},字符串:{}".format(n,result))
            flag=False
            break
    n-=1#3,
print(result)

  

5.21 一個字符串中所有子串是回文的次數(子串)

回文是指正序(從左向右)和倒序(從右向左)讀都是一樣的。
例如:121 ,abcdedcba,123321等都是回文
這種的字符串“ABCABADCSABBAUYIIYU”找出回文出現的次數
子串回文是:'BB', 'II','ABA','ABBA', 'YIIY','UYIIYU' 總共有6個

def huiwen(str):
    l=len(str) #3 #字符串長度
    result=[]
    for i in range(2,l+1): #[2,4] #取的新的字符串長度
        for j in range(l-i+1): #2,1 #不同長度字符串,循環原字符串的次數
            sstr=str[j:j+i]  #[0,2],[1,3];,[0:3] 
            sl=len(sstr)//2
            if sstr[:sl]==sstr[-1:-sl-1:-1]:
                result.append(sstr)
    return result
a="ABCABADCSABBAUYIIYU"
print(huiwen(a))

  

5.22 找出列表中連續的數字,只取首尾(棧)

找出列表中連續的數字,然后只取首尾
有一個列表[1,2,3,4,8,6,7,11,15]
輸出[(1,4),(6,8)]

a=[1,2,3,4,8,6,7,11,15]
b=sorted(set(a))
print(b)
start=""
result=[]
for i in range(len(b)-1):
    if b[i+1]-b[i]==1:
        if not start:
            start=b[i]
    else:
        if start:
            end=b[i]
            result.append((start,end))
            start = ""

print(result)

  

越努力,越幸運!!!
good good study,day day up!!!

總結

以上是生活随笔為你收集整理的python3 练习题100道,孰能生巧,之前要想一个下午的内容,马上就有了答案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。