def gerador_de_tabuadas():
    """Gera todas as tabuadas de 1 a 10
    Entrada: nenhuma; Saída: lista de listas de strings"""
    lista_para_retorno = []
    for número in range(1,11):
        #a tarefa aqui dentro é gerar e guardar a tabuada do número
        tabuada_atual = []
        for fator in range(10):
            #a tarefa aqui dentro é gerar e guardar a linha da tabuada
            linha = str(número) + ' x ' + str(fator) + ' = ' + str(número*fator)
            list.append(tabuada_atual,linha)
        list.append(lista_para_retorno,tabuada_atual)
    return lista_para_retorno

def gerador_de_matriz_4_3_de_zeros():
    """Faz o prometido.
    Entrada: nenhuma; saída: lista de listas de ints"""
    matriz = []
    for contador_de_linha in range(4):
        # aqui dentro a tarefa é gerar e guardar uma linha de 3 zeros
        linha = []
        for contador_de_coluna in range(3):
            list.append(linha,0)
        list.append(matriz,linha)
    return matriz

def gerador_ruim():
    """ PARA FINS PURAMENTE DIDÁTICOS """
    linha = 3*[0]
    return 4*[linha]

def gerador_outro_ruim():
    """ PARA FINS PURAMENTE DIDÁTICOS """
    linha = 3*[0]
    return 4*[linha[:]]

def multiplica_diagonal(matriz, k):
    """Retorna o resultado da matriz quando sua diagonal
    principal é multiplicada por k. A matriz TEM QUE SER QUADRADA.
    entradas: matriz (lista de listas de floats) e float
    saída: matriz"""
    quantidade_de_linhas_ou_colunas = len(matriz)
    cópia = copia_matriz(matriz)
    for i in range(quantidade_de_linhas_ou_colunas):
        cópia[i][i] *= k
    return cópia

def copia_matriz(matriz_dada):
    """Retorna uma cópia (de fato) da matriz, sem alias"""
    matriz_cópia = []
    for linha_da_matriz_dada in matriz_dada:
        # a tarefa aqui dentro é gerar e guardar uma cópia dessa linha
        linha_cópia = []
        for elemento in linha_da_matriz_dada:
            list.append(linha_cópia,elemento)
        list.append(matriz_cópia, linha_cópia)
    return matriz_cópia

def soma_matrizes(A,B):
    """Recebe duas matrizes de mesmo tamanho e retorna sua soma"""
    matriz_soma = []
    quantidade_de_linhas = len(A) # ou len(B), dá no mesmo
    quantidade_de_colunas = len(A[0]) # ou len(B[0])
    for posição_linha in range(quantidade_de_linhas):
        # a tarefa é gerar e guardar uma linha da matriz soma
        linha_da_soma = []
        for posição_coluna in range(quantidade_de_colunas):
            # a tarefa é calcular e guardar o elemento correto
            elemento_da_soma = A[posição_linha][posição_coluna] + B[posição_linha][posição_coluna]
            list.append(linha_da_soma, elemento_da_soma)
        list.append(matriz_soma, linha_da_soma)
    return matriz_soma
