Executando verificação de segurança...
0
AXYL
2 min de leitura ·

Matriz bidimesional V1.5

Agora a condição 'if j < NumMar' verifica se a coluna atual ('j') é menor que o número 'NumMar' fornecido pelo usuário, Ficou assim agora

`import os
os.system("cls")

linhas = int(input("Quantas linhas você deseja adicionar? "))
colunas = int(input("Quantas colunas você deseja adicionar? "))

matriz = []

NumMar = int(input("Digite o número Y que deseja colocar na matriz: "))

primeiros_numeros = []
for _ in range(NumMar):
numero = int(input("Digite X números para a matriz: "))
primeiros_numeros.append(numero)

for _ in range(linhas):
linha = []
for j in range(colunas):
if j < NumMar:
linha.append(numero)
else:
linha.append(0)
matriz.append(linha)

os.system("cls")
print("Matriz preenchida:")
for linha in matriz:
print(linha)

print()
print("Números pares dentro da matriz:")
for linha in matriz:
for elemento in linha:
if elemento % 2 == 0 and elemento != 0:
print(elemento)`

Depois disso o resultado bruto fica,

Quantas linhas você deseja adicionar? 3
Quantas colunas você deseja adicionar? 4
Digite o número Y que deseja colocar na matriz: 5
Digite X números para a matriz: 6
Digite X números para a matriz: 6
Digite X números para a matriz: 6
Digite X números para a matriz: 6
Digite X números para a matriz: 6
Matriz preenchida:
[6, 6, 6, 6]
[6, 6, 6, 6]
[6, 6, 6, 6]

Números pares dentro da matriz:
6
6
6
6
6
6
6
6
6
6
6
6

Como no exemplo o número de colunas que usuario deseja preecher não existe pois só existe 3x4 fisico que limita o restante do código de ter adiciões na raiz da matriz, caso coloque como Exemplo:

Quantas linhas você deseja adicionar? 3
Quantas colunas você deseja adicionar? 4
Digite o número Y que deseja colocar na matriz: 2
Digite X números para a matriz: 6
Digite X números para a matriz: 6
Matriz preenchida:
[6, 6, 0, 0]
[6, 6, 0, 0]
[6, 6, 0, 0]

Daria somente metade pois Y = Colunas e X sendo somento número de preenchimento.

Obs: Poderia ser feito manualmente cada número na(s) coluna(s) mas objetivo e preencher.

Carregando publicação patrocinada...
2

Está bem confuso, principalmente porque o propósito de NumMar é diferente do que é dito. A mensagem diz que é "o número Y que deseja colocar na matriz", mas ele não é colocado na matriz. Se entendi bem, ele é a quantidade de colunas que serão preenchidas com determinado número.

Então eu mudaria o nome da variável para algo melhor, que deixe mais claro o que ela faz. Pode parecer bobagem, mas dar nomes melhores ajuda muito.

Já a variável numero, essa sim é colocada na matriz. Só que não entendi para que ler vários números e guardá-los na lista primeiros_numeros, que nem sequer é usada depois.

E depois de ler vários números, vc só usa o último valor digitado. Então não precisa do loop, basta ler apenas uma vez.

Ou seja, seria algo assim:

linhas = int(input("Quantas linhas você deseja adicionar? "))
colunas = int(input("Quantas colunas você deseja adicionar? "))

qtd_colunas_preenchidas = int(input("Digite a quantidade de colunas a serem preenchidas: "))
numero = int(input(f"Digite o número que será colocado nas primeiras {qtd_colunas_preenchidas} colunas: "))

matriz = []
for _ in range(linhas):
    matriz.append(([ numero ] * qtd_colunas_preenchidas) + ([ 0 ] * (colunas - qtd_colunas_preenchidas)))

print("Matriz preenchida:")
for linha in matriz:
    print(' '.join(f'{n:3}' for n in linha))

Eu aproveitei o fato de listas poderem ser "multiplicadas" por um número. Por exemplo, [ 1 ] * 3 resulta na lista [ 1, 1, 1 ], então se eu quero os primeiros elementos iguais ao número que digitei, basta fazer [ numero ] * qtd_colunas_preenchidas. Depois eu preencho o restante com zeros, e concateno as duas listas (repare que eu "somei" as listas, e o resultado é outra lista com os elementos concatenados).

Agora se eu testar com, por exemplo, 3 linhas, 4 colunas, quantidade 2 e número a ser colocado 5, o resultado será:

  5   5   0   0
  5   5   0   0
  5   5   0   0

Outra forma seria gerar uma linha e multiplicar pela quantidade de linhas, já que todas são iguais mesmo:

# ler linhas, colunas, etc (igual ao código acima)

matriz = [([ numero ] * qtd_colunas_preenchidas) + ([ 0 ] * (colunas - qtd_colunas_preenchidas))] * linhas

# imprimir matriz, etc

Claro que faltou fazer validações, como por exemplo, se a quantidade de colunas a serem preenchidas for maior que o tamanho da matriz. Daria para resolver pegando o menor valor entre eles, algo assim:

qtd_colunas_preenchidas = min(int(input("Digite a quantidade de colunas a serem preenchidas: ")), colunas)

Ou seja, se colunas for igual a 4 e eu digitar 90 para a quantidade, ainda sim vai preencher somente 4 colunas (no código anterior, ele preencheria 90 colunas).

Mas ainda teria que validar se o valor é um número negativo, tratar o erro caso não digite um número, etc. Enfim, fica "como exercício para o leitor" :-)

1

Na parte de nomes apenas pensei na funcionalidade principal que código deveria ter e coloquei oque mais me importava no momento sem prolongar pois como se trata de um exercicio não tão nessesario colocar algo mais bem conciso, realmente como estudante estava não prestando tanta atenção em pedaços do código que poderiam estar sobrando ou ocupando linhas extras. No caso de número negativo acredito que serve mas me deixou curioso como posso fazer e implementar sistema especifico de onde número deve ser colocado, claro eu acabei deixando a mensagem "o número Y que deseja colocar na matriz" muito confusa não atualizando ou deixando de acordo com o que código propocionava.

Obs: Daria para fazer seleção com as setas teclado onde número deve ser substituido, possivelmente feito com pygame.