( 0,6 pontos) Faça um programa que receba números inteiros positivos do usuário enquanto ele não digitar
, sem aspas. A seguir leia um inteiro (1 ou 2). Para cada número lido antes de
, aplique a seguinte função presente na biblioteca math (nesse exercício você pode usar apenas essa biblioteca), conforme determinado pelo último número lido, e converta o resultado para inteiro:
- factorial
- sqrt
Imprima a lista resultante.
EXTRAS:
- 0,2 ponto extra: se não usar estruturas de repetição na parte de transformar a lista. Dica: use a função map.
- 0,2 ponto extra: se não usar estruturas condicionais e apenas uma estrutura de repetição. Dica: pesquise sobre lista de funções.
EXEMPLO
Entrada
Saída
5
4
9
7
s
2
EXTRAS:
| Entrada | Saída |
| 5 |
|
| 4 | |
| 9 | |
| 7 | |
| s | |
| 2 |
Passo 1
O que o enunciado pede e quais dados ele fornece.
- Pedido principal: escrever um programa que leia números inteiros positivos do usuário até o usuário digitar exatamente
, e depois leia um inteiro que será ou . Para cada número lido antes de , aplicar uma função da biblioteca math (conforme o último inteiro lido) e converter o resultado para inteiro. Finalmente imprimir a lista resultante. - A escolha das funções é:
- Se o último inteiro for
: usar a função . - Se o último inteiro for
: usar a função .
- Se o último inteiro for
- Saída esperada: uma lista Python contendo os resultados (cada resultado convertido para inteiro) na mesma ordem dos números lidos.
- Observações do enunciado: pode usar apenas a biblioteca math para as operações matemáticas; há extras se transformar a lista sem laços (usar
) e se evitar estruturas condicionais usando uma lista de funções.
Passo 2
Estratégia de leitura dos dados (etapa que usa repetição para ler até
).
- Como os valores vão sendo digitados um por linha até aparecer
, a forma natural é usar um laço que repete leitura de linha até encontrar a string . - Em cada iteração, vamos:
- Ler uma linha e aplicar
para tirar espaços em branco nas pontas. - Comparar com
. Se for igual, interromper o laço. - Caso contrário, converter a string lida para inteiro com
e adicionar a uma lista chamada, por exemplo, .
- Ler uma linha e aplicar
- Ao final desse laço teremos a lista
com todos os inteiros positivos lidos, na ordem.
Passo 3
Explicando as funções da biblioteca math que serão usadas (a parte de “ensinar a matéria”).
- math.factorial:
- Em Python,
calcula o fatorial de , definido por para inteiros . - Exemplo:
retorna . - Observação:
já retorna um inteiro quando a entrada é inteiro.
- Em Python,
- math.sqrt:
- Em Python,
retorna a raiz quadrada de como um número de ponto flutuante. - Exemplo:
retorna . - Como precisamos converter o resultado para inteiro, usaremos
sobre o valor retornado por . Em Python, produz (trunca a parte decimal), e produz .
- Em Python,
Passo 4
Como aplicar a função escolhida a cada elemento da lista — opção com
(extra: sem laços na transformação).
- A transformação “aplicar uma função a cada elemento da lista e obter outra lista” é exatamente o caso de uso de
. - Sintaxe básica:
cria um iterador que aplica a cada elemento de . - Como queremos assegurar a conversão para inteiro do resultado de
, podemos usar uma função anônima (lambda) do tipo . - Exemplo genérico:
-
- Isso produz a lista final
sem usar um laço explícito na etapa de transformação, atendendo ao extra de .
-
Passo 5
Como escolher a função sem usar condicionais (extra: lista de funções).
- Para não escrever
, podemos montar uma lista (ou tupla) de funções: -
- O inteiro lido (
ou ) serve como índice deslocado em . Como índices em Python começam em , usamos . - Assim não há necessidade de estruturas condicionais para selecionar a função: basta indexar a lista de funções. Isso atende ao segundo extra se fizermos apenas um laço (o da leitura) e nenhuma outra condição para escolha.
Passo 6
Detalhes importantes de implementação e cuidados (para fazer na prova sem confusão).
- Tratamento de entrada: ao ler cada linha, compará-la exatamente com
. Não pedir que o usuário escreva algo adicional. - Conversão segura: ao converter a linha para inteiro, assumir que o enunciado garante que são inteiros positivos até
. Se quiser, na prática, poderia validar com , mas isso não é exigido aqui. - Conversão final para inteiro:
- Para
, o resultado já é inteiro; é redundante mas seguro. - Para
, trunca a parte decimal (ex.: vira ).
- Para
- Impressão: exibir a lista Python no formato padrão, por exemplo
. Usar .
Passo 7
Colocando tudo junto — fluxo do programa em palavras:
- Criar lista vazia
. - Repetir:
- Ler linha, fazer
. - Se
então parar o laço. - Caso contrário, converter com
e fazer .
- Ler linha, fazer
- Ler a escolha com
. - Montar
e selecionar . - Fazer a transformação sem laços explícitos:
. - Imprimir
.
Resposta
import math
nums = []
while True:
s = input().strip()
if s == 's':
break
nums.append(int(s))
choice = int(input().strip())
funcs = [math.factorial, math.sqrt]
f = funcs[choice - 1]
res = list(map(lambda x: int(f(x)), nums))
print(res)