Pular para o conteúdo

    Capítulo 13, Básico

    Entrada, saída e operadores

    Com `print`, `input` e os operadores você já escreve programas que conversam com a pessoa e fazem contas.

    Código deste capítulo: basico/cap13_entrada_operadores.py

    print

    O print aceita vários valores e dois parâmetros que eu uso muito: sep (separador) e end (o que vem no fim, a quebra de linha por padrão):

    basico/cap13_entrada_operadores.pylinhas 10 a 12
    print("a", "b", "c", sep="-")
    print("sem quebra", end=" ")
    print("de linha")
    
    Saída
    a-b-c
    sem quebra de linha
    

    input

    O input mostra uma pergunta, espera a pessoa digitar e devolve sempre uma string. Se você precisa de número, converta:

    basico/cap13_entrada_operadores.pylinhas 17 a 19
    nome = input("Qual é o seu nome? ")
    idade = int(input("Quantos anos você tem? "))
    print(f"Olá, {nome}. Em 5 anos você terá {idade + 5} anos.")
    
    Saída
    Qual é o seu nome? Ana
    Quantos anos você tem? 30
    Olá, Ana. Em 5 anos você terá 35 anos.
    

    Nunca confie no que a pessoa digita

    Se alguém digitar trinta, o int() levanta ValueError e o programa cai. No capítulo de exceções eu mostro como validar a entrada sem derrubar o programa.

    Operadores aritméticos

    OperadorOperaçãoExemploResultado
    + - *Soma, subtração, multiplicação10 - 37
    /Divisão (sempre float)10 / 42.5
    //Divisão inteira (arredonda para baixo)10 // 42
    %Resto10 % 42
    **Potência2 ** 8256
    basico/cap13_entrada_operadores.pylinhas 24 a 29
    print(10 / 3)
    print(10 // 3)
    print(-7 // 2)
    print(10 % 3)
    print(2 ** 8)
    print(divmod(17, 5))
    
    Saída
    3.3333333333333335
    3
    -4
    1
    256
    (3, 2)
    

    Cuidado com -7 // 2: a divisão inteira arredonda para baixo, então o resultado é -4, e não -3. O divmod devolve quociente e resto de uma vez só.

    Comparação e operadores lógicos

    As comparações podem ser encadeadas, como na matemática:

    basico/cap13_entrada_operadores.pylinhas 34 a 37
    x = 7
    print(1 < x < 10)
    print(x == 7.0)
    print("a" < "b")
    
    Saída
    True
    True
    True
    

    Os operadores and, or e not têm duas características que a maioria dos cursos não conta. Primeiro, and e or devolvem um dos operandos, não necessariamente True ou False. Segundo, eles fazem curto-circuito: param assim que o resultado está decidido.

    basico/cap13_entrada_operadores.pylinhas 39 a 43
    nome = "" or "anônimo"
    print(nome)
    print(0 and 5)
    print(3 and 5)
    print(not [])
    
    Saída
    anônimo
    0
    5
    True
    

    O idioma valor or padrao é comum para definir um valor padrão. Use com cuidado: ele também troca 0 e "", que podem ser valores válidos.

    Pertencimento e identidade

    Os operadores in e not in perguntam se um item está em uma coleção. Os operadores is e is not perguntam se dois nomes apontam para o mesmo objeto. Use is apenas com None, True e False:

    basico/cap13_entrada_operadores.pylinhas 48 a 50
    print("py" in "python", 3 not in [1, 2])
    valor = None
    print(valor is None, valor is not None)
    
    Saída
    True True
    True False
    

    Atribuição composta e o operador morsa

    Os operadores +=, -=, *=, //= e companhia modificam e atribuem de uma vez. O operador := (chamado de morsa, disponível desde o Python 3.8) atribui dentro de uma expressão:

    basico/cap13_entrada_operadores.pylinhas 55 a 62
    total = 10
    total += 5
    total *= 2
    total //= 4
    print(total)
    
    if (n := len("python")) > 5:
        print(f"{n} caracteres")
    
    Saída
    7
    6 caracteres
    

    Quando uma expressão mistura operadores, a precedência decide a ordem: primeiro **, depois * / // %, depois + -, depois comparações, depois not, and e or. Eu nunca decoro a tabela inteira: uso parênteses sempre que a ordem não é óbvia à primeira leitura.

    Exercício 1

    Converter segundos em horas, minutos e segundos

    Escreva decompor(segundos) que devolva uma tupla (horas, minutos, segundos). Por exemplo, 3725 segundos são (1, 2, 5).