EP15

EP15

por Cacá Santin -
Número de respostas: 4

Olá,

na função copie_matriz(dest, orig) o comentário diz que ela é do tipo (list) -> list. Entretanto os exemplos sugerem que a função é do tipo (list, list) -> void. Se for esse o caso, estou com um problema pois altero o valor de "dest" dentro da função mas ao usá-lo fora dela o valor inicial não se altera. Então a função é de que tipo?:

  • (list) -> list;
    • Nesse caso, qual a diferença dela para a clone_matriz()?
  • (list, list) -> void;
    • Nesse caso, como alterar o valor do parâmetro permanentemente? 
  • (list, list) -> list
    • Nesse caso, os exemplos dados no código estariam errados. 

Obrigada!

Em resposta à Cacá Santin

Re: EP15

por José Coelho de Pina -

Olá Carol,

Legal que você pergunto!

Nós, monitores e profs, só não entendemos a razão de nenhuma ou nenhum colega responder ou comentar...triste

 na função copie_matriz(dest, orig) o comentário diz que ela é do tipo (list) -> list....

Você tem razão.
Os exemplo sugerem que a função é (list, list) -> None.
Corrigimos isso no docstring da função.
Muito obrigado por avisar!

estou com um problema pois altero o valor de "dest" dentro da função mas ao usá-lo fora dela o valor inicial não se altera.

Hmm.
Altera sim.

Python 3.6.3 |Anaconda, Inc.| (default, Oct 13 2017, 12:02:49) 
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> def f(m):
...     m[0][0] = "oi"
... 
>>> m = [[0, 1], [2, 3]]
>>> m
[[0, 1], [2, 3]]
>>> f(m)
>>> m
[['oi', 1], [2, 3]]
>>> 
Em resposta à José Coelho de Pina

Re: EP15

por Cristiana de Siqueira Silva Santos -

Olá!

 

Ainda tenho dúvida na diferença das funções copie_matriz e clone_matriz, pois no exemplo de copie_matriz a matriz destino(t) está preservada mesmo quando muda a matriz origem(tt).

O exemplo está correto?

 

 

def copie_matriz(dest, orig):
    ''' (list, list) -> None

    Recebe duas matriz de mesma dimensão e copia o conteúdo de orig para dest.

    Exemplo:

    >>> t = [[12, -122, 3],[1, 2, 3]]
    >>> tt = [[11, 22, 33],[44, 55, 66]]
    >>> copie_matriz(tt, t)
    >>> t
    [[12, -122, 3], [1, 2, 3]]
    >>> tt
    [[12, -122, 3], [1, 2, 3]]
    >>> tt[0][0] = 777
    >>> t
    [[12, -122, 3], [1, 2, 3]]
    >>> tt
    [[777, -122, 3], [1, 2, 3]]
    '''
    print("copie_matriz(): Vixe! Essa função ainda não foi feita.")

#--------------------------------------------------------------------------        
def clone_matriz(matriz):
    ''' (list) -> list

    Recebe uma matriz e retorna uma cópia/clone da matriz

    Exemplo:
    >>> t = [[12, -122, 3],[1, 2, 3]]
    >>> tt = clone_matriz(t)
    >>> t
    [[12, -122, 3], [1, 2, 3]]
    >>> tt
    [[12, -122, 3], [1, 2, 3]]
    >>> tt[0][0] = 111111
    >>> t
    [[12, -122, 3], [1, 2, 3]]
    >>> tt
    [[111111, -122, 3], [1, 2, 3]]
    >>>
    '''
    print("clone_matriz(): Vixe! Essa função ainda não foi feita.")

Em resposta à Cristiana de Siqueira Silva Santos

Re: EP15

por José Coelho de Pina -

Oi Cristiana,

Muito obrigado por perguntar.

O exemplo está correto?

Sim.
Está correto.

Notem que em um exemplo, antes da chamada da função, havia duas matrizes.
Já no outro, antes da chamada, havia apenas uma.
Alguém podia tentar explicar a diferença?