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的值{}".formata,b))

 1.2回文

回文的定义:“回文”就是正读倒读都是一样的

如奇数个“98789”,这个数字正读是“98789”倒读也是“98789”。

偶数个数字“3223”也是回文数。

字母“abcba”也是回文。

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

a=input"请输入一个字符串:")
printa)
flag=True
for i in rangelena)//2):
    if a[i]!=a[-i-1]:
        flag=False
        print"{}不是一个回文字符串;".formata))
        break
if flag:
    print"{}是一个回文字符串;".formata))

 1.3字符串切割

已知一个字符串为“hello_world_huihui”,如何得到一个队列[“hello”,”world”,”huihui”]

a="hello_world_huihui"
printa.split"_"))

 1.4拼接字符串

有个列表[‘hello’, ‘world’, ‘huihui’] 如何把列表里的字符串串联起来

得到字符串”hello_world_huihui

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

 1.5 替换字符

把字符串s中的每个空格替换成”%20″

输入:s=”We are happy.”

输出:”We%20are%20happy.”

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

 1.6 九九乘法表

打印99乘法表

for i in range1,10):
    for j in range1,i+1):
        print"{}*{}={}".formatj,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=lena)+n
            # printend)
            if a==b[n:end]: #[6:14]
                print"单词{} 在{}的第{}位出现;".formata,b,n))
                break
            n+=1
else:
    print"单词{} 未在{}中出现;".formata,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"{}在字符串{}中,出现了{}次;".formatb, a,count))
# # else:
# #     print"{}未出现在字符串{}中;".formatb,a))

# 方式二:
 #直接将m替换为my即可
count=0 while True: if b in a: a=a.replaceb,'',1) count+=1 else: break print"{}在字符串{}中,出现了【{}】次;".formatb, 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
printb)
for i in b.keys):
    if b[i]==n:
        count+=1
        if count==m:
            printi)
            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.replaceA,'=',1)
    printb)
    for i in b:
        if i!='=':
            n+=1
        else:
            print"{}在字符串{}中第一次出现的位置是 {}".formatA,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
printlenB))
while A in B:
    n=B.indexA)
    B=B.replaceA,'',1)
    count+=1
# printn)
printn+count-1)*lenA))

 1.13判断奇数偶数

 给定一个数a,判断一个数字是否为奇数或偶数

a=intinput"请输入任意一个整数:"))
# printa,typea))
if a%2==0:
    print"偶数")
else:
    print"奇数")

 1.14判断一个姓名是否姓王

 输入一个姓名,判断是否姓王

a=”王五”

b=”老王”

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

 1.15 判断是不是数字

如何判断一个字符串是不是纯数字组成

a=”123456″

b=”yoyo123″

#方式1
import re a="123456" b=re.findall'd',a) if lena)==lenb): print"{} 是纯数字;".formata)) else: print"{} 不是纯数字;".formata))

#方式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!"
printa.upper))
printa.lower))

 1.17 字符串去掉首尾空格

将字符串a=” welcome to my world “首尾空格去掉 

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

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

将字符串a = ” welcome to my world !”左边的空格去掉

a = " welcome to my world ! "
printa.lstrip))

  

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

将字符串a = ” welcome to my world ! “右边的空格去掉

a = " welcome to my world!"
printa.rstrip))
printa.rstrip"!"))

  

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

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

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

  

1.21字符串去重后排序

s = “ajldjlajfdljfddd”,去重并从小到大排序输出”adfjl”

s = "ajldjlajfdljfddd"
rs=[]
for i in s:
    if i not in rs:
        rs.appendi)
# rs=sortedrs) #列表排序方式1
rs.sort)
s="".joinrs)
printrs,s)

  

1.22字符串去重保留顺序

s = “ajldjlajfdljfddd”,去重保留原来的顺序,输出”ajldf”

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

 

1.23画菱形

题目 打印出如下图案(菱形):

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

1.24 输入一个正整数,判断是几位数

题目 给一个不多于5位的正整数,要求:
一、求它是几位数,
二、逆序打印出各位数字。
a = 12345

a=input"请输入一个不超过5位的正整数:")
print"{}是一个【{}】位数;".formata,lena)))
printa[::-1])  

第2章 小学数学题

2.1.水仙花数

