Ce script fait partie des projets Python de HyperSkill.
j'ai fait toute la formation python de Hyperskill pendant le Confinement 2020.
| is_float = False | |
| def isfloat(value): | |
| try: | |
| val = float(value) | |
| return not val.is_integer() | |
| except ValueError: | |
| return False | |
| def input_matrix(): | |
| global is_float | |
| size = input("Enter size of matrix : ").split(" ") | |
| mat = [] | |
| print("Enter matrix: ") | |
| for i in range(int(size[0])): | |
| user_input = input().split(" ") | |
| for e in user_input: | |
| if isfloat(e): | |
| is_float = True | |
| if is_float: | |
| user_input_fix = [float(e) for e in user_input] | |
| else: | |
| user_input_fix = [int(float(e)) for e in user_input] | |
| mat.append(user_input_fix) | |
| return mat, size | |
| def add(mat1, mat2): | |
| if mat1[1] != mat2[1]: | |
| return "ERROR" | |
| mat_x = int(mat1[1][0]) | |
| mat_y = int(mat1[1][1]) | |
| return_matrix = {i: [] for i in range(mat_x)} | |
| for x in range(mat_x): | |
| for y in range(mat_y): | |
| if len(mat1[0][x]) != mat_y or len(mat2[0][x]) != mat_y: | |
| return "The operation cannot be performed." | |
| return_matrix[x].append(mat1[0][x][y] + mat2[0][x][y]) | |
| return return_matrix | |
| def mul_c(matrix, multiplier): | |
| mat_x = int(matrix[1][0]) | |
| mat_y = int(matrix[1][1]) | |
| return_matrix = {i: [] for i in range(mat_x)} | |
| print(matrix) | |
| for x in range(mat_x): | |
| for y in range(mat_y): | |
| return_matrix[x].append(matrix[0][x][y] * multiplier) | |
| return return_matrix | |
| def mul(mat1, mat2): | |
| mat_y = int(mat1[1][1]) | |
| mat2_x = int(mat2[1][0]) | |
| if mat_y != mat2_x: | |
| return "The operation cannot be performed." | |
| a = mat1[0] | |
| b = mat2[0] | |
| matrix = [[sum(a[i][k] * b[k][j] for k in range(len(b))) for j in range(len(b[0]))] for i in range(len(a))] | |
| return {k: [round(i, 3) for i in v] for k, v in zip(range(len(matrix)), matrix)} | |
| def format_matrix(matrix): | |
| if type(matrix) == str: | |
| print(matrix) | |
| else: | |
| for i in matrix: | |
| print(" ".join([str(e) for e in matrix[i]])) | |
| def insert(ua): | |
| if isfloat(ua): | |
| return float(ua) | |
| return int(ua) | |
| def minor(m, i, j): | |
| return [row[:j] + row[j+1:] for row in (m[:i] + m[i+1:])] | |
| def determinant(m): | |
| if len(m) == 1: | |
| return m[0][0] | |
| if len(m) == 2: | |
| return m[0][0] * m[1][1] - m[0][1] * m[1][0] | |
| det = 0 | |
| for c in range(len(m)): | |
| det += ((-1) ** c) * m[0][c] * determinant(minor(m, 0, c)) | |
| return det | |
| def transpose_matrix_ask(): | |
| print("1. Main diagonal\n" | |
| "2. Side diagonal\n" | |
| "3. Vertical line\n" | |
| "4. Horizontal line") | |
| choice = int(input()) | |
| if choice == 1: | |
| raw_matrix = input_matrix()[0] | |
| matrix = list(zip(*raw_matrix)) | |
| format_matrix({k: v for k, v in zip(range(len(matrix)), matrix)}) | |
| elif choice == 2: | |
| raw_matrix = input_matrix()[0] | |
| matrix = list(zip(*reversed(raw_matrix)))[::-1] | |
| format_matrix({k: v for k, v in zip(range(len(matrix)), matrix)}) | |
| elif choice == 3: | |
| matrix = input_matrix()[0] | |
| for i in range(len(matrix)): | |
| matrix[i] = matrix[i][::-1] | |
| format_matrix({k: v for k, v in zip(range(len(matrix)), matrix)}) | |
| elif choice == 4: | |
| raw_matrix = input_matrix()[0] | |
| matrix = raw_matrix[::-1] | |
| format_matrix({k: v for k, v in zip(range(len(matrix)), matrix)}) | |
| def process(_type): | |
| if _type == "add": | |
| matrix_1 = input_matrix() | |
| matrix_2 = input_matrix() | |
| matrix = add(matrix_1, matrix_2) | |
| format_matrix(matrix) | |
| elif _type == "mul_c": | |
| raw_matrix = input_matrix() | |
| multiplier = insert(input("Enter constant : ")) | |
| matrix = mul_c(raw_matrix, multiplier) | |
| format_matrix(matrix) | |
| elif _type == "mul": | |
| matrix_1 = input_matrix() | |
| matrix_2 = input_matrix() | |
| matrix = mul(matrix_1, matrix_2) | |
| format_matrix(matrix) | |
| elif _type == "transpose": | |
| transpose_matrix_ask() | |
| elif _type == "determinant": | |
| raw_matrix = input_matrix()[0] | |
| print("The result is:", determinant(raw_matrix), sep="\n") | |
| def ask(): | |
| global is_float | |
| print("1. Add matrices\n" | |
| "2. Multiply matrix by a constant\n" | |
| "3. Multiply matrices\n" | |
| "4. Transpose matrix\n" | |
| "5. Calculate a determinant\n" | |
| "0. Exit") | |
| try: | |
| choice = int(input("Your choice: ")) | |
| if choice == 1: | |
| process("add") | |
| if choice == 2: | |
| process("mul_c") | |
| if choice == 3: | |
| process("mul") | |
| if choice == 4: | |
| process("transpose") | |
| if choice == 5: | |
| process("determinant") | |
| if choice == 0: | |
| exit(0) | |
| is_float = False | |
| except ValueError: | |
| print("please enter a number") | |
| while True: | |
| ask() |
cyvax - 2025