Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Criar listas com dados inseridos pelo usuário

Como criar uma lista com os nomes inseridos pelos usuários para depois usar a função random para fazer um sorteio?

import time
import random
print('<>'*12, '\033[1;36m RODÍZIO SEMANAL DPE \033[m','<>'*12)
print('\033[1;33m Programa criado para criar escala de plantão durante a pandemia do COVID 19 \033[m')
servidor = 0
for servidor in range(1, 10):
    nome_servidor = input('Digite o nome do {}° servidor:\n'.format(servidor))
7 respostas
solução!

Oiii César, tudo bem?

Para resolver isso, você pode criar uma lista vazia e adicionar na lista o nome que o usuário digitar. Por exemplo:

import time
import random
print('<>'*12, '\033[1;36m RODÍZIO SEMANAL DPE \033[m','<>'*12)
print('\033[1;33m Programa criado para criar escala de plantão durante a pandemia do COVID 19 \033[m')
servidor = 0
servidores = [] # Lista vazia
for servidor in range(1, 11):
    nome_servidor = input('Digite o nome do {}° servidor:\n'.format(servidor))
    servidores.append(nome_servidor) # Adicionando o resultado na lista

print(f'Lista com o nome dos servidores: {servidores}')

E para fazer o sorteio, pode utilizar a random.sample, pois caso precise sortear mais de uma pessoa, essa função garante que não serão nomes que já foram sorteados(não há reposição). Você pode especificar a quantidade de pessoas sorteadas no parâmetro k dessa função. Exemplo:

sorteados = random.sample(servidores, k=2)
print(f'Os sorteados foram: {sorteados}')

Exemplo de saída esperada:

Lista com o nome dos servidores: ['Ana', 'Maria', 'Jose', 'Gabriela', 'Nádia', 'Fabio', 'Fabiana', 'Arthur', 'César', 'Rafael']
Os sorteados foram: ['Gabriela', 'Fabio']

Uma observação: se você deseja digitar 10 nomes, terá que fazer um range no for de 1 a 11, pois se trata de um intervalo aberto, a última posição não é inclusiva, nesse caso o for irá de 1 a 10. Da forma como o seu código está, o for irá de 1 a 9.

Qualquer dúvida é só falar, estou a disposição. Abraços e bons estudos!

Muito obrigado pela ajuda!! Sensacional! Eu havia pensado e testado uma solução parecida, mas errei em algo e vou verificar. Muito obrigado Nádia.

Nádia, você poderia me indicar algum livro de Python para que eu possa usar como suporte ao curso? Algo que possa me dar mais base?

César, boa tarde! Recomendo o livro Pense em Python (2ª ed.), de Allen B. Downey, a tradução desse livro é de código aberto e está disponível neste link.

Qualquer dúvida fique a vontade para postar aqui no fórum, estaremos a disposição.

Nádia, minha versão final do programa de sorteio de rodízio ficou assim. Obrigado pelas dicas.

import time
import random
print('<>'*8, '\033[1;36m RODÍZIO DE SERVIDORES \033[m','<>'*8)
print('\033[1;33m Programa criado para criar escala de plantão durante a pandemia do COVID 19 \033[m')
servidor = 0
lista_servidor = []
for c in range(1,7):
    nome_servidor = input("Digite o nome do {}° servidor: \n".format(servidor + 1))
    servidor += 1
    lista_servidor.append(nome_servidor)
print(lista_servidor)
time.sleep(2)
random.shuffle(lista_servidor)
time.sleep(2)
sorteados = random.sample(lista_servidor, k= 5)
time.sleep(2)
print('A escala da semana é: {}'.format(sorteados))

print('\033[1;32m <> \033[m'*20)

César, parabéns, você está indo em um ótimo caminho. E caso queira imprimir os nomes fora do formato de lista:

['Ana', 'Maria', 'Jose', 'Gabriela', 'Nádia', 'Fabio', 'Fabiana']

Basta fazer o unpacking da lista usando o operador asterisco. Veja:

print(*lista_servidor)
print('A escala da semana é:',*sorteados)
# print('A escala da semana é: {} {} {} {} {}'.format(*sorteados)) similar a linha acima

Resultado:

image

Abraços e bons estudos, César.

Show de Bola!! vou testar já já Obrigado Nádia por mais uma dica!!