Death Note in Python: Problems with two Elif’s in the code

Asked

Viewed 197 times

-5

In my Death Note code in Python there is two conditions (elifs) that do not work:

1st condition (penultimate): Must show the condition that the victim is unknown and needs to enter her name.

2nd condition (last): Victims who were previously typed in the sentinel loop are shown that they are already dead and that it is necessary to enter the name of another victim.

Code below:

usuario = ""
while usuario == "":
    print ("LEMBRETE: Para usar o caderno é obrigatório inserir o nome")
    usuario = str (input("Digite o nome do usuário do caderno: "))    
print ("Bem vindo ao Death Note {}".format(usuario))
print ("Deseja matar alguém? ")
resposta = str (input("S - Sim | N - Não: "))[0]
while resposta == 'S' or resposta == 's': 
    nome = str (input("Digite o nome da ví­tima: "))
    morte = str (input("Digite a causa da morte: "))
    if morte == "" and nome != usuario:
        print ("O nome da vítima é {}".format(nome))
        print ("Causa da morte: Parada cardí­aca")
    elif nome != usuario: 
        print ("O nome da vítima é {}".format(nome))
        print ("Causa da morte: {}".format(morte))
    elif morte == "" and nome == usuario:
        print ("{} você digitou seu próprio nome no Death Note".format(nome))
        print ("Causa de sua morte: Parada cardí­aca")
        print ("Você não pode mais usar o Death Note")
        break
    elif nome == usuario:
        print ("{} você digitou seu próprio nome no Death Note!".format(nome))
        print ("Causa de sua morte: {}".format(morte))
        print ("Você não pode mais usar o Death Note")
        break
    elif nome == "": # Condição que não executa
        print ("É preciso digitar o nome de sua vítima")
    elif nome == nome: # Condição que não executa
        print ("Você já inseriu o nome dessa pessoa!")
        print ("Por favor, digite outro nome")

    print ("Deseja matar mais alguém {}?".format(usuario))
    resposta = str (input("S - Sim | N - Não: "))[0]

if resposta == 'N' or resposta == 'n':
    print ("{} volte quando quiser para limpar o mundo!!!".format(usuario))
  • What do you consider an unknown victim? A name that is not on a list of victims, for example? Or something that doesn’t make sense as a victim’s name (characters other than letters, for example)?

  • In case the victim’s name is empty he has to fall into the elif nome == "" while the repeated name of the previous victim falls on the elif nome == nome (this if I think is wrong)

  • What do you want is a code ready, no explanation or anything, but just work? I mean, you’re trying to get us to do your thing?

  • Face is cool I can’t make the last two conditions elif work because this code does not fall under these conditions, incidentally this code is not a point-only activity for training in Python.

  • 1

    @Breno I’m sorry for being rude, but what I say is true that for me it’s fun mixed with study, besides I changed the description I hope you can understand the explanation.

1 answer

3


Create a list to store the entered names and check if there is any repetition.

nomes = ['']

You will need to change the following conditions:

if morte == "" and nome != usuario and nome not in nomes:
...

elif nome != usuario and nome not in nomes:
...

elif nome in nomes: # Precisa cair nessa condição caso a vítima for repetida

Insert the nome typed in the list nomes at the end of the while loop:

nomes.append(nome)

You can also enter the user name in the list of names before entering the main loop and simplify the conditions:

nomes.append(usuario)
...

if morte == "" and nome not in nomes:
...

elif nome not in nomes:
...

Another thing: you don’t need to transform an input to string, because the function input() already returns a string.

>>> str (input("S - Sim | N - Não: "))[0] == (input("S - Sim | N - Não: "))[0]
S - Sim | N - Não: s
S - Sim | N - Não: s
True

....

usuario = ""
nomes = ['']
while usuario == "":
    print ("LEMBRETE: Para usar o caderno é obrigatório inserir o nome")
    usuario = input("Digite o nome do usuário do caderno: ")

nomes.append(usuario)

print (f"Bem vindo ao Death Note, {usuario}")
print ("Deseja matar alguém? ")

resposta = input("S - Sim | N - Não: ")[0]

while resposta == 'S' or resposta == 's':

    nome = input("Digite o nome da vítima: ")
    morte = input("Digite a causa da morte: ")

    if morte == "" and nome not in nomes:
        print (f"O nome da vítima é {nome}")
        print ("Causa da morte: Parada cardíaca")

    elif nome != usuario and nome not in nomes:
        print (f"O nome da vítima é {nome}")
        print (f"Causa da morte: {morte}")

    elif morte == "" and nome == usuario:
        print (f"{nome}, você digitou seu próprio nome no Death Note")
        print ("Causa de sua morte: Parada cardíaca")
        print ("Você não pode mais usar o Death Note")
        break

    elif nome == usuario:
        print (f"{nome}, você digitou seu próprio nome no Death Note!")
        print (f"Causa de sua morte: {morte}")
        print ("Você não pode mais usar o Death Note")
        break

    elif nome == "": # Precisa cair nessa condição caso a vítima for desconhecida
        print ("É preciso digitar o nome de sua vítima")

    elif nome in nomes: # Precisa cair nessa condição caso a vítima for repetida
        print ("Você já inseriu o nome dessa pessoa!")
        print ("Por favor, digite outro nome")

    nomes.append(nome)
    print (f"Deseja matar mais alguém, {usuario}?")
    resposta = input("S - Sim | N - Não: ")[0]

if resposta == 'N' or resposta == 'n':
    print (f"{usuario}, volte quando quiser para limpar o mundo!!!")
  • There is no way to show these changes in my code because it is not working very well the result just showing in parts

    1. Enter names = [] at the top of the code; 2) change conditions; 3) enter names.append(name) at the end of the main while loop (above print("Want to kill someone else, {}?". format(user))).
  • I can’t make it work

  • If the answer helped you, accept it

  • The last two elifs do not work

  • Yes, you are doing something wrong. Try to copy and paste the entire code. And accept the question!

  • Murilo I’m sorry, now I realized what was going wrong in the code I had done nomes = [] instead of nomes = [''] only after a long time I realized what was going wrong, but the code really works in the last two elifs.

  • Thank you, then I will reward you with the points offered when the system makes this action available to me.

  • @Alexf. just give the acceptance in the reply...

  • 1

    I already said yes, you didn’t get the 50 reward points?!

  • @Alexf. In fact, there is also the option to accept an answer: https://pt.meta.stackoverflow.com/q/1078/112052 - is not required, but it is a good practice of the site, to indicate to future visitors that that answer solved the problem. And in fact, this is the "standard" way of indicating that the answer solved the problem. Rewards are a form of "bonus", which are also valid, of course, but accepting answers is the most usual

  • @Murilositonio see if I accepted your answer

Show 7 more comments

Browser other questions tagged

You are not signed in. Login or sign up in order to post.