Mano, as linhas q você soma o valor com o valor mais o preço começam a somar valores errados dependendo da quantidade....porque seu codigo soma o valor + preço e só depois vai multiplicar com a quantidade, aí acontece um erro de soma quando utiliza mais de 1 quantidade....
Toda vez q você aperta 0, o q mostra é a ultima parcial do valor total, ele não deve ser mostrado, mas sim o preço total q você definiu no início mas n atribuiu valores dps....n sei se estou explicando direito mas eu fiz algumas mudanças no teu código, olha:
codigo = 1
quantidade = 0
invalido = 0
valor = 0
precototal = 0
valorparcial = 0
while codigo != 0:
codigo = int(input("Digite o código do produto: "))
if (codigo == 1):
valor = 0.5
invalido = 0
elif (codigo == 2):
valor = 1.00
invalido = 0
elif (codigo == 3):
valor = 4.00
invalido = 0
elif (codigo == 5):
valor = 7.00
invalido = 0
elif (codigo == 9):
valor = 8.00
invalido = 0
else:
print(" Codigo Invalido ")
invalido = 1
if (invalido == 0):
quantidade = int(input("Digite a quantidade desejada: "))
valorparcial2 = valor * quantidade
valorparcial += valorparcial2
print("R$%.2f" % valorparcial)
precototal = precototal + valorparcial2
if (codigo == 0):
print("O valor total da compra é: R$%.2f" % precototal, "reais.")
invalido = 1
aqui ele tá fazendo tudo certo, eu defini uma variavel pra mostrar a parcial do preço (valorparcial2) e outra pra acumular essa parcial para ser mostrada no preço total...note q também tirei os acumuladores da variavel "valor'' pra não haver mais aquele erro de resultado....isso é tudo mano....