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" :-)