python相关习题

习题1:给一个圆的半径,求圆的周长和面积
1
2
3
4
5
6
7
8
9
10
11
12
import math                       #调用math函数,使用pi进行周长和面积的计算

r = int(input('圆的半径为:'))
if r > 0: #判断条件可以为True
C = 2 * math.pi * r
S = math.pi * r * r

print ("圆周长是{}".format(C) )
print ("圆面积是{}".format(S) )

else:
print ('输入的半径无意义,请输入一个正数。')
圆的半径为:11
圆周长是69.11503837897544
圆面积是380.1327110843649
习题2:截取字符串
1
2
3
4
#截取'JAVA_HOME=/usr/bin' 中的 变量名和值
key,value='JAVA_HOME=/usr/bin'.split(sep='=')
print(key)
print(value)
JAVA_HOME
/usr/bin
1
2
3
4
# 截取基名前一个名称(父目录)
lst=input("请输入合法的路径:")
*_,basename,_= lst.split(sep='/')
print(basename)
请输入合法的路径:/etc/sysconfig/network-script/ifcfg-eth
network-script
习题3:冒泡法排序
1
2
3
4
5
6
7
8
# 对列表[1,9,8,5,6,7,4,3,2]使用冒泡法进行排序,要求使用封装和解构来交换数据

lst = [1,9,8,5,6,7,4,3,2]
for i in range(len(lst)):
for j in range(8-i):
if lst[j]>lst[j+1]: #靠前位置的值大于靠后位置的值,前位置获取小的值。
lst[j],lst[j+1]=lst[j+1],lst[j]
print(lst)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
习题4:九九乘法表
1
2
3
4
5
##方法一:
for i in range(1,10):
for j in range(1,i+1):
print(j,'*',i,'=',j*i,'\t ',end=' ')
print()
1 * 1 = 1       
1 * 2 = 2       2 * 2 = 4       
1 * 3 = 3       2 * 3 = 6       3 * 3 = 9       
1 * 4 = 4       2 * 4 = 8       3 * 4 = 12       4 * 4 = 16       
1 * 5 = 5       2 * 5 = 10       3 * 5 = 15       4 * 5 = 20       5 * 5 = 25       
1 * 6 = 6       2 * 6 = 12       3 * 6 = 18       4 * 6 = 24       5 * 6 = 30       6 * 6 = 36       
1 * 7 = 7       2 * 7 = 14       3 * 7 = 21       4 * 7 = 28       5 * 7 = 35       6 * 7 = 42       7 * 7 = 49       
1 * 8 = 8       2 * 8 = 16       3 * 8 = 24       4 * 8 = 32       5 * 8 = 40       6 * 8 = 48       7 * 8 = 56       8 * 8 = 64       
1 * 9 = 9       2 * 9 = 18       3 * 9 = 27       4 * 9 = 36       5 * 9 = 45       6 * 9 = 54       7 * 9 = 63       8 * 9 = 72       9 * 9 = 81       
1
2
3
4
5
6
##方法二:
for i in range(1,10): #i的值是[1,10) i=1 ; i=2
line = ' ' #定义一个空的字符串
for j in range(1,i+1): #[1,i+1) j=1 ; j=1 j=2
line += '{0}*{1}={2} '.format(j,i,i*j) #jxi = j*i =1 x1 =1 ; 1x2=2 2x2=4
print(line)
1*1=1 
1*2=2 2*2=4 
1*3=3 2*3=6 3*3=9 
1*4=4 2*4=8 3*4=12 4*4=16 
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 

打印倒置的九九乘法表

1
2
3
4
5
6
7
8
9
10
11
for i in range(1,10):
print(' '*7*(i-1),end='')
for j in range(i,10):
product = i*j

if product < 10:
end = ' '
else:
end = ' '
print(str(i)+'*'+str(j)+'='+str(i*j),end=end)
print()
1*1=1  1*2=2  1*3=3  1*4=4  1*5=5  1*6=6  1*7=7  1*8=8  1*9=9  
       2*2=4  2*3=6  2*4=8  2*5=10 2*6=12 2*7=14 2*8=16 2*9=18 
              3*3=9  3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27 
                     4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36 
                            5*5=25 5*6=30 5*7=35 5*8=40 5*9=45 
                                   6*6=36 6*7=42 6*8=48 6*9=54 
                                          7*7=49 7*8=56 7*9=63 
                                                 8*8=64 8*9=72 
                                                        9*9=81 
