Dúvida em estrutura de repetição

Estou com dúvidas em estrutura de repetição. A questão é informar um número int correspondendo a quantidade de vezes que eu irei informar outros números int aleatórios.
feito isso, o código deve ler estes números aleatórios e identificar qual é o maior. Identificado o maior desta sequência, se numero <10 print nivel 1; se numero >=10 and numero<=20 print nivel 2; se numero >20 print nivel 3. O problema é que o código não está printando o nível, mas sim, o valor máximo.

EXEMPLO DE ENTRADA E SAÍDA:

Digite aqui o número de lesmas capturadas de 1 a 500: 4
Digite a velocidade da lesma: 55
Digite a velocidade da lesma: 2
Digite a velocidade da lesma: 3
Digite a velocidade da lesma: 15
A lesma de maior nível é nível 55

CÓDIGO

lista =[]
L = int(input("Digite aqui o número de lesmas capituradas de 1 a 500: "))

for c in range(1,L+1):
lista.append(int(input("Digite a velocidade da lesma: ")))
if max(lista)<10:
nivel1=max(lista)
nivel=nivel1
elif max(lista)>=10 and max(lista)<20:
nivel2=max(lista)
nivel=nivel2
elif max(lista)>=20:
nivel3=max(lista)
nivel=nivel3
print(“A lesma de maior nível é nível {}”.format(nivel))

Desde já, muito obrigado!

Primeiro, não chame max várias vezes. Cada vez que max é chamada, ela percorre toda a lista para encontrar o maior.

Claro que para listas pequenas não será um problema tão grande assim, mas se tiver muitos dados, isso pode começar a fazer diferença. De qualquer forma, é melhor calcular o valor apenas uma vez.

Enfim, o problema é que você está setando o valor de nivel1, nivel2, etc, para ser o maior valor da lista, e depois você joga esse valor em nivel. Mas se a ideia é que o nível seja 1, 2 ou 3, então ficaria assim:

qtd = int(input("Digite aqui o número de lesmas capturadas de 1 a 500: "))
lista = []
for _ in range(qtd):
    lista.append(int(input("Digite a velocidade da lesma: ")))

maior = max(lista)
if maior < 10:
    nivel = 1
elif maior <= 20:
    nivel = 2
else:
    nivel = 3

print(f'A lesma de maior nível tem velocidade {maior} e é nível {nivel}')

Veja também que os if's podem ser simplificados.

O primeiro if vê se é menor que 10.

Se não entrou no primeiro if, é porque com certeza é maior ou igual a 10, então não preciso verificar isso de novo no elif, é redundante e desnecessário. Eu só preciso verificar se é menor ou igual a 20.

E se não entrou no elif é porque com certeza é maior que 20 (pois se não fosse, teria entrado no if ou no elif), então não preciso verificar isso de novo, e somente um else é o bastante.

Dentro do if/elif/else eu só mudo o valor do nível, e no final imprimo. E para imprimir, usei f-string, disponível a partir do Python 3.6 (mas também pode usar format se quiser).

1 curtida

E ao colocar código no fórum, não esqueça de formatá-lo, basta selecioná-lo e usar o botão </> do editor:

Em Python isso é mais importante ainda, já que a identação é parte da sintaxe e um espaço a mais pode fazer toda a diferença…

Boa tarde, Galera
Alguém pode me dar um help, por favor!

Não consigo disparar e-mails com “Cc” Cco" o e-mail só chega pra uma pessoa, o que estou fazendo de errado :smile: weary:

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib


msg = MIMEMultipart()

message = "Teste Python"
msg["Subject"] = "Example"
msg["From"] = "email servidor"
msg["To"] = "email,email"
msg["Cc"] = "email,email"
body = MIMEText("Teste Email Cc")
password = "xxxx"
msg.attach(body)
msg['To'] = "leandro.com.br"
msg['Subject'] = "teste"

msg.attach(MIMEText(message, 'plain'))

server = smtplib.SMTP('smtp.office365.com: 587')
server.starttls()
server.login(msg['from'], password)
server.sendmail(msg['From'], msg['To'].slit(",") + msg["Cc"].split(","), msg.as_string())
server.quit()

Muito obrigado! Você tem me ajudado muito. Obrigado, também, pelas dicas do If e também pela ajuda na formatação do scritp! hahahh Eu não sabia :sweat_smile::sweat_smile: