Módulo 1 exercícios EDA¶

  • Exercício 1
In [1]:
import timeit
import numpy as np
from math import atan2
from math import sqrt
from math import pi
from random import sample
In [2]:
print(timeit.timeit('a=list(range(1, 101)) ', number=1000))
0.0008733000000020752
In [3]:
print(timeit.timeit('b=tuple(range(1, 101)) ', number=1000))
0.0006315999999984001
In [4]:
print(timeit.timeit('c=set(range(1, 101)) ', number=1000))
0.0011263999999968632
In [5]:
# se quiser fazer primeiro uma coisa e depois uma conversao:
time = timeit.timeit(setup='x= [i for i in range(1,101)]', stmt='y= tuple(x)', number=1000)
print('tuple:', time)
tuple: 0.0001791000000039844
In [14]:
time1 = timeit.timeit('''dicion = dict()
for i in range(1, 101):
    dicion[i] = i''', number=1000)
print('dicionario:', time1)
dicionario: 0.00838629999999796
  • Exercício 2
In [7]:
a = [1, 2, 3, 4]
b = np.array([2, 4, 6, 8])
c = np.array([[1, 2, 3], [4, 7, 1], [7, 6, 2], [0, 4, 3]])
In [8]:
print(a*5)
[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
In [9]:
print(b*5)
[10 20 30 40]
In [10]:
print(c*5)
[[ 5 10 15]
 [20 35  5]
 [35 30 10]
 [ 0 20 15]]
In [11]:
print(a+a)
[1, 2, 3, 4, 1, 2, 3, 4]
In [12]:
print(b+b)
[ 4  8 12 16]
In [13]:
print(a+b)
[ 3  6  9 12]
  • Exercício 3
In [15]:
def lista_simples(a):
    return a*5
In [16]:
def lista_de_listas(a):
    return [lista_simples(a)]*5
  • Exercício 5
In [17]:
elem1 = (1, 2)
conj = set(elem1)
# nao se podem ter listas num conjunto set logo a segunda parte do exo n da
conj1 = {frozenset({1, 2}), frozenset({3, 6})}
  • Exercício 6
In [18]:
# converter
def converter(x, y):
    assert x > 0
    r = sqrt(x**2 + y**2)
    t = atan2(y, x)
    return r, t
In [19]:
# elementos comuns
def t_intersect(x, y):
    x = set(x)
    y = set(y)
    return x & y
In [20]:
# remover duplicados
def remove_dupls(x, y):
    new = []
    for i in x:
        if i not in y:
            new.append(i)
    for i in y:
        if i not in x:
            new.append(i)
    return sorted(new)
In [24]:
# sem comprehension
def lista_divisao(x):
    new = []
    for i in x:
        if i[1] != 0:
            if i[0]/i[1] >= 1:
                new.append(i[0]/i[1])
    return new
In [23]:
# com comprehension
a5 = [(82, 40), (23, 4), (12, 3), (15, 3), (1, 2)]
lista_res_div = [i[0]/i[1] for i in a5 if i[1] != 0 and i[0]/i[1] >= 1]
In [28]:
# triplos

lst1 = [1, 5, 2, 3]
lst2 = [20, 56, 10, 22]

# comprehension
lst_triplos = [(lst1[i], lst2[i]) for i in range(0, len(lst1))]


# maneira1
def triplos(x, y):
    new = []
    for i in range(0, len(x)):
        new.append((x[i], y[i]))
    return new
  • Exercício 7
In [26]:
re = np.array([[1, 2, 3], [6, 4, 2], [3, 3, 3]])
print(re.transpose())
[[1 6 3]
 [2 4 3]
 [3 2 3]]
  • Exercício 8
In [27]:
def ret_elem_wrong(c, n):
    c = set(c)
    a = sample(c, n)
    for i in a:
        c.remove(i)
    return c
  • Exercício 9
In [31]:
# exercicio9
def prob(k, n):
    ina = (n-k+1)/n
    mid = 0
    i = 1
    while i <= k-1:
        mid += pi*(1/(n-i))
        i += 1
    return ina*mid
  • Exercício 10
In [29]:
def generator():
    conj = set(sample(range(0, 10), 2))
    yield conj


for value in generator():
    print(value)


def ret_elem(c, n):
    return tuple(sample(c, n))


def ciclinho(d):
    f = open('mediaciclos.txt', 'w')
    f.close()
    c = 0
    while c < 10000:
        soma = 0
        for i in range(0, 100):
            a = ret_elem(d, 3)
            if a[0] == a[1]-1 and a[1] == a[2]-1:
                soma += 1
        f = open('mediaciclos.txt', 'a')
        f.write(str(soma/100)+'\n')
        c += 100
    return
{1, 6}
  • Exercícios extra
In [30]:
# A
def inversa():
    n = int(input('Introduza a ordem da matriz:'))
    m = np.zeros([n, 2*n])
    print('Introduza os números de cada linha e coluna:')
    for i in range(n):
        for j in range(n):
            m[i][j] = float(input('m['+str(i)+']['+str(j)+']'))
    # por 1s na matriz inversa
    for i in range(n):
        for j in range(n):
            if i == j:
                m[i][j+n] = 1
    # gauss-jordan
    for i in range(n):
        if m[i][i] == 0:
            raise ValueError('Divisão por zero')
        for j in range(n):
            if i != j:
                ratio = m[j][i]/m[i][i]
                for k in range(2*n):
                    m[j][k] = m[j][k] - (ratio * m[i][k])
    # dividir para fcr 1 na diagonal
    for i in range(n):
        divisor = m[i][i]
        for j in range(2*n):
            m[i][j] = m[i][j] / divisor
    inv = m[:, 2:]
    return inv

# B
def resolver_sistemas_equacoes(b):
    b = np.array(b)
    c = inversa()
    return np.dot(c, b)