如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。
例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数
那么问题来了,求1000以内的水仙花数(3位数)

result=[]
for j in range100,1000):
    i=strj)
    bai=inti[0])
    shi=inti[1])
    ge=inti[2])
    if bai**3+shi**3+ge**3==j:
        result.appendj)
printresult)

  

2.2完全数

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

pn=[]
for i in range1,1000):
    chushu=[1]
    sum=1
    for j in range2,i):
        if i%j==0:
            chushu.appendj)
            sum+=j
    if sum==i:
        pn.appendi)
        print"{}是一个完全数,真因子有{};".formati,chushu))
printpn)

 

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-{} 的和是{}".formatn,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
printsum)

  

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
printsum)

  

2.6计算 1-n 之间的所有 5 的倍数之和

定义一个函数:计算 1-n 之间的所有 5 的倍数之和,默认计算 1-100 ( n 是 一个整数)

n=100
sum=0
nc=n//5
for i in range1,nc):
    sum+=i*5
printsum)

  

2.7 n个自然数的立方和

计算公式 13 + 23 + 33 + 43 + …….+ n3
实现要求:
输入 : n = 5
输出 : 225
对应的公式 : 13 + 23 + 33 + 43 + 53 = 225

n=5
sum=0
for i in range1,n+1):
    sum+=i**3
printsum)

  

2.8 阶乘10!

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

n=10
Factorial=1
for i in range2,n+1):
    Factorial*=i
printFactorial)

  

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

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

n=10
sum=1
for i in range2,n):
    Factorial = 1
    for i in range1,i+1):
        Factorial*=i
    printFactorial)
    sum+=Factorial
printsum)

  

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 range1,n+1):
    sum=a*i*10**nn)
    nn-=1
    printsum,nn)
    tsum+=sum
printtsum)

  

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.appendnum)
    num=snl[-1]+snl[-2]
printsnl)

  

第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=lenx)//2
for i in rangecount):
    if x[i]!=x[-i-1]:
        flag=False
        break
if flag:
    print"{}是一个对称数组? True".formatx))
else:
    print"{}是一个对称数组? False".formatx))

  

3.2列表切片

如果有一个列表a=[1,3,5,7,11]
问题:1如何让它反转成[11,7,5,3,1]
2.取到奇数位值的数字,如[1,5,11]

a=[1,3,5,7,11]
printa[::-1])
printa[::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 rangelena)):
    for j in rangei+1,lena)):
        if a[i]>a[j]:
            a[i],a[j]=a[j],a[i]
printa)

  

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=lenL1)
for i in rangecount):
    if L1[i]>max:
        max,L1[i]=L1[i],max
    if L1[i]<min:
        min,L1[i]=L1[i],min
printmax,min)

  

3.5 找出列表中单词最长的一个

a = [“hello”, “world”, “yoyo”, “congratulations”]
找出列表中单词最长的一个

a = ["hello", "world", "yoyo", "congratulations"]
max=a[0]
for i in a:
    if lenmax)<leni):
        max=i
printmax)

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)
printL1[-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 rangelena)):
    if a[i]<0:
        l.appenda[i]) #将负数放在一个列表中;
        a[i]=-a[i]
a.sort)
l.sort) #对负数列表进行排序
printa,l)

for i in rangelena)):
    if -a[i] in l:
        a[i]=-a[i]
        del l[-1] #删除负数列表中相应的数
printa,l)

  

3.8按字符串长度排序

b = [“hello”, “helloworld”, “he”, “hao”, “good”]
按list里面单词长度倒叙

b = ["hello", "helloworld", "he","h3e","hao", "good"]
lens=[]
for i in b:
    lens.appendleni)) #将每个字符串的长度放在列表中
lens.sortreverse=True)
printlens) #长度列表,降序
for i in b:
    num=lens.indexleni)) #找到索引位置
    lens[num]=i #将相应索引位置替换为字符串
    printlens)
printlens)

  

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=sortedlistsetL1))) #set集合是一个无序的不重复的元素序列
# L1.sort)
printL1)

 [] 

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.appendi)
printresult)

  

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.appendb)
# printa)
printa+b)

  

3.12 生成列表列表推导式)

用一行代码生成一个包含 1-10 之间所有偶数的列表

n=10
list=[2*x for x in range1,n//2+1)]
printlist)

  

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]
printresult)

  

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]
printlist)

  

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
printzheng,fu)

  

3.16列表排除筛选

a = [“张三”,”张四”,”张五”,”王二”] 如何删除姓张的

a = ["张三","张四","张五","王二","2张2五"]
aa=a.copy)
# printida),idaa)) #查看引用地址是否一个
n=0
for i in rangelena)):
    if a[i][0]=='张':
        del aa[i-n]
        n+=1

printaa)

  

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 zhengshun):
    return n>0
bb=filterzhengshu,b)
printlistbb))

# a = ["张三","张四","张五","王二","2张2五"]
# def namen):
#     return n[0]!='张'
# aa=filtername,a)
# printlistaa))

  

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 scoren):
        return n["score"] > 60

rs=filterscore,a)
printrs,listrs))  

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=maxa)
num=a.indexmax)
printnum)

  

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.counti) >= mcount:
        mcount=a.counti)
        mstr=i
printmstr,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
printrs)

  

3.22 列表查找元素位置

给定一个整数数组A及它的大小n,同时给定要查找的元素val,
请返回它在数组中的位置从0开始),若不存在该元素,返回-1。
若该元素出现多次请返回第一个找到的位置
如 A1=[1, “aa”, 2, “bb”, “val”, 33]
或 A2 = [1, “aa”, 2, “bb”]

def findn,m):
    if m not in n:
        return -1
    else:
        return n.indexm)
A1=[1, "aa", 2, "bb", 2,"val", 33]
printfindA1,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 sumnums,target):
    for i in nums:
        if i<target:
            newn.appendi)
    for i in rangelennewn)):
        for j in rangei+1,lennewn)):
            if newn[i]+newn[j]==target:
                return [i,j]
printsumnums,target))

  

3.24二维数组取值矩阵)

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

a = [["A", 1], ["B", 2]]
# for i in rangelena)):
#     for j in rangelena[i])):
#         if a[i][j]==2:
#             print'a[{}][{}]'.formati,j))

for i in rangelena)):
    if 2 in a[i]:
        print'a[{}][{}]'.formati,a[i].index2)))

  

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]
printrs)

3.26 列表转字符串

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

L = [1, 2, 3, 5, 6]
rs=''
for i in L:
    rs+=stri)
printrs)

  

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 rangelena)):
    rs[a[i]]=b[i]
printrs)

  

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 rangelenpeople)):
    for j in rangei+1,lenpeople)):
        if people[i]["age"]>people[j]["age"]:
            people[i]["age"],people[j]["age"]=people[j]["age"],people[i]["age"]
printpeople)

  

3.29列表插入元素

现有 nums=[2, 5, 7] ,如何在该数据最后插入一个数字 9 ,如何在2后面插入数字0

nums=[2, 5, 7]
nums.append9)
n=nums.index2)
nums.insertn+1,0)
printnums)

  

3.30打乱列表顺序随机输出

有个列表a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
如何打乱列表a的顺序,每次得到一个无序列表

a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
printlistseta)))

  

第4 章 元祖字典集合

4.1 输出1-100除3余1 的数,结果为tuple

输出1-100除3余1 的数,结果为tuple

rs=[]
for i in range1,101):
    if i%3==1:
      rs.appendi)
printtuplers))

  

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 rangelena)):
    if a[i] not in c.keys):
        c[a[i]]=b[i]
printc)

    

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]=stra[i])
printa)

  

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,)]
printa==b)
printa==c)
printtype1),type1)),type1,)))
printtype[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 xxn):
    return n%2
rs=mapxx,a)
printrs,listrs))

  

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 jiecn):
    return n**2
rs=mapjiec,a)
printlistrs))

  

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 chenga,b):
    return a*b
# printchenga,b))
rs=mapcheng,a,b)
printlistrs))

  

4.8 reduce函数计算1-100的和

reduce函数计算1-100的和

from functools import reduce
def addx,y):
    return x+y
rs=reduceadd,[i for i in range1,101)])
printrs)

  

4.9 reduce函数计算10!

reduce函数计算1!+2!+3!+。。。+10!

from functools import reduce
def addx,y):
    return x*y
list1=[]
for i in range1,11):
    rs=reduceadd,[i for i in range1,i+1)])
    list1.appendrs)
