Python 在问答频道中刷题积累到的小技巧(一)

简介: Python 在问答频道中刷题积累到的小技巧(一)

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列元素可以表示为:

70da3c33d35a44d4a0ab217429ff898c.png


注意事项

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





目录
相关文章
|
3月前
|
存储 索引 Python
Python小技巧:单下划线 '_' 原创
Python小技巧:单下划线 '_' 原创
76 3
|
4月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
128 2
|
1月前
|
自然语言处理 Python
使用Python和Qwen模型实现一个简单的智能问答Agent
使用Python和Qwen模型实现一个简单的智能问答Agent
105 4
|
3月前
|
开发者 索引 Python
7个提升python编程的小技巧
7个提升python编程的小技巧
49 1
7个提升python编程的小技巧
|
2月前
|
搜索推荐 Python
Leecode 101刷题笔记之第五章:和你一起你轻松刷题(Python)
这篇文章是关于LeetCode第101章的刷题笔记,涵盖了多种排序算法的Python实现和两个中等难度的编程练习题的解法。
24 3
|
3月前
|
开发工具 git Python
Python小技巧:满意的逗号放置
Python小技巧:满意的逗号放置
20 4
|
2月前
|
算法 C++ Python
Leecode 101刷题笔记之第四章:和你一起你轻松刷题(Python)
这篇博客是关于LeetCode上使用Python语言解决二分查找问题的刷题笔记,涵盖了从基础到进阶难度的多个题目及其解法。
21 0
|
2月前
|
算法 C++ Python
Leecode 101刷题笔记之第三章:和你一起你轻松刷题(Python)
本文是关于LeetCode算法题的刷题笔记,主要介绍了使用双指针技术解决的一系列算法问题,包括Two Sum II、Merge Sorted Array、Linked List Cycle II等,并提供了详细的题解和Python代码实现。
15 0
|
2月前
|
算法 C++ 索引
Leecode 101刷题笔记之第二章:和你一起你轻松刷题(Python)
本文是关于LeetCode 101刷题笔记的第二章,主要介绍了使用Python解决贪心算法题目的方法和实例。
16 0
|
3月前
|
存储 索引 Python
Python小技巧:单下划线 ‘_‘
Python小技巧:单下划线 ‘_‘
18 0