Não precisa fazer um range de 1 em 1 e ir testando o resto da divisão. Se você começa o range em zero, basta fazer ele pular de 2 em 2:
termos1 = int(input("Qual o final da lista de numeros pares vc quer imprimir? "))
if termos1 < 0:
print("Erro de Sintaxe!!!!")
print([n for n in range(0, termos1 + 1, 2) ])
Repare no range(0, termos1 + 1, 2). Os argumentos que passei são:
-
0: o valor inicial
-
termos1 + 1: o valor final (como em um range o valor final não é incluso, eu somo 1 para que ele faça parte). Não ficou claro se deve ser incluso - por exemplo, se digitar “20”, o 20 deve fazer parte da lista? Em caso afirmativo, some 1, senão use apenas termos1
-
2: é o “passo”, ou seja, o range vai pular de 2 em 2. Como eu comecei do zero, então é garantido que só terá números pares
Não precisa de lambda, afinal o lambda no fundo é apenas uma sintaxe “alternativa” para funções curtas (leia mais a respeito aqui), mas se você só precisa gerar a lista, me parece desnecessário.
A menos, é claro, que você vá reaproveitar o algoritmo para gerar outras listas, aí até faria sentido ter uma função ou um lambda para isso.
Veja como ficaria:
# definir o lambda, recebe um valor máximo e gera a lista com os números pares até este valor
gerar_pares = lambda maximo: [n for n in range(0, maximo + 1, 2) ]
termos1 = int(input("Qual o final da lista de numeros pares vc quer imprimir? "))
if termos1 < 0:
print("Erro de Sintaxe!!!!")
print(gerar_pares(termos1))
Repare que primeiro eu crio o lambda, depois eu chamo ele passando termos1 como argumento. No seu código você estava criando-o dentro do print, mas não estava chamando-o.