习题5:求素数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
## 方法一:
#求100内的素数
#思考:
#1,什么是素数? 又称为质素,是在大于1的自然数中,除了1和它本身以外不再有其他因数。
#对正整数n,如果用2到根号n的之间的所有整数去除,均无法整除,则n为质数。

import math
p1=[2,3,5,7]
n = 100
for x in range(10,n):
for i in range(2,math.ceil(math.sqrt(x))):
if x % i == 0:
break
else:
p1.append(x)
print(p1)
[2, 3, 5, 7, 11, 13, 17, 19, 23, 25, 29, 31, 37, 41, 43, 47, 49, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
1
2
3
4
5
6
7
8
9
10
11
12
13
## 方法二:
#合数一定可以分解成几个质素的乘积

import math
n = 100
p = []
for x in range(2,n):
for i in p:
if x % i == 0:
break
else:
print(x,end=' ')
p.append(x)
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
## 方法三: 
# 带flag判断,提高程序效率。
import math
p = []
flag = False
for x in range(2,100): #x=13
for i in p: #p=[2,3,5,7]
if x % i ==0: # x%i != 0
flag = True
break
if i >= math.ceil(math.sqrt(x)): #i< math.ceil(math.sqrt(x))
flag = False
break
if not flag: #flag = false ==> true
print(x,end=' ')
p.append(x)
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 
习题6:杨辉三角
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
## 方法一:
# 每个数等于它上方两数之和
# 每行数字左右对称,由1开始逐渐变大。
# 第n行的数字有n项。
# 第n行数字和为2n-1。

## 第一次循环 i=2
t = [[1],[1,1]]
for i in range(2,6): #i=2
cur = [1]
# print(cur)
pre = t[i-1] # t[1] ==> pre = [1,1] len(pre)=2
# print(pre)
for j in range(len(pre)-1): # len(pre)-1 =1 ==> for j in [0,1)
cur.append(pre[j]+pre[j+1]) # cur = [1].append ([0]+[1])=2 ==>[1,2]
cur.append(1) #[1,2,1]
t.append(cur)# [[1], [1, 1], [1, 2, 1]]
print(t)

## 第二次循环 i=3
t_i3 = [[1],[1,1]]
for i in range(2,6): #i=3
cur = [1]
# print(cur)
pre = t_i3[i-1] # t[2] ==> pre = [1,2,1] ==> len(pre)=3
# print(pre)
for j in range(len(pre)-1): # len(pre)-1 = 2 ==> for j in [0,1,2) 循环2次 j=0 and j=1
cur.append(pre[j]+pre[j+1]) # cur第一次循环 = [1].append ([0]+[1])=3(pre[0]=1 and pre[1]=2 )) ==>[1,3]
# cur第二次循环 cur=[1,3].append([1]+[2]=3(pre[1=2 and pre [2]=1 )) ==> [1,3,3]
cur.append(1) #[1,3,3,1]
t_i3.append(cur)# [[1], [1, 1], [1, 2, 1],[1, 3, 3, 1]]
print(t_i3)
[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1]]
[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1]]
1
2
3
4
5
6
7
8
## 方法二:
def YangHui (num = 6):
LL = [[1]]
for i in range(1,num):
LL.append([(0 if j== 0else LL[i-1][j-1])+ (0 if j ==len(LL[i-1]) else LL[i-1][j]) for j in range(i+1)])
return LL
a = YangHui()
print(a)
[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1]]
习题7:打印转置矩阵
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
## 方法一:
def trans(m):

a = [[] for i in m[0]] #打印两个原始列表
count = 0
for i in m: #i=[1,2],拿出第一个列表
count += 1
print(a)
print(i)
print(m)
for j in range(len(i)): # j in (0,1),将列表的数据分别插入到新的列表中
a[j].append(i[j]) #a[0].append(i[0]) ==> []+1 = [1]
#a[1].append(i[1]) ==> []+2 = [2]
print(count )
return a

