Erro de lógica/fração em python(como resolver)

Nesse código de caixa de mercado, caso digite 0 na variável pv irá haver um erro no ultimo print na variavel vp/pv, pois não há como caucular um numero x dividido por zero, como faço pra que caso a pessoa digite 0 não haja erro ?(resolver o problema com códigos ou lógica de matemática ok)

t = '---'
l = '    ' * 9
print(l, 'Caixa numérico')
p = float(input('Qual o preço ?R
```))
d = float(input('Desconto por cento:'))
pv = int(input('Se deseja parcelar, coloque em quantas vezes, se não, digite "1":'))
v = p - (p / 100) * d
vp = p + (p / 100) * (20-d)
print('\nO produto com valor de {}, sairá por {}R${:.2f}{} a vista no desconto de {}%'.format(p, t, v, t, d))
print('ou {}R${:.2f} parcelado{} em {}{}x de R${:.2f}{}, no desconto de {}%'.format(e, vp, e, e, pv, vp/pv, e, d-20))``

Transforme em 1:

if pv == 0:
    pv = 1

Obrigado man, algum ajudou, os cara do stacko`verflow tava só xingando kkk, vlw, me tira uma dúvida, la no stack não pode agradecer, mas aqui no guj pode?

O stackoverflow é bem mais rigoroso, tem que estar tudo perfeito.
Acho que pode agradecer, sim, nos comentários.

Será que “ajudou” mesmo? Pensa assim, o usuário digita 0, aí você troca pra 1 sem avisar, faz sentido?

Não seria melhor mostrar alguma mensagem, dizendo que zero não pode (afinal, zero parcelas quer dizer o que? Que o cliente não vai pagar?), e quem sabe pedir pra digitar novamente? Ex:

while True:
    pv = int(input('mensagem...'))
    if 1 <= pv <= 10: # supondo que o máximo é 10 parcelas 
        break # sai do while
    else:
        print('quantidade de parcelas deve estar entre 1 e 10')
# resto do programa

Claro, o if pode ser trocado pelos valores que você achar mais adequado. Lembrando que sempre dá pra melhorar, pois o código não valida se foi digitado um número de fato (se digitar “xyz”, dará erro, mas enfim).

Outra opção é só dar a mensagem de erro (“não pode ser zero”) e encerrar o programa. Como não é dito exatamente o que é pra fazer nesse caso, acho que qualquer uma dessas opções pode servir. Eu não gosto dessa ideia de simplesmente trocar por um valor qualquer só porque “não vai dar mais erro”.

Só porque o programa “funcionou” (não deu mais erro na execução), não quer dizer que esteja correto, ou que faça sentido. Mudar o input do usuário sem avisar, e principalmente sem validar, muitas vezes não é uma boa ideia (há casos e casos, claro, mas neste aqui não parece ser).

Sei que “é só um exercício”, mas exercícios também servem - ou deveriam servir - para fazer pensar um pouco além e já ir exercitando uma coisa que acho importante na nossa profissão: não se preocupar somente com o caso que funciona, mas também com os que podem dar errado (e tratar adequadamente).

Essa mentalidade de fazer qualquer coisa porque “assim funciona”, sem pensar se faz mesmo sentido, é prejudicial pra nossa área, tanto no curto quanto no longo prazo. E infelizmente muitos gostam de contribuir para que isso se continue (ou não se importam com isso).

Ou talvez eu só esteja virando um velho ranzinza. Desculpe o desabafo…

A sim, é pq eu queria primeiro resolver o problema pra depois aperfeiçoar sabe, mas você está certo sim amigo, se for empurrando os problemas do código com a barriga lá na frente vai dar ruim…:+1::+1::+1:

Também não gosto.
A ideia de trocar por 1 não é para não dar mais erro.
Simplesmente interpretei como: 0 == não quer parcelar -> vai ser a vista -> a vista é 1 parcela.

Vai de quem tá fazendo o programa mandar alguma mensagem falando que o que foi digitado é inválido e que considerou como a vista, etc.