1
resposta

[Dúvida] Por que o meu código não deu certo?

permissao_principal = ['leitura', 'escrita', 'execução', 'compartilhamento']

permissao_solicitada = (input("Digite a permissão solicitada: ")).split(", ") 

if set(permissao_solicitada).issubset(set(permissao_principal)):
    print("As permissões solicitadas fazem parte das permissões principais")

    
if not set(permissao_solicitada).issubset(set(permissao_principal)):
    print("As permissões solicitadas não fazem parte das permissões principais.")

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
1 resposta

Oi!

O seu código, Kauane, está correto em termos de lógica, e por isso ele realmente funciona no exemplo mostrado.
Mas o “problema” que alguns alunos enfrentam nesse tipo de exercício costuma estar relacionado à forma como o input() é digitado e como o .split(", ") separa os itens. Vamos entender o porquê:

O que o código faz:

Ele define uma lista com permissões principais:

permissao_principal = ['leitura', 'escrita', 'execução', 'compartilhamento']

Depois lê uma entrada:

permissao_solicitada = input("Digite a permissão solicitada: ").split(", ")

e verifica se todas as permissões digitadas fazem parte das principais:

if set(permissao_solicitada).issubset(set(permissao_principal)):
    print("As permissões solicitadas fazem parte das permissões principais")
else:
    print("As permissões solicitadas não fazem parte das permissões principais")

O detalhe do .split(", ")
O método .split(", ") só funciona corretamente se o usuário digitar a vírgula seguida de espaço (exatamente assim: , ).
Por exemplo:

Funciona:

execução, leitura

Não funciona:

execução,leitura

ou

execução , leitura

Porque nesses casos, o texto é dividido de forma diferente, e as palavras ficam com espaços extras, o que faz com que o issubset() não encontre correspondência exata.

Como corrigir definitivamente:

Para tornar o código mais robusto (independente de como o usuário digite), você pode remover espaços extras com strip() e dividir apenas pela vírgula:

permissao_principal = ['leitura', 'escrita', 'execução', 'compartilhamento']

entrada = input("Digite a(s) permissão(ões) solicitada(s): ")
permissao_solicitada = [p.strip() for p in entrada.split(",")]

if set(permissao_solicitada).issubset(permissao_principal):
    print("As permissões solicitadas fazem parte das permissões principais")
else:
    print("As permissões solicitadas não fazem parte das permissões principais")

Resuminho:

  • O código está conceitualmente correto.
  • O erro (quando ocorre) é por formatação da entrada.
  • Usar split(",") e strip() evita problemas de espaço.

Se a pessoa digitar apenas uma permissão (como execução), o código original já funciona, mas se digitar mais de uma, é aí que o ajuste acima faz diferença.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!