printlist1)
printsumlist1))
def sumx,y):
    return x+y
rs1=reducesum,list1)
printrs1)

  

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]
printa)

  

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]
printrs)

  

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.appendi)
kl.sort)
printkl)
for i in kl:
    dl[i]=d[i]
printdl)

  

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 xxm,n,w):
    rs=[]
    if w=='all':
        rs=listsetm+n))
        return rs
    else:
        rs=m.copy)  #复制列表和直接引用的区别
        if w=='only':
            for i in m:
                if i in n:
                   rs.removei)
            return rs
        elif w=='have':
            for i in m:
                if i not in n:
                    rs.removei)
            return rs
        else:
            print"参数有误")
printxxa,b,'have')) #a,b中均有
printxxa,b,'x'))
printxxa,b,'only'))  #a中有b中无
printxxa,b,'all'))  #a,b中所有

  

第5章 综合练习题(上机考试)

5.1 有1、2、3、4组成无重复数的三位数(排列组合)

有1、2、3、4数字能组成多少互不相同无重复数的三位数?
分别打印这些三位数的组合

a=[1,2,3,4]

rs=[]
for i in rangelena)):
    b=a.copy)
    del b[i]
    for j in rangelena)-1):
        c=b.copy)
        del c[j]
        for k in rangelena)-2):
            s1=stra[i])+strb[j])+strc[k])
            rs.appendints1))
printlenrs),rs)
# rs1=listsetrs))
# printlenrs1),rs1)

  

5.2 冒泡排序

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

冒泡排序:
依次比较两个相邻的元素,如果顺序(如从小到大、首字母从A到Z)
错误就把他们交换过来

a = [11, 2, 33, 1, 5, 88, 3]
for i in rangelena)):
    for j in rangei+1,lena)):
        if a[i]>a[j]:
            a[i],a[j]=a[j],a[i]
printa)

  

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 leni)>3]
printrs)
# for i in a:
#     if leni)<=3:
#         a.removei)
# printa)

  

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.writej+','+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)
        printrs)

  

5.6判断一个字符串的括号自否闭合(栈) #思考了一下午

判断一个字符串的括号自否闭合(包括大小中括号)
左括号和右括号必须是一一对应

比如:{[{)}])}  就是一个闭合的字符串
{[{)}][)]} 这个里面 [)] 这种就是不闭合
import re
def needcs,name,all_name):
    a=[]
    nn=[]
    if name[0] in s:
        for i in rangelens)):
            if name[0]==s[i]:
                a.appendi)
            elif name[1] == s[i]:
                nn.append[a[-1],i]) #同一类型括号,第一个右括号的左边,一定是它的当前字符串左边最后一个左括号;
                del a[-1]
        # printnn)
        for i in nn:
            news=s[i[0]+1:i[1]]
            # print"{}符号中的列表:{};".formatname,news))
            for j in all_name:
                if news.countj[0])!=news.countj[1]):
                    return "{}符号中,在脚标:{},即在列表:{};符号{}异常!".formatname,i,news,j)


    return "符号{}中所有符号均正常;".formatname)

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

 参考网上大佬的,这里用到的思想:正常的最小区域的括号,一定是先左,再右;也就是一个字符串中,第一个右括号的左边,一定是它的左括号({},[],));

def is_closedm):
    left=[]
    for i in m:
        if i=='{' or i=='[' or i=='': #遇到左边的括号,则追加到列表中;
            left.appendi)
        elif i=='}': #遇到有括号,
            if lenleft)==0 or left.pop)!='{': #左括号为空,则说明有括号多了;弹出的不是左大括号
                return False
        elif i==']':
            if lenleft)==0 or left.pop)!='[':
                return False
        elif i==')':
            if lenleft)==0 or left.pop)!='':
                return False
    if lenleft)!=0: #列表不为0,则说明左括号多了
        return False
    return True #以上没有遇到false,则说明括号正确
a='{[{)}][)]}'
# a='{[{)}])}'
printis_closeda)) 

  

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 numsn):
    onlyn=listsetn))
    count=0
    for i in onlyn:
        for j in range1,lenn)+1): #字符个数
            for k in rangelenn)):
                if n[k:k+j]==i*j:
                    count+=1
    return count