m = [[1, 2,3,5], [3, 4,4,5], [5,4, 6],[0,4,5,3]]
print(trans(m))
[[], [], [], []]
[1, 2, 3, 5]
[[1, 2, 3, 5], [3, 4, 4, 5], [5, 4, 6], [0, 4, 5, 3]]
1
[[1], [2], [3], [5]]
[3, 4, 4, 5]
[[1, 2, 3, 5], [3, 4, 4, 5], [5, 4, 6], [0, 4, 5, 3]]
2
[[1, 3], [2, 4], [3, 4], [5, 5]]
[5, 4, 6]
[[1, 2, 3, 5], [3, 4, 4, 5], [5, 4, 6], [0, 4, 5, 3]]
3
[[1, 3, 5], [2, 4, 4], [3, 4, 6], [5, 5]]
[0, 4, 5, 3]
[[1, 2, 3, 5], [3, 4, 4, 5], [5, 4, 6], [0, 4, 5, 3]]
4
[[1, 3, 5, 0], [2, 4, 4, 4], [3, 4, 6, 5], [5, 5, 3]]
习题8.字典扁平化

要求:把源字典转换为目标字典
源字典:{‘a’:{‘b’:1,’c’:2},’d’:{‘e’:3,’f’:{‘g’:4}}}
目标字典:{‘a.b’: 1, ‘a.c’: 2, ‘d.e’: 3, ‘d.f.g’: 4}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#dst = {'d.e': 3, 'a.c': 2, 'a.b': 1, 'd.f.g': 4} 
#a,v_a;
#b,v_a
#为什么需要个前缀呢?
#中心思想,递归
#判断v是否为字典,如果是字典则继续分解,如果不是字典就输出


source = {'a':{'b':1,'c':2},'d':{'e':3,'f':{'g':4}}}

def flatmap(src,dest=None,prefix=''):
if dest == None:
dest = {}

for k,v in src.items():
if isinstance(v,(list,dict)): #判断v是否为字典,如果是字典则继续分解,如果不是字典就输出
flatmap(v,prefix=prefix+k+'.') #把v再次传入flatmap函数,此时参数已经为prfix+.了
else:
target[prefix+k] = v
return dest

flatmap(source)
print(target)
{'a.b': 1, 'a.c': 2, 'd.e': 3, 'd.f.g': 4}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
source = {'a':{'b':1,'c':2},'d':{'e':3,'f':{'g':4}}}

def flatmap(src):
def _flatmap(src,dest=None,prefix=''):
for k,v in src.items():
key = prefix + k
if isinstance(v,(list,dict)): #判断v是否为字典,如果是字典则继续分解,如果不是字典就输出
_flatmap(v,dest,key+'.') #把v再次传入flatmap函数,此时参数已经为prfix+.了
else:
dest[key] =v
dest = {}
_flatmap(src,dest)

return dest



print(flatmap(source))
{'a.b': 1, 'a.c': 2, 'd.e': 3, 'd.f.g': 4}
习题9:给定一个不超过5位的正整数,判断其有几位?使用input函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
num = int(input())

if (num /10000)>=1 and (num /10000) < 10:
print('5')
elif (num /1000)>=1 and (num /1000) < 10:
print('4')
elif (num /100)>=1 and (num /100) < 10:
print('3')
elif (num /10)>=1 and (num /10) < 10:
print('2')
elif num >=1 and num < 10:
print('1')
else:
print('error')
1123
4
1
2
3
4
5
6
7
8
9
10
11
12
num = int(input())

if num <= 9 and num >=0:
print("1")
elif num <= 99:
print('2')
elif num <= 999:
print("3")
elif num <= 9999:
print("4")
else:
print('error')
112
3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
num = int(input())


if num < 100:
if av <10 and av > 0:
print('1')
elif av <100 and av >= 10:
print('2')

elif 100<=num <=9999:
av = num /100
if av >= 1 and av < 10:
print('3')
elif av >= 10 and av <100:
print('4')
else:
print('error')
111111
error

while 实现

