Prazo de entrega recomendado:
Nesta tarefa, vamos exercitar várias estruturas elementares em Python, como operações condicionais, comandos de repetição e diversos usos de variáveis.
Como uma excelente resolvedora de problemas, você foi a pessoa convidada para organizar o Leilão dos Colecionadores de Colecionáveis, que reúne os principais colecionadores de Algoritmópolis.
Atenção: no final da página são dadas algumas dicas de Python.
a) Muitos participantes
Como se pode imaginar, o leilão chama a atenção de muitas pessoas em toda a região, afinal, todos os produtos leiloados formam uma coleção de grande valor colecionável. Por isso, a comissão organizadora criou uma coleção de regras que determinam quais pessoas poderão participar do evento.
Uma pessoa pode participar se já for um veterano em leilões e tiver participado
de pelo menos Q
eventos anteriores. Também poderão participar aqueles que
tiverem dado o lance vencedor pelo menos V
vezes em leilões passados, mas
apenas se o valor médio dos V
maiores lances for pelo menos M
.
Além disso, para introduzir novos participantes, a comissão
organizadora convida pessoas cujo o nome começa com uma entre duas
letras determinadas, variáveis a
e b
, que mudam em em cada edição
do evento,
A sua primeira tarefa será criar um programa
verificar-participacao.py
que ajuda um morador de Algoritmópolis a
saber se poderá participar do evento. Para este ano, presuma que
Q = 3
, V = 2
, M = 120.45
, a = 'D'
e b = 'R'
.
O programa deverá solicitar as informações do morador de acordo com o
exemplo de execução abaixo e deverá imprimir
Parabéns! Você pode se inscrever.
ou
Infelizmente, você não poderá participar nesse ano.
, dependendo se o
morador puder ou não participar.
user@host:~/ra123456/tarefa03/$ python3 verificar-participacao.py
Qual o seu nome: Maria
Quantos leilões já participou antes: 4
Quantos lances você já venceu: 1
Parabéns! Você pode se inscrever.
Quando o morador tiver vencido pelo menos dois lances, o programa também deve perguntar os valores dos dois maiores lances. Lembre-se de que os lances são valores reais, com centavos separados por um ponto.
user@host:~/ra123456/tarefa03/$ python3 verificar-participacao.py
Qual o seu nome: João
Quantos leilões já participou antes: 2
Quantos lances você já venceu: 2
Lance vencedor 1: 120.00
Lance vencedor 2: 40.50
Infelizmente, você não poderá participar nesse ano.
b) Filtrando participantes
Uma vez passado o prazo de inscrição, você informará à comissão
organizadora o nome de todas as pessoas que poderão participar do
leilão. Para isso, você precisa criar um programa
filtrar-participantes.py
que receberá como entrada os dados de todos
os formulários de inscrição, de acordo com a descrição abaixo.
Entrada
A primeira linha tem o formato N Q V M a b
, onde N
é o número de
inscritos e as demais variáveis estão descritas acima. Em seguida,
seguem concatenados os dados dos N
inscritos. Para cada um dos
inscritos, temos:
- uma linha com formato
nome q v
, ondeq
é o número de participações em edições passadas ev
é o número de lances vencedores em leilões passados; - uma sequência de
v
linhas contendo os valores dos lances vencedores.
2 5 3 200.20 F K
Lélia 8 3
350.20
200.10
250.00
Carlos 4 2
178.83
280.59
Saída
A saída contém os nomes das pessoas que satisfazem os critérios da comissão organizadora, um por linha.
Lélia
c) Lances e mais lances
A parte principal de um leilão dá-se quando um produto é posto à mostra e as pessoas dão lances, sempre crescentes. Ao início, um lance mínimo é definido, de forma que o lance vencedor deve ter pelo menos este valor. Um lance é considerado válido se ele for maior ou igual ao ao lance mínimo e for maior que o melhor lance anterior. Aos final do leilão, o licitante com maior lance vence.
Você é o responsável pelo programa lances.py
que coordenará o
leilão. Esse programa recebe diversos comandos, cada um representado
por uma letra:
- Início (
I
): informa o código do produto e seu lance mínimo; - Lance (
L
): informa o nome da pessoa e seu lance; - Status (
S
): pede para o sistema o status do leilão; - Fim (
F
): pede para o sistema finalizar o leilão.
Entrada
A primeira linha será sempre um comando I
. Esse comando é seguido
por uma linha com o codigo_produto
e o lance_minimo
.
Em seguida, são executados diversos comandos L
ou S
, sem ordem
definida. Uma linha com comando L
é seguida por uma linha com o
nome
do licitante e o valor de seu lance
. Uma linha com comando
S
não contém parâmetros. Ao final, do arquivo, há um comando F
,
representando o fim do leilão.
I
1729 100.40
L
Karen 101.00
L
Pedro 102.00
S
L
Luiza 102.10
S
F
Saída
Cada comando produzirá uma saída:
-
I
: o comando de início deve ser respondido comBem-vindo ao Leilão de Algoritmópolis! Produto X com lance mínimo R$ Y
, ondeX
é o código do produto eY
é o lance mínimo; -
L
: o comando de lance deve ser respondido comnome deu um lance de R$ X
, ou comLance inválido de nome
, caso seja inválido, ondenome
é o nome da pessoa eX
o valor do seu lance; -
S
: o comando de status deve ser respondido comStatus do Leilão do Produto X
na primeira linha, ondeX
é o código do produto; na segunda linha, se houve algum lance válido, informa-seY lances até agora
, ondeY
é a quantidade de lances válidos até o momento, caso contrário, informa-seNão houve lances
; na terceira linha, se houve algum lance válido, deve-se ternome deu o melhor lance, de valor R$ Z
, ondenome
é o nome da pessoa eZ
o valor do seu lance; -
F
: o comando de fim deve ser respondido comLeilão finalizado com X lances
na primeira linha, ondeX
é a quantidade de lances válidos; na segunda linha, deve-se ternome venceu com o lance de valor R$ Y
ouNão houve vencedor
, ondenome
é o nome da pessoa eY
o valor do seu lance.
Bem-vindo ao Leilão de Algoritmópolis! Produto 1729 com lance mínimo R$ 100.40
Karen deu um lance de R$ 101.00
Pedro deu um lance de R$ 102.00
Status do Leilão do Produto 1729
2 lances até agora
Pedro deu o melhor lance, de valor R$ 102.00
Luiza deu um lance de R$ 102.10
Status do Leilão do Produto 1729
3 lances até agora
Luiza deu o melhor lance, de valor R$ 102.10
Leilão finalizado com 3 lances
Luiza venceu com o lance de valor R$ 102.10
Dicas
-
Para receber como entrada uma quantidade fixa de variáveis que estão na mesma linha, utilize a função abaixo, onde são recebidos três dados. Lembre-se que estes dados são lidos como string.
dado1, dado2, dado3 = input().split()
-
Para formatar um
float
com exatamente duas casas decimais, faça:print(f"{numero:.2f}")
Correção
Esta tarefa será avaliada pelo corretor automático e por um monitor, mas sem apresentação do aluno. Lembre-se de que o monitor poderá confirmar ou revisar a nota atribuída automaticamente. Atente-se para o relatório de correção da sua tarefa! Procure ler e entender o feedback dado pelo monitor e procure corrigir os problemas identificados nesta e em tarefas futuras. Se tiver dúvidas, não deixe de procurar atendimento.
A pasta da tarefa no seu repositório vem inicialmente com um arquivo
nao_corrigir.txt
que serve para indicar que você ainda está
trabalhando nesta tarefa. Você pode realizar quantos pushes quanto
forem necessários. O monitor só irá corrigir sua tarefa quando esse
arquivo for removido do repositório.