Ajuda em questão de python - lista/vetor

Olá amigos, preciso de ajuda no desenvolvimento de um algoritmo. Estou com dúvida na etapa em que preciso resolver o esquema de cálculos exigidos pela questão. A questão em específico é essa:

Faça um algoritmo que lê 10 valores para uma variável do tipo lista de nome x. Após completar toda a leitura da lista, verificar se cada valor armazenado na lista é par ou ímpar. Se for par, fazer com que o valor seja atualizado para o resultado da multiplicação do valor contido pelo índice. Se for impar fazer com que a lista receba o valor do seu próprio índice.

Minha dúvida está relacionada a seguinte parte:

  • Números pares: como proceder para realizar essa multiplicação?
  • Números ímpares: como posso proceder para a lista receber o valor do próprio índice?

Segue em anexo meu algoritmo - por enquanto o que consegui elaborar:

print("Declare números para completar a lista.")
print(25*'==')

x_list = []
num_size = int(input("Quantos elementos essa lista terá?\nQUANTIDADE: "))

for i in range(num_size):
print("Declare os números que a lista irá conter")
quant = float(input("Valor %d: "%i))
x_list.append(quant)

print("LISTA DECLARADA:\n",x_list,"\n",25*"=")

for i in range(num_size):
if(x_list[i]%2) == 0

Vou tentar responder, como uma forma de eu também praticar essas questões de lógica. Mas como ainda não comecei Python (tou estudando Java ainda), então minha resposta vai ser mais pelo lado da lógica do que pelo lado do código.

Fazer um algoritmo que lê 10 valores pra um vetor X de números inteiros.

Depois que ler a lista, verificar se cada valor armazenado é par ou ímpar.

Se for par, fazer com que o valor seja atualizado para o resultado da multiplicação do valor contido pelo índice.
==> Aqui eu tou achando que, se for par, então tem que multiplicar esse número pelo seu índice no vetor. Tipo, um vetor sempre começa com o índice 0 (pelo menos no Java, não sei se em Python isso muda). Então um número par na sexta posição tem que ser ele multiplicado por 5 (porque é 0, 1, 2, 3, 4, 5 -> é a sexta posição do vetor).

==>Se for assim, então…
numeroNaquelaPosicao = numeroNaquelaPosicao * aquelaPosicaoNoVetor;

Se for ímpar, fazer com que a lista receba o valor do seu próprio índice
==> Não entendi essa. “Fazer a lista receber o valor do seu próprio índice”?
Ou tou achando que, quando o número for ímpar, então aquele número tem que ser substituído pelo número do índice dele. Por exemplo, um número ímpar na sexta posição tem que ser substituído por 5 (mesmo motivo do parêntese acima).

==> Se for assim, então…
numeroNaquelaPosicao = aquelaPosicaoNoVetor;

(Acho que é isso…?)

O exercício diz para ler 10 valores, então pra que pedir que se digite a quantidade? Você já sabe que a quantidade é 10, então use esse valor e pronto (se fosse pra ler a quantidade, aí tudo bem, mas pelo enunciado, entendo que não precisa).


Se usar float, o programa aceitará números com casas decimais, porém tais números não são pares nem ímpares. Por exemplo, números como 0,14926, ou 15,9, ou ainda π, são pares ou ímpares? Nenhum dos dois, somente números inteiros são pares ou ímpares. Então o programa só deveria ler números inteiros.

Sendo assim, use int em vez de float:

x = []
for _ in range(10):
    x.append(int(input("Digite um número")))

E depois, para iterar pelos índices e seus respectivos valores, use enumerate:

for indice, valor in enumerate(x):
    if valor % 2 == 0: # número é par
        x[indice] *= indice # multiplica o valor pelo índice
    else: # mas se for ímpar
        x[indice] = indice # troca o valor pelo próprio índice