1
2
3
4
5
6
7
8
9
10
11
12
13
num =1000000
count = 0

while num >=10:


if num / 10 >= 1:

num = num / 10

count +=1

print(count+1)
7

统计位数,并且倒序打印出每一位

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
num1 = num  = 12345678

count = 0

while num >= 10:
if num / 10 >= 1:
count +=1
num = num // 10

print(num1-num*10)
num1 = num
num1 - num * 10
if num < 10 :
print(num)

print('total:',count+1)
8
7
6
5
4
3
2
1
total: 8
习题10:打印一个正方形
1
2
for i in range(4):
print('* '*4)
*  *  *  *  
*  *  *  *  
*  *  *  *  
*  *  *  *  
1
2
3
4
5
6
7
for i in range(1,10):
if i == 1:
print('* '*10)
elif i<9:
print('*'+' '*17+'*')
else:
print('* '*10)
* * * * * * * * * * 
*                 *
*                 *
*                 *
*                 *
*                 *
*                 *
*                 *
* * * * * * * * * * 
习题11:求100以内的奇数和
1
2
3
4
sum = 0 
for i in range(1,100,2):
sum += i
print(sum)
2500
1
2
3
4
5
sum = 0 
for i in range(1,100):
if i % 2 !=0:
sum += i
print(sum)
2500
习题12: 求5的阶乘
1
2
3
4
5
num = 1
for i in range(1,5):
num *=i

print(num)
24

求1到5的阶乘之和

1
2
3
4
5
6
7
8
9
10
11
12
num = 1
a = 0
for i in range(1,6): #5

for n in range(1,i+1): #1-5

num *=n

a += num

num = 1
print(a)
153
1
2
3
4
5
6
7
num = 1
a = 0
for n in range(1,6): #n= 1 , n =2 n =3
num *=n # num = 1, num = 2 *1 = 2 num = 2 x 3
a += num # a= 1 a = 1+2 a = 1+2 +6

print(a)
153
习题13:打印菱形
1
2
3
4
5
for i in range(1,8):
if i <=4:
print((4-i)*' '+'*'*(2*i-1))
else:
print((i-4)*' '+'*'*(2*(8-i)-1))
   *
  ***
 *****
*******
 *****
  ***
   *
1
2
3
4
5
6
for i in range(-3,4): #[-3,3]
if i < 0:
p = -i
else:
p = i
print(' '*p+'*'*(7-p*2))
   *
  ***
 *****
*******
 *****
  ***
   *
1
2
for i in range(1,8):
print((4-i)*' '+'*'*(2*i-1)) if i <=4 else print((i-4)*' '+'*'*(2*(8-i)-1))
   *
  ***
 *****
*******
 *****
  ***
   *
1
2
3
4
5
6
7
8
9
a, b, c = 1, 2, 3
if a>b:
c = a
else:
c = b

## 变异写法==>

c = a if a>b else b
习题14:生成0000.zhuajgmncp 形式的的字符串,点号前有序,之后为无序的字符串
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import random
random_str = ''
str_word = 'abcdefghijklmnopqlstuvwxyz'

for i in range(10):
str_i=("%04d" % i)


lst = list(str_word)
random_list = random.choices(lst,k=10)
for tmp_str in random_list:
random_str+=tmp_str

new = str_i + '.'+random_str
random_str = ''
print(new)
0000.dsjvxdnkww
0001.sjlaeyjpcl
0002.ucypwqeoah
0003.ofkllwkdmi
0004.bujjgomwsl
0005.ouzvmfngti
0006.wsqvpxayob
0007.oqobuqongf
0008.aqiplnlljx
0009.mwpmnjjgmj
1
['{:04},{}'.format(n,''.join([random.choice(bytes(range(97,123)).decode()) for _ in range(10)])) for n in range(1,10)]
['0001,mhtflcfjcj',
 '0002,aiedozjflp',
 '0003,wtnddoeiof',
 '0004,jwimjzeant',
 '0005,nahqnwsozj',
 '0006,jbfbeykmke',
 '0007,brhqtxyits',
 '0008,fzdrthuhuf',
 '0009,slfwnjpfmg']
---------------- 谢谢光临 ----------------
0%