1. 输入一个1到5之间的整数,输错则报错直到输入正确为止。
Error = '输入错误,请重新输入!' while True: try: n = int(input('请输入一个正整数n(1≤n≤5):')) except: print(Error) continue if 1<=n<=5: break else: print(Error)
2. 输出的居中居右,使用f-string比较方便,:^居中,:>居右,:<居左。
Error = '输入错误,请重新输入!' while True: try: n = int(input('请输入一个正整数n(0退出):')) except: print(Error) continue if 1<=n<=9: for i in range(1,n+1): print(f'{(str(i)*(i*2-1)):^{n*2-1}}') elif n==0: exit(0) else: print(Error)
''' 输出结果:
实例:输出数字的等腰三角形
n=7
1
222
33333
4444444
555555555
66666666666
7777777777777
'''
3. 多位的长整数,可以用下划线任意分开,数值不变便于观察。
>>> 10_000_000 == 10000000 True >>> 1234_5678_9000 == 123456789000 True
4. 非递归的斐波那契数列函数,可以输出第n项或前n项。
def fib(n, t = False): # n:int, n>0; fib->int or list if n<3: return [1]*n if t else (n+1)//2 n1 = n2 = 1 if t: res = [1,1] for i in range(2,n): n3 = n1 + n2 n1,n2 = n2,n3 if t: res.append(n3) if t: return res return n3 for i in range(1,11): print(i,':',fib(i)) print(fib(i,True))
''' 输出结果:
1 : 1
[1]
2 : 1
[1, 1]
3 : 2
[1, 1, 2]
4 : 3
[1, 1, 2, 3]
5 : 5
[1, 1, 2, 3, 5]
6 : 8
[1, 1, 2, 3, 5, 8]
7 : 13
[1, 1, 2, 3, 5, 8, 13]
8 : 21
[1, 1, 2, 3, 5, 8, 13, 21]
9 : 34
[1, 1, 2, 3, 5, 8, 13, 21, 34]
10 : 55
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
'''
5. 矩阵乘法的通用函数, (规律:m行s列 乘 s行n列 得 m行n列)。
def matrixMultiple(A, B): res = [[0]*len(B[0]) for _ in range(len(A))] for i in range(len(A)): for j in range(len(B[0])): for k in range(len(A[0])): res[i][j] += A[i][k] * B[k][j] return res
'''输出效果:
matrixA = [[1,2],[3,4]] matrixB = [[5,6],[7,8]] print(matrixMultiple(matrixA, matrixB)) matrixA = [[1,2,3],[3,2,2],[2,1,2]] matrixB = [[2,2],[3,1],[2,1]] print(matrixMultiple(matrixA, matrixB)) matrixA = [[1,2,3],[4,5,6]] matrixB = [[7,8,9,0],[-1,-2,-3,-4],[5,6,7,8]] print(matrixMultiple(matrixA, matrixB)) [[19, 22], [43, 50]] [[14, 7], [16, 10], [11, 7]] [[20, 22, 24, 16], [53, 58, 63, 28]] '''
6. 一行代码输出100以内所有素数(或称:质数)。
print(*filter(lambda n:0 if n<2 else not any(map(lambda i:not n%i,range(2,n))), range(100)))
输出结果: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
7.随机数列排序,要求正数降序负数升序,且正数在前负数在后。
import random n = 10 random.seed(n) lst = [random.randint(-100,100) for _ in range(10)] print(lst) # lst = random.choices(range(-100,101), k=10) # 也可但相同种子也与randint()输出随机数不同 lst = sorted(lst, key=lambda x:x if x>=0 else 1/x, reverse=True) # 把负数取倒数实现反序 print(lst) # 或者升序,但x 1/x取负值一样也降序 random.seed(n) lst = [random.randint(-100,100) for _ in range(10)] lst = sorted(lst, key=lambda x:-x if x>=0 else -1/x) print(lst) # 或分两段分别排序 random.seed(10) lst = [random.randint(-100,100) for _ in range(10)] lst = list(sorted(filter(lambda x:x>=0,lst),reverse=True))+list(sorted(filter(lambda x:x<0,lst))) print(lst)
输出结果:
[46, -92, 9, 23, 47, -97, -48, 18, 25, -29]
[47, 46, 25, 23, 18, 9, -97, -92, -48, -29]
[47, 46, 25, 23, 18, 9, -97, -92, -48, -29]
[47, 46, 25, 23, 18, 9, -97, -92, -48, -29]
附录:
矩阵乘法定义
设A为m*p的矩阵,B为p*n的矩阵,那么称m*n的矩阵C为矩阵A与B的乘积,记作 C = AB,其中矩阵C中的第i行第j列元素可以表示为:
注意事项
1、当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘。
2、矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。
3、乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。
基本性质
乘法结合律: (AB)C=A(BC).
乘法左分配律:(A+B)C=AC+BC
乘法右分配律:C(A+B)=CA+CB
对数乘的结合性:k(AB)=(kA)B=A(kB).
转置 (AB).T=B.T * A.T 【.T表示矩阵转置】
矩阵乘法除以下两种情况外不满足交换律:
AA*=A*A,A和伴随矩阵相乘满足交换律。
AE=EA,A和单位矩阵或数量矩阵满足交换律。
矩阵乘法也不满足消去律,即:
AB = AC 时,不一定能推出: B = C