How to ask questions for the user in Python, without running constantly?

2

I'm creating a Python code that requests the nick of a player and, as the user responds, it will receive a response,

player = (input('Digite o nick desejado:'))

if player == 'Phil' :
  print('Player encrenqueiro,nível de habilidades:razoável.')
elif player == 'Knuckles' :
    print('Ótimo player,muito cooperativo,nível de habilidades:alta!')
elif player == 'Bubble':
    print('Considerado um dos melhores players no game,extremamente flexível e\n adaptável ao jogo de seu parceiro,nível de habilidades:altíssima!')

The problem is that I do not know how to make the program stop, until the user enters all the nicks he wants. I do not want it to run again every time to get an answer, I continually want ...

Each one will get a different message, for each nick typed, and that's what I want done after they type a nick and get a response, receive a "Type the next player " and so on ...

    
asked by anonymous 23.03.2018 / 21:59

2 answers

3

Although the other answer produces the expected result, I do not think it is a good solution, since if you need to add more nick options, you will have to add other conditions in the structure. Not good for application maintenance.

The solution I propose is to store the nicks together with their phrases in a dictionary:

NICKNAMES = {
    'Phil': 'Player encrenqueiro, nível de habilidades: razoável.',
    'Knuckles': 'Ótimo player, muito cooperativo, nível de habilidades: alta!',
    'Bubble': 'Considerado um dos melhores players no game, extremamente flexível e\n adaptável ao jogo de seu parceiro, nível de habilidades: altíssima!',
    'Woss': 'Pica das galáxias. Com certeza o melhor! Boa escolha, nível de habilidades: mais que 8000!'
}

DEFAULT = 'Huum, não sei o que dizer sobre esse player :('

To read user input, use an infinite loop until it confirms the nick that it wants to use.

while True:
    print("Qual nick gostaria de utilizar?")
    print("Que tal essas opções:", list(NICKNAMES.keys()), '?')

    nick = input("Nick: ")

    print(NICKNAMES.get(nick, DEFAULT))

    confirm = input('Gostaria de manter esse nick? [S/n] ')

    if confirm in ['S', 's', '']:
        break
    else:
        print()

print('Ok, seu nick será {}'.format(nick))

See working at Repl.it

So, if you need to define other nicks , just add in the dictionary, that could be a structure stored in a database or even in a JSON file, for example.

One possible output of this code would be:

Qual nick gostaria de utilizar?
Que tal essas opções: ['Phil', 'Knuckles', 'Bubble', 'Woss'] ?
Nick:  Phil
Player encrenqueiro, nível de habilidades: razoável.
Gostaria de manter esse nick? [S/n]  n

Qual nick gostaria de utilizar?
Que tal essas opções: ['Phil', 'Knuckles', 'Bubble', 'Woss'] ?
Nick:  Knuckles
Ótimo player, muito cooperativo, nível de habilidades: alta!
Gostaria de manter esse nick? [S/n]  n

Qual nick gostaria de utilizar?
Que tal essas opções: ['Phil', 'Knuckles', 'Bubble', 'Woss'] ?
Nick:  Bubble
Considerado um dos melhores players no game, extremamente flexível e
 adaptável ao jogo de seu parceiro, nível de habilidades: altíssima!
Gostaria de manter esse nick? [S/n]  n

Qual nick gostaria de utilizar?
Que tal essas opções: ['Phil', 'Knuckles', 'Bubble', 'Woss'] ?
Nick:  Horacio
Huum, não sei o que dizer sobre esse player :(
Gostaria de manter esse nick? [S/n]  n

Qual nick gostaria de utilizar?
Que tal essas opções: ['Phil', 'Knuckles', 'Bubble', 'Woss'] ?
Nick:  Woss
Pica das galáxias. Com certeza o melhor! Boa escolha, nível de habilidades: mais que 8000!
Gostaria de manter esse nick? [S/n]  s
Ok, seu nick será Woss
    
23.03.2018 / 22:56
0
So? If it is I'll comment the code later.

Demo: link

nicks_consultados = []

while len(nicks_consultados) < 3:
  print("Quantidade {}".format(len(nicks_consultados)))

  player = (input('Digite o nick desejado:'))

  if player == 'Phil':
    print('Player encrenqueiro,nível de habilidades:razoável.')

    if 'Phil' not in nicks_consultados:
      nicks_consultados.append('Phil')

  elif player == 'Knuckles' :
    print('Ótimo player,muito cooperativo,nível de habilidades:alta!')

    if 'Knuckles' not in nicks_consultados:
      nicks_consultados.append('Knuckles')
  elif player == 'Bubble':
    print('Considerado um dos melhores players no game,extremamente flexível e\n adaptável ao jogo de seu parceiro,nível de habilidades:altíssima!')

    if 'Bubble' not in nicks_consultados:
      nicks_consultados.append('Bubble')

print("Terminou")

Explanation

I created a vector nicks_consultados , where I will save which nicks have already been typed.

while len(nicks_consultados) < 3:

In this section I get the amount of items from the list as long as it is less than 3 (the user did not type all the nicknames at least once I repeat the process.

In the ifs I'll check if the nickname is not in the list if it is not.

    
23.03.2018 / 22:24