Interação com o usuário

Avatar do usuário
bernardino
Site Admin
Mensagens: 795
Registrado em: 28 Ago 2020, 15:11

Interação com o usuário

Mensagem por bernardino »

Nesta seção, você aprenderá a falar com um computador: você vai se familiarizar com a função input (), realizar conversões de tipo e aprender a usar operadores de string.

A função input()

Vamos agora apresentar uma função completamente nova, que parece ser um reflexo da boa e velha função print().

Por quê? Bem, print() envia dados para o console.

A nova função obtém dados dela.

print() não tem resultado utilizável. O significado da nova função é retornar um resultado muito útil.

A função é chamada de input(). O nome da função diz tudo.

A função input() é capaz de ler os dados inseridos pelo usuário e retornar os mesmos dados para o programa em execução.

O programa pode manipular os dados, tornando o código verdadeiramente interativo.

Praticamente todos os programas leem e processam dados. Um programa que não recebe a entrada de um usuário é um programa surdo.

Dê uma olhada no nosso exemplo:

Código: Selecionar todos

print("Conta-me qualquer coisa...")
anything = input()
print("Hum...", anything, "... Realmente?")
Ele mostra um caso muito simples de uso da função input().

Nota:
  • O programa solicita que o usuário insira alguns dados do console (provavelmente usando um teclado, embora também seja possível inserir dados usando voz ou imagem);
  • a função input() é invocada sem argumentos (essa é a maneira mais simples de usar a função); a função mudará o console para o modo de entrada; você verá um cursor piscando e poderá inserir algumas teclas, finalizando pressionando a tecla Enter; todos os dados inseridos serão enviados ao seu programa através do resultado da função;
  • nota: você precisa atribuir o resultado a uma variável; isso é crucial - perder esta etapa fará com que os dados inseridos sejam perdidos;
  • em seguida, usamos a função print() para exibir os dados que obtemos, com algumas observações adicionais.
Execute o código e deixe a função mostrar o que ela pode fazer por você.

Código: Selecionar todos

print("Conta-me qualquer coisa...")
anything = input()
print("Hum...", anything, "... Realmente?")
funcao_input.png
funcao_input.png (18.34 KiB) Exibido 285 vezes
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Avatar do usuário
bernardino
Site Admin
Mensagens: 795
Registrado em: 28 Ago 2020, 15:11

Re: Interação com o usuário

Mensagem por bernardino »

A função input() com um argumento

A função input() pode fazer outra coisa: pode solicitar ao usuário sem qualquer ajuda de print().

Modificamos um pouco nosso exemplo, veja o código:

Código: Selecionar todos

anything = input("Conta-me qualquer coisa...")
print("Hum...", anything, "...Realmente?")
Nota:
  • a função input() é invocada com um argumento ‒ é uma string contendo uma mensagem;
  • a mensagem será exibida no console antes que o usuário tenha a oportunidade de digitar qualquer coisa;
  • input() fará seu trabalho.
Essa variante da invocação input() simplifica o código e o torna mais claro.
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Avatar do usuário
bernardino
Site Admin
Mensagens: 795
Registrado em: 28 Ago 2020, 15:11

Re: Interação com o usuário

Mensagem por bernardino »

O resultado da função input()

Já dissemos isso, mas deve ser afirmado de forma inequívoca mais uma vez: o resultado da função input() é uma string.

Uma string contendo todos os caracteres que o usuário insere no teclado. Não é um inteiro ou um float.

Isso significa que você não deve usá-lo como argumento de nenhuma operação aritmética, por exemplo, você não pode usar esses dados para elevá-los ao quadrado, dividi-los por qualquer coisa ou dividir qualquer coisa por eles.

Código: Selecionar todos

anything = input("Digite um número: ")
something = anything ** 2.0
print(anything, "elevado a 2 é", something)
Reprodução de erro:
resultado_input_aritmetica.png
resultado_input_aritmetica.png (22.19 KiB) Exibido 279 vezes
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Avatar do usuário
bernardino
Site Admin
Mensagens: 795
Registrado em: 28 Ago 2020, 15:11

Re: Interação com o usuário

Mensagem por bernardino »

A função input() - operações proibidas

Veja o código no editor. Execute-o, digite qualquer número e pressione Enter.

