Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] 'set' object is not subscriptable

No exercício "verificando permissões", consegui fazer com que o código funcione, da seguinte maneira:

def verificar_permissoes():
    permissoes_principais = {"leitura", "escrita", "execução", "compartilhamento"}
    permissoes_solicitadas = set(input("Digite as permissões necessárias separadas por vírgula: ").lower().split(", ")) 

    if permissoes_solicitadas.issubset(permissoes_principais):
        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')

Ao verifica a opinião do instrutor, há um trecho onde, em teoria, é removido os espaços dos valores:

for i in range(len(permissoes_principais)):  

    permissoes_principais[i] = permissoes_principais[i].strip() 

for i in range(len(permissoes_solicitadas)):  

    permissoes_solicitadas[i] = permissoes_solicitadas[i].strip() 

Mas ao executar (inclusive copiando todo o código a opinião), é apresentado o seguinte erro:

TypeError: 'set' object is not subscriptable

Considerando que o exercício pede para criar uma lista e criamos conjuntos, com base no set(), queria entender se a remoção dos espaços é possível da forma descrita no código ou a solução precisa ser aplicada de outra forma.

1 resposta
solução!

Oi, Mateus! Tudo bem?

Entendi sua dúvida e vou tentar te ajudar. O erro que você está enfrentando, TypeError: 'set' object is not subscriptable, ocorre porque conjuntos (set) em Python não suportam indexação, ou seja, você não pode acessar elementos de um set usando índices como em listas.

No seu caso, a remoção dos espaços pode ser feita de maneira diferente, como o exercício pede para trabalhar com listas, você pode converter a entrada em uma lista antes de remover os espaços, como no exemplo abaixo:

def verificar_permissoes():
    permissoes_principais = ["leitura", "escrita", "execução", "compartilhamento"]
    permissoes_solicitadas = input("Digite as permissões necessárias separadas por vírgula: ").lower().split(", ")

    # Removendo espaços em branco
    permissoes_principais = [permissao.strip() for permissao in permissoes_principais]
    permissoes_solicitadas = [permissao.strip() for permissao in permissoes_solicitadas]

    # Convertendo para conjuntos para verificar se é um subconjunto
    if set(permissoes_solicitadas).issubset(set(permissoes_principais)):
        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')

verificar_permissoes()

Neste exemplo, mantemos as permissões principais como uma lista e convertemos as permissões solicitadas em uma lista também, removendo os espaços em branco de cada elemento. Depois, convertemos ambas as listas em conjuntos apenas para realizar a verificação de subconjunto.

Espero ter ajudado!

Um forte abraço e bons estudos!