Aulas do bloco

← Aulas

PythonAula 1125/08/20261h38

Match-case e RPG de decisões

Retoma if/elif/else com input(), isdigit() e int() para validar número antes de converter. Troca aquela cadeia de dia == 0, dia == 1... por match/case para decidir por igualdade. Destrava case _ como saída para inválido, pass para bloco vazio e um mini RPG com ternário, random.randint() e match com guard.

O que foi falado

  1. is vs == e teste direto de bool

    00:05:50

    == compara valores, is compara identidade na memória, então usar is para número ou texto pode falhar. Se a variável já é True ou False, dá para escrever if vinho em vez de if vinho == True. É a forma mais curta e evita comparação à toa. O resultado de is neste exemplo não deve ser usado como teste de igualdade de valores.

    Python
    a = 1000
    b = 1000
    print(a == b)
    print(a is b)

    Saída

    True
    True
  2. Validar input() com .isdigit() e int()

    00:22:33

    input() sempre devolve string, então "6" não é 6. .isdigit() testa se o texto não vazio é formado só por dígitos. Nos exemplos da aula, com dígitos de 0 a 9, o teste vem antes de int(). Depois da conversão, 0 <= dia <= 6 confere o intervalo, como dia >= 0 and dia <= 6.

    Python
    texto = "6"
    print(texto.isdigit())
    dia = int(texto)
    print(0 <= dia <= 6)

    Saída

    True
    True
  3. pass para bloco vazio não quebrar

    00:31:06

    Python não aceita if sem nada dentro e acusa erro de indentação. pass é a instrução que não faz nada e serve só para ocupar o bloco enquanto o código ainda não está pronto. Depois é só trocar pass pelo comando de verdade.

    Python
    dia = 3
    if dia == 3:
        pass
    else:
        print("outro dia")
  4. Trocar if-elif por match-case

    00:51:23

    A cadeia if dia == 0, elif dia == 1... funciona mas repete a variável toda hora. Com match dia_numero cada case 0, case 1 já testa igualdade direto. Fica mais curto para quando a decisão é só comparar um valor com vários fixos.

    Python
    dia_numero = 0
    match dia_numero:
        case 0:
            print("domingo")
        case 6:
            print("sábado")

    Saída

    domingo
  5. case _ como else e sem break

    01:00:16

    case _ é o curinga que entra quando nenhum case casou, igual ao else do match. Por isso dá para apagar o if de intervalo e deixar o inválido cair no case _. Diferente de outras linguagens, Python não continua para o próximo case, então não precisa de break.

    Python
    dia_numero = 67
    match dia_numero:
        case 0:
            print("domingo")
        case _:
            print("dia inválido")

    Saída

    dia inválido
  6. RPG com ternário, randint() e match com guard

    01:30:29

    A escolha do RPG é lida com int(x) if x.isdigit() else None, que evita crash na conversão e guarda None quando não é dígito. random.randint(1, 20) sorteia o D20 incluindo os dois extremos. O destino usa match com guard tipo case 0 if d20 >= 10, que só entra se casar o valor e a condição extra for True.

    Python
    import random
    x = "2"
    opcao = int(x) if x.isdigit() else None
    print(opcao)
    print(random.randint(1, 20))

Perguntas que valem a pena

O que isdigit() verifica?00:24:15

Testa se a string não vazia é formada só por dígitos. Nos exemplos da aula, com dígitos de 0 a 9, isso é usado antes de converter a entrada com int().

Por que usar pass em um bloco vazio?00:34:48

Porque bloco vazio é sintaxe inválida e gera erro de indentação.

Para que serve match-case?00:54:46

É uma ferramenta específica para comparar um valor com outros e decidir, não de propósito geral como if-else.

Dá para tirar a checagem com 0 <= dia <= 6 se os case já cobrem os dias?00:58:49

Sim, simplifica e reduz alinhamento deixando os inválidos para o case _.

Precisa de break no match-case?01:02:02

Não, Python não tem fall-through no match-case.

Conceitos da aula

  • input()
  • isdigit()
  • validação de entrada
  • comparação encadeada
  • if/else
  • elif
  • match-case
  • case _
  • pass
  • operador ternário
  • random.randint()
  • guard

Reforce este assunto

10 exercíciosComeçar →