a="22252"
printnumsa))
def numss):
    count=0
    for i in rangelens)):
        count+=1
        for j in rangei+1,lens)):
            if s[j]==s[i]: #与i相当,则说明数字在重复
                count+=1
            else:
                break
    return count
printnums'22252'))

   

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

有一个字符串列表[‘aababbc’, ‘badabcab’] 将字符串中的’ab’ 移除
比如’aababbc’ 移除里面的ab后得到abc 需继续移除ab,得到c,直到字符串中不会出现连续的ab

def removen,str):
    for i in rangelenn)):
        # printn[i])
        while str in n[i]:
            n[i]=n[i].replacestr,'')
    return n

a=['aababbc', 'badabcab']
printremovea,'ab'))

  

5.9看代码得结果(join用法)

x=”abc”,y=”def”,z=[“d”,”e”,”f”],
分别求出x.joiny) 和x.joinz)返回的结果

x="abc"
y="def"
z=["di","e","f"]
printx.joiny)) #dabcdabcfab 错误,末尾不用分割

print','.joiny))
print',,'.joiny))
printx.joinz)) #diabceabcf

  

5.10 看代码得结果(类和继承)

阅读以下代码,打印结果是什么?

class Aobject):

    def __init__self):
        self.__Gender)
        self.Name)

    def __Genderself):
        print"A.__Gender)")

    def Nameself):
        print"A.Name)")

class BA):

    def __Genderself):
        print"B.__Gender)")

    def Nameself):
        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 range4)]
    return temp

for everyLambda in fun):
    printeveryLambda2))

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

5.12看代码得结果列表推导式)

A0 = dictzip'a','b','c','d','e'),1,2,3,4,5)))

A1 = range10)
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 = dictzip'a','b','c','d','e'),1,2,3,4,5)))
A1 = range10)
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:{}".formatA0)) #{a:1,b:2...}
print"A1:{}".formatA1)) #range0,10)
print"A2:{}".formatA2)) #[]
print"A3:{}".formatA3)) #[1,2,3,4,5]
print"A4:{}".formatA4)) #[1,2,3,4,5]
print"A5:{}".formatA5))#{0:0,1:1,2:4,3:9...9:81}
print"A6:{}".formatA6)) #[[0,1][1,2]..[9,81]]

  

5.13 看代码得结果函数)  

阅读以下代码,得到什么结果 

def fx,l=[]):
    for i in rangex):
        l.appendi*i)
    print l
 
f2)
f3,[3,2,1])
f3)
def fx, l=[]):
    for i in rangex):
        l.appendi * i)
    printl)
f3) #[0,1,4]
f2) #[0,1] 答案错的;#正确的[0, 1, 4, 0, 1] #所以此处是追加
f3, [3, 2, 1]) #[3, 2, 1,0,1,4]
printidf3)),idf2))) #这里函数调用,引用的是一个地址

   

5.14 看代码得结果深拷贝和浅拷贝)

写出以下程序的输出结果

from copy import deepcopy, copy

li = [1, 2, [3, 4]]
li_sliced = li[:]
li_copied = copyli)
li_deep_copied = deepcopyli)

li[0] = 888
li[2][0] = 666
printli_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 = copyli) #[1, 2, [666, 4]]
li_deep_copied = deepcopyli)  #[1, 2, [3, 4]] #深拷贝,彻底无关

printidli),idli_sliced),idli_deep_copied))
printidli[2]),idli_sliced[2]),idli_deep_copied[2]))
li[0] = 888
li[2][0] = 666
printli_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 sumx,y):
    return x+y
sums=reducesum,[x for x in range1,101)])
printsums)
# 2.1-10,对每个数字的平方
def sx):
    return x**2
s=maps,[x for x in range1,11)])
printlists))
# 3. ["a", "ab", "abc", "bc", "cd"] 输出含有c字符的元素,返回值是list
def havesstrs):
    return 'c' in strs
ss=filterhaves,["a", "ab", "abc", "bc", "cd"])
printlistss))

  

5.16 通过切片操作完成以下任务切片)

有个字符串为”abcdefg.exe” 通过切片完成下面的任务
1.输出前3个字符
2.输出后2个字符
3.倒叙输出
4.间隔1个字符串输出