Código: Selecionar todos

# Testando uma mensagem TypeError.

anything = input("Digite um número: ")
something = anything ** 2.0
print(anything, "elevado a 2 é", something)
no_input_aritmetica.png
no_input_aritmetica.png (27.24 KiB) Exibido 278 vezes
O que acontece? O Python deveria ter lhe dado a seguinte saída:

Código: Selecionar todos

Traceback (most recent call last):
File ".main.py", line 4, in
something = anything ** 2.0
TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'float'
A última linha da frase explica tudo - você tentou aplicar o operador ** a 'str' (string) acompanhado de 'float'.

Isso é proibido.

Isso deve ser óbvio - você pode prever o valor de "ser ou não ser" elevado à potência de 2?

Nós não podemos. Python também não.

Já caímos em um impasse? Há uma solução para esse problema? Claro que sim.
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Avatar do usuário
bernardino
Site Admin
Mensagens: 795
Registrado em: 28 Ago 2020, 15:11

Re: Interação com o usuário

Mensagem por bernardino »

Conversão de tipo (tipo de conversões)

O Python oferece duas funções simples para especificar um tipo de dados e resolver esse problema: aqui estão eles: int() e float().

Seus nomes são de comentários automáticos:
  • a função int() usa um argumento (por exemplo, uma string: int(string)) e tenta convertê-lo em um número inteiro; se falhar, o programa inteiro também falhará (há uma solução para essa situação, mas mostraremos isso um pouco mais tarde);
  • a função float() usa um argumento (por exemplo, uma string: float(string)) e tenta convertê-la em um flutuante (o resto é o mesmo).
Isso é muito simples e muito eficaz. Além disso, você pode chamar qualquer uma das funções passando os resultados de input() diretamente para elas. Não há necessidade de usar nenhuma variável como armazenamento intermediário.

Implementamos a ideia no editor. Dê uma olhada no código.

Você pode imaginar como a string inserida pelo usuário flui de input() para print()?

Tente executar o código modificado. Não se esqueça de inserir um número válido.

Verifique alguns valores diferentes, pequeno e grande, negativo e positivo. Zero também é uma boa entrada.

Código: Selecionar todos

anything = float(input("Digite um número: "))
something = anything ** 2.0
print(anything, "elevado a 2 é", something)
conversao_de_tipo.png
conversao_de_tipo.png (18.56 KiB) Exibido 274 vezes
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Avatar do usuário
bernardino
Site Admin
Mensagens: 795
Registrado em: 28 Ago 2020, 15:11

Re: Interação com o usuário

Mensagem por bernardino »

Mais informações sobre input() e conversão de tipos

Ter uma equipe composta por três input()-int()-float() abre muitas novas possibilidades.

Você poderá escrever programas completos, aceitando dados na forma de números, processando-os e exibindo os resultados.

Obviamente, esses programas serão muito primitivos e não muito utilizáveis, pois não podem tomar decisões e, portanto, não são capazes de reagir de forma diferente a situações diferentes.

Isso não é realmente um problema; mostraremos como superar isso em breve.

Nosso próximo exemplo se refere ao programa anterior para encontrar o comprimento de uma hipotenusa. Vamos executá-lo e torná-lo capaz de ler os comprimentos das pernas do console.

Confira a janela do editor - é isso que parece agora:

Código: Selecionar todos

leg_a = float(input("Insira o comprimento da primeira perna: "))
leg_b = float(input("Insira o comprimento da segunda perna: "))
hypo = (leg_a**2 + leg_b**2) ** .5
print("O comprimento da hipotenusa é", hypo)
comprimento_da_hipotenusa.png
comprimento_da_hipotenusa.png (27.97 KiB) Exibido 273 vezes
O programa solicita ao usuário o comprimento de ambas as pernas, avalia a hipotenusa e imprime o resultado. Execute-o e tente inserir alguns valores negativos.

O programa, infelizmente, não reage a esse erro óbvio. Vamos ignorar essa fraqueza por enquanto. Voltaremos em breve.

Observe que, no programa que você pode ver no editor, a variável hypo é usada para apenas um objetivo - para salvar o valor calculado entre a execução da linha de código adjacente.

Como a função print() aceita uma expressão como seu argumento, você pode remover a variável do código.

Bem assim:

Código: Selecionar todos

leg_a = float(input("Insira o comprimento da primeira perna: "))
leg_b = float(input("Insira o comprimento da segunda perna: "))
print("O comprimento da hipotenusa é", (leg_a**2 + leg_b**2) ** .5)
input_conversao.png
input_conversao.png (26.38 KiB) Exibido 273 vezes
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Avatar do usuário
bernardino
Site Admin
Mensagens: 795
Registrado em: 28 Ago 2020, 15:11

Re: Interação com o usuário

Mensagem por bernardino »

Operadores de string

É hora de voltar para esses dois operadores aritméticos: + e *.

Queremos mostrar que eles têm uma segunda função. Eles são capazes de fazer algo mais do que apenas adicionar e multiplicar.

Já vimos eles em ação, onde seus argumentos são números (flutuantes ou números inteiros, não importa).

Agora, vamos mostrar que eles podem lidar com cadeias de caracteres, embora de uma forma muito específica.

O sinal de + (mais), quando aplicado a duas cadeias de caracteres, torna-se um operador de concatenação:

Código: Selecionar todos

string + string
Ela simplesmente concatena (cola) duas sequências de caracteres em uma. Obviamente, como seu irmão aritmético, ele pode ser usado mais de uma vez em uma expressão e, nesse contexto, se comporta de acordo com a ligação do lado esquerdo.

Em contraste com seu irmão aritmético, o operador de concatenação não é comutativo, ou seja, "ab" + "ba" não é o mesmo que "ba" + "ab".

Não se esqueça - se você quiser que o sinal de + seja um concatenador, não um somador, certifique-se de que ambos os argumentos sejam cadeias.

Você não pode misturar tipos aqui.

Este programa simples mostra o sinal + em seu segundo uso:

Código: Selecionar todos

fnam = input("Posso ter seu primeiro nome, por favor? ")
lnam = input("Posso ter seu sobrenome, por favor? ")
print("Obrigado!.")
print("\nSeu nome é " + fnam + " " + lnam + ".")
input_nome_sobrenome.png
input_nome_sobrenome.png (23.12 KiB) Exibido 272 vezes
Nota: usar + para concatenar strings permite que você construa a saída de uma maneira mais precisa do que com uma função print() pura, mesmo se enriquecida com os argumentos de palavra-chave end= e sep=.

Execute o código e veja se a saída corresponde às suas previsões.

Replicação

O sinal * (asterisco), quando aplicado a uma string e um número (ou um número e uma string, pois permanece comutativo nessa posição) se torna um operador de replicação:

Código: Selecionar todos

string * number
number * string
Ele replica a string o mesmo número de vezes especificado pelo número.

Por exemplo:
  • "James" * 3 gera "JamesJamesJames"
  • 3 * "an" gera "ananan"
  • 5 * "2" (or "2" * 5) gera "22222" (não10!)
Lembre-se

Um número menor ou igual a zero produz uma string vazia.

Este simples programa "desenha" um retângulo, fazendo uso de um antigo operador (+) em um novo papel:

Código: Selecionar todos

print("+" + 10 * "-" + "+")
print(("|" + " " * 10 + "|\n") * 5, end="")
print("+" + 10 * "-" + "+")
input_conversao_tipos.png
input_conversao_tipos.png (14.76 KiB) Exibido 270 vezes
Observe a maneira como usamos os parênteses na segunda linha do código.

Tente praticar para criar outras formas ou sua própria arte!
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Avatar do usuário
bernardino
Site Admin
Mensagens: 795
Registrado em: 28 Ago 2020, 15:11

Re: Interação com o usuário

Mensagem por bernardino »

Conversões de tipo mais uma vez concluídas

str()

Você já sabe como usar as funções int() e float() para converter uma string em um número.

Esse tipo de conversão não é uma via de mão única. Você também pode converter um número em uma string, o que é muito mais fácil e seguro - esse tipo de operação é sempre possível.

Uma função capaz de fazer isso é chamada str():

Código: Selecionar todos

str(number)
Para ser honesto, ele pode fazer muito mais do que apenas transformar números em cadeias, mas isso pode esperar mais tarde.

O triângulo de ângulo direito novamente

Aqui está nosso programa de "ângulo reto" novamente:

Código: Selecionar todos

leg_a = float(input("Insira o comprimento da primeira perna: "))
leg_b = float(input("Insira o comprimento da segunda perna: "))
print("O comprimento da hipotenusa é " + str((leg_a**2 + leg_b**2) ** .5))
conversao_input_float_str.png
conversao_input_float_str.png (27.88 KiB) Exibido 268 vezes
Nós modificamos um pouco para mostrar como a função str() funciona. Graças a isso, podemos passar o resultado inteiro para a função print() como uma string, esquecendo as vírgulas.

Você fez alguns avanços importantes no caminho para a programação em Python.

Você já conhece os tipos de dados básicos e um conjunto de operadores fundamentais. Você sabe como organizar a saída e como obter dados do usuário. Essas são as bases muito fortes do Módulo 3. Mas antes de prosseguirmos para o próximo módulo, vamos fazer alguns laboratórios e recapitular tudo o que você aprendeu nesta seção.
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Avatar do usuário
bernardino
Site Admin
Mensagens: 795
Registrado em: 28 Ago 2020, 15:11

Re: Interação com o usuário

Mensagem por bernardino »

LAB Simples entradas e saídas

Cenário

Sua tarefa é completar o código para avaliar os resultados de quatro operações aritméticas básicas.

Os resultados devem ser impressos no console.

Talvez você não consiga proteger o código de um usuário que deseja dividir por zero. Tudo bem, não se preocupe com isso por enquanto.

Teste seu código ‒ ele produz os resultados esperados?

Não mostraremos nenhum dado de teste - isso seria muito simples.

Código: Selecionar todos

# entre com um valor float para a variável a aqui
# entre com um valor float para a variável b aqui

# imprima o resultado da adição aqui
# imprima o resultado da subtração aqui
# imprima o resultado da multiplicação aqui
# imprima o resultado da divisão aqui

print("\nIsso é tudo, pessoal!")
Solução 1

Código: Selecionar todos

a = float(input("Insira o valor de a: ")) # entre com um valor float para a variável a aqui
b = float(input("Insira o valor de b: ")) # entre com um valor float para a variável b aqui
adicao = a + b
print ("O resultado da adição é: ", adicao) # imprima o resultado da adição aqui
subtracao = a - b
print ("O resultado da subtração é: ", subtracao)# imprima o resultado da subtração aqui
multiplicacao = a * b
print ("O resultado da multiplicação é: ", multiplicacao)# imprima o resultado da multiplicação aqui
divisao = a / b
print ("O resultado da divisão é: ", divisao)# imprima o resultado da divisão aqui

print("\nIsso é tudo, pessoal!")
Solução 2

Código: Selecionar todos

a = float(input("Entre com o primeiro valor: "))
b = float(input("Entre com o segundo valor: "))
print("Adição:", a + b)
print("Subtração:", a - b)
print("Multiplicação:", a * b)
print("Divisão:", a / b)
print("\nIsso é tudo, pessoal!")
lab-entrada-saida.png
lab-entrada-saida.png (32.35 KiB) Exibido 266 vezes
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Avatar do usuário
bernardino
Site Admin
Mensagens: 795
Registrado em: 28 Ago 2020, 15:11

Re: Interação com o usuário

Mensagem por bernardino »

LAB Operadores e Expressões

Cenário


Sua tarefa é completar o código para avaliar a seguinte expressão:
lab-expressao.png
lab-expressao.png (13.28 KiB) Exibido 266 vezes
O resultado deve ser atribuído a y. Tenha cuidado - observe os operadores e mantenha suas prioridades em mente. Não hesite em usar quantos parênteses forem necessários.

Você pode usar variáveis adicionais para encurtar a expressão (mas não é necessário). Teste seu código com cuidado.

Dados de teste

Exemplo de entrada: 1
Saída prevista: y = 0.6000000000000001

Exemplo de entrada: 10
Saída prevista: y = 0.09901951266867294

Exemplo de entrada: 100
Saída prevista: y = 0.009999000199950014

Exemplo de entrada: -5
Saída prevista: y = -0.19258202567760344

Código: Selecionar todos

x = float(input("Digite o valor para x: "))

# Escreva seu código aqui.

print("y =", y)
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Responder