x="abcdefg.exe"
printx[:3])
printx[-2:])
printx[::-1])
printx[::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=listseta)) #a的无重复列表
result=[]
for i in num:
    c=a.counti)
    countl.appendc) #求出num中每个数字在a中出现的次数
news=sortedsetcountl),reverse=True) #无重复次数列表的降序
printnum,countl,news)
for i in news:
    while i in countl: #次数一直在列表,则循环
        indexs=countl.indexi) #求出首次出现的索引
        result.appendnum[indexs]) #结果列表追加该次数的字符
        countl[indexs]='x'
printresult)

 

a=[1,2,1,2,2,2,3,4,5,6,56,7,1,3,4]
dictc={}
onlya=seta)
result=[]
for i in onlya:
    cn=a.counti)
    if cn not in dictc.keys):
        dictc[cn]=[i]
    else:
        dictc[cn]=dictc[cn]+[i]
printdictc)
newd=dictsorteddictc.items),key=lambda d:d[0],reverse=True))
printnewd)
for i in newd.values):
    result+=i
printresult)
参考:https://www.runoob.com/python3/python3-func-sorted.html # 字典根据“键”或“键值”进行不同顺序的排序 # 函数原型:sorteddic,value,reverse) # 解释:dic为比较函数,value 为排序的对象(这里指键或键值), # reverse:注明升序还是降序,True--降序,False--升序(默认)

  

5.18 补缺失的代码-给个路径查找文件(递归)

def print_directory_contentssPath):
“””
这个函数接受文件夹的名称作为输入参数,
返回该文件夹中文件的路径,
以及其包含文件夹中文件的路径。
“””

import os
def file_namefile_dir):
    for root, dirs, files in os.walkfile_dir):
        printroot)  # 当前目录路径
        printdirs)  # 当前路径下所有子目录
        printfiles) #当前路径下的所有文件

  

5.19 如何判断一个字符串有没有重复字符

判断一个字符串是否包含重复字符。例如:“hello”就包含重复字符‘l’,而“world”就不包含重复字符, 有重复打印True, 没重复打印False

a="helo"
b=seta)
if lena)!=lenb):
    printTrue)
else:
    printFalse)

  

5.20 找出一个字符串中子串不含有重复字符的最长子串(子串)

给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。
示例1:
输入:” abcabcbb” 输出: 3
解释:因为无重复字符的最长子串是”abc”, 所以其长度为3。
示例2:
输入: “bbbbb”” 输出: 1
解释:因为无重复字符的最长子串是”b”, 所以其长度为1。
示例3:
输入: ” pwwkew” 输出: 3
解释:因为无重复字符的最长子串是”wke”‘, 所以其长度为3。
请注意,你的答案必须是子串的长度,”pwke”是一个子序列,不是子串。

a='pwwkew'
n=lenseta))
result=''
flag=True
printn) #4
while flag:
    for i in rangelena)-n+1): # 6-4+1=3; #6-3+1=4
        if lenseta[i:n+i]))==n:
            result=a[i:n+i]
            # print"当前n:{},字符串:{}".formatn,result))
            flag=False
            break
    n-=1#3,
printresult)

  

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

回文是指正序(从左向右)和倒序(从右向左)读都是一样的。
例如:121 ,abcdedcba,123321等都是回文
这种的字符串“ABCABADCSABBAUYIIYU”找出回文出现的次数
子串回文是:’BB’, ‘II’,’ABA’,’ABBA’, ‘YIIY’,’UYIIYU’ 总共有6个

def huiwenstr):
    l=lenstr) #3 #字符串长度
    result=[]
    for i in range2,l+1): #[2,4] #取的新的字符串长度
        for j in rangel-i+1): #2,1 #不同长度字符串,循环原字符串的次数
            sstr=str[j:j+i]  #[0,2],[1,3];,[0:3] 
            sl=lensstr)//2
            if sstr[:sl]==sstr[-1:-sl-1:-1]:
                result.appendsstr)
    return result
a="ABCABADCSABBAUYIIYU"
printhuiwena))

  

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=sortedseta))
printb)
start=""
result=[]
for i in rangelenb)-1):
    if b[i+1]-b[i]==1:
        if not start:
            start=b[i]
    else:
        if start:
            end=b[i]
            result.appendstart,end))
            start = ""

printresult)

  

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

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注