Criou página com '= Expressões = <br> Uma expressão é uma combinação de valores, variáveis e operadores. Se você digitar uma expressão na linha de comando, o interpretador avalia e ex...' |
|||
| (8 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
| Linha 42: | Linha 42: | ||
Como você mudaria o “script” para exibir os valores destas quatro expressões? | Como você mudaria o “script” para exibir os valores destas quatro expressões? | ||
<br> | |||
= Operadores e operandos = | |||
<br> | |||
[[Arquivo:Operadores.jpg|center]] | |||
Operadores são símbolos especiais que representam computações como adição e multiplicação. | |||
Os valores que o operador usa são chamados operandos. | |||
Todas as expressões seguintes são válidas em Python e seus significados são mais ou menos claros: | |||
20+32 hora-1 hora*60+minuto minuto/60 5**2 (5+9)*(15-7) | |||
Em Python, os símbolos +, -, / e o uso de parênteses para agrupamento têm o mesmo significado que em matemática. | |||
O asterisco (*) é o símbolo para multiplicação e ** é o símbolo para potenciação. | |||
Quando um nome de variável aparece no lugar de um operando, ele é substituído pelo valor da variável, antes da operação ser executada. | |||
>>> x = 25.2 | |||
>>> y = 10.3 | |||
>>> print(x,y) | |||
(25.2, 10.3) | |||
>>> print x , y | |||
25.2 10.3 | |||
>>> | |||
>>> x = 25.2 | |||
>>> y = 10.3 | |||
>>> print x | |||
25.2 | |||
>>> print x + y | |||
35.5 | |||
>>> print x, print y | |||
File "<stdin>", line 1 | |||
print x, print y | |||
^ | |||
SyntaxError: invalid syntax | |||
>>> print x; print y | |||
25.2 | |||
10.3 | |||
Adição, subtração, multiplicação e potenciação fazem o que se espera, mas você pode ficar surpreso com a divisão. | |||
A operação seguinte tem um resultado inesperado: | |||
>>> minuto = 59 | |||
>>> minuto/60 | |||
0 | |||
O valor de minuto é 59 e, em aritmética convencional, 59 dividido por 60 é 0,98333, não 0. | |||
A razão para a discrepância é que Python está realizando uma divisão inteira. | |||
Quando ambos os operandos são inteiros, o resultado tem de ser também um inteiro. | |||
Por convenção, a divisão inteira sempre arredonda para baixo, mesmo em casos como este, em que o inteiro seguinte está muito próximo: | |||
>>> minuto*100/60 | |||
98 | |||
De novo, o resultado é arredondado para baixo, mas agora pelo menos a resposta é aproximadamente correta. | |||
A alternativa é usar a divisão em ponto flutuante, o que veremos no capítulo 3. | |||
Que tal arredondar um número? Utilize o comando round | |||
<br> | |||
= Ordem dos operadores = | |||
<br> | |||
Quando mais de um operador aparece em uma expressão, a ordem de avaliação depende das regras de precedência. | |||
Python segue as mesmas regras de precedência para seus operadores matemáticos que a matemática. | |||
O acrônimo PEMDAS é uma maneira prática de lembrar a ordem das operações: | |||
P: Parênteses têm a mais alta precedência e podem ser usados para forçar uma expressão a ser avaliada na ordem que você quiser. | |||
Já que expressões entre parênteses são avaliadas primeiro, 2 * (3-1) é 4, e (1+1)**(5-2) é 8. | |||
Você também pode usar parênteses para tornar uma expressão mais fácil de ler, como em (minuto * 100) / 60, ainda que isso não altere o resultado. | |||
E: Exponenciação ou potenciação tem a próxima precedência mais alta, assim 2**1+1 é 3 e não 4, e 3*1**3 é 3 e não 27. | |||
MDAS: Multiplicação e Divisão têm a mesma precedência, que é mais alta do que a da Adição e da Subtração, que também têm a mesma precedência. | |||
Assim 2*3-1 dá 5 em vez de 4, e 2/3-1 é -1, não 1 (lembre-se de que na divisão inteira, 2/3=0). | |||
Operadores com a mesma precedência são avaliados da esquerda para a direita. | |||
Assim, na expressão minuto*100/60, a multiplicação acontece primeiro, resultando em 5900/60, o que se transforma produzindo 98. | |||
Se as operações tivessem sido avaliadas da direita para a esquerda, o resultado poderia ter sido 59*1, que é 59, que está errado. | |||
= Operações com strings = | |||
<br> | |||
[[Arquivo:Strings.jpg|center]] | |||
De maneira geral, você não pode executar operações matemáticas em strings, ainda que as strings se pareçam com números. | |||
O que segue é inválido (assumindo que mensagem é do tipo string): | |||
mensagem-1 "Alô"/123 mensagem*"Alô" "15"+2 | |||
Interessante é o operador +, que funciona com strings, embora ele não faça exatamente o que você poderia esperar. | |||
Para strings, o operador + representa concatenação, que significa juntar os dois operandos ligando-os pelos extremos. Por exemplo: | |||
fruta = "banana" | |||
assada = " com canela" | |||
print fruta + assada | |||
A saída deste programa é banana com canela. O espaço antes da palavra com é parte da string e é necessário para produzir o espaço entre as strings concatenadas. | |||
O operador * também funciona com strings; ele realiza repetição. Por exemplo, "Legal"*3 é "LegalLegaLegal". | |||
Um dos operadores tem que ser uma string; o outro tem que ser um inteiro. | |||
Por um lado, esta interpretação de + e * faz sentido pela analogia entre adição e multiplicação. | |||
Assim como 4*3 equivale a 4+4+4, não é de estranhar que "Legal"*3 seja o mesmo que "Legal"+"Legal"+"Legal". | |||
Por outro lado, uma diferença significativa separa concatenação e repetição de adição e multiplicação. | |||
Você saberia mencionar uma propriedade da adição e da multiplicação que não ocorre na concatenação e na repetição? | |||
= Composição = | |||
<br> | |||
Até agora, vimos os elementos de um programa (variáveis, expressões, e instruções ou comandos) isoladamente, sem mencionar como combiná-los. | |||
Uma das características mais práticas das linguagens de programação é a possibilidade de pegar pequenos blocos e combiná-los numa composição. | |||
Por exemplo, nós sabemos como somar números e sabemos como exibi-los; acontece que podemos fazer as duas coisas ao mesmo tempo: | |||
>>> print 17 + 3 | |||
20 | |||
Na realidade, a soma tem que acontecer antes da impressão, assim, as ações não estão na realidade acontecendo ao mesmo tempo. | |||
O ponto é que qualquer expressão envolvendo números, strings, e variáveis pode ser usada dentro de um comando print. | |||
Exemplo: | |||
>>> hora = 16 | |||
>>> minutos = 22 | |||
>>> print "O numero de minutos desde a meia-noite é ",hora*60+minutos | |||
O numero de minutos desde a meia-noite é 982 | |||
>>> | |||
Esta possibilidade pode não parecer muito impressionante agora, mas você verá outros exemplos em que a composição torna possível expressar cálculos e tarefas complexas de modo limpo e conciso. | |||
* Atenção: | |||
** Existem limites quanto ao lugar onde você pode usar certos tipos de expressão. | |||
** Por exemplo, o lado esquerdo de um comando de atribuição tem que ser um nome de variável, e não uma expressão. | |||
* Assim, o seguinte não é válido: | |||
** minuto+1 = hora. | |||
<br> | |||
Edição atual tal como às 23h19min de 6 de janeiro de 2016
Expressões
Uma expressão é uma combinação de valores, variáveis e operadores. Se você digitar uma expressão na linha de comando, o interpretador avalia e exibe o resultado:
>>> 2 + 3 5
Embora expressões contenham valores, variáveis e operadores, nem toda expressão contém todos estes elementos. Um valor por si só é considerado uma expressão, do mesmo modo que uma variável:
>>> x = 10 >>> 17 17 >>> x 10 >>>
Avaliar uma expressão não é exatamente a mesma coisa que imprimir um valor:
>>> texto = "Hello Word" >>> texto 'Hello Word' >>> print(texto) Hello Word >>>
Reparem que na 2a. linha, é avaliado a variável texto e mostrado seu conteúdo mostrado a seguir, explicitando que é string Já na 4a. linha, é solicitado que imprima o conteúdo da variável texto e em seguida é mostrado o que a expressão ped.
Quando Python exibe o valor de uma expressão, usa o mesmo formato que você usaria para entrar com o valor.
No caso de strings, isso significa que as aspas são incluídas mas o comando print imprime o valor da expressão, que, neste caso, é o conteúdo da string.
- N.T.: Python aceita aspas simples ou duplas para delimitar strings. Num script, uma expressão sozinha é um comando válido, porém sem efeito.
O script:
22 3.2 "Alo" 2 + 2
não produz qualquer saída.
Como você mudaria o “script” para exibir os valores destas quatro expressões?
Operadores e operandos

Operadores são símbolos especiais que representam computações como adição e multiplicação.
Os valores que o operador usa são chamados operandos.
Todas as expressões seguintes são válidas em Python e seus significados são mais ou menos claros:
20+32 hora-1 hora*60+minuto minuto/60 5**2 (5+9)*(15-7)
Em Python, os símbolos +, -, / e o uso de parênteses para agrupamento têm o mesmo significado que em matemática.
O asterisco (*) é o símbolo para multiplicação e ** é o símbolo para potenciação.
Quando um nome de variável aparece no lugar de um operando, ele é substituído pelo valor da variável, antes da operação ser executada.
>>> x = 25.2 >>> y = 10.3 >>> print(x,y) (25.2, 10.3) >>> print x , y 25.2 10.3 >>>
>>> x = 25.2
>>> y = 10.3
>>> print x
25.2
>>> print x + y
35.5
>>> print x, print y
File "<stdin>", line 1
print x, print y
^
SyntaxError: invalid syntax
>>> print x; print y
25.2
10.3
Adição, subtração, multiplicação e potenciação fazem o que se espera, mas você pode ficar surpreso com a divisão.
A operação seguinte tem um resultado inesperado:
>>> minuto = 59 >>> minuto/60 0
O valor de minuto é 59 e, em aritmética convencional, 59 dividido por 60 é 0,98333, não 0.
A razão para a discrepância é que Python está realizando uma divisão inteira.
Quando ambos os operandos são inteiros, o resultado tem de ser também um inteiro.
Por convenção, a divisão inteira sempre arredonda para baixo, mesmo em casos como este, em que o inteiro seguinte está muito próximo:
>>> minuto*100/60 98
De novo, o resultado é arredondado para baixo, mas agora pelo menos a resposta é aproximadamente correta.
A alternativa é usar a divisão em ponto flutuante, o que veremos no capítulo 3.
Que tal arredondar um número? Utilize o comando round
Ordem dos operadores
Quando mais de um operador aparece em uma expressão, a ordem de avaliação depende das regras de precedência.
Python segue as mesmas regras de precedência para seus operadores matemáticos que a matemática.
O acrônimo PEMDAS é uma maneira prática de lembrar a ordem das operações:
P: Parênteses têm a mais alta precedência e podem ser usados para forçar uma expressão a ser avaliada na ordem que você quiser.
Já que expressões entre parênteses são avaliadas primeiro, 2 * (3-1) é 4, e (1+1)**(5-2) é 8.
Você também pode usar parênteses para tornar uma expressão mais fácil de ler, como em (minuto * 100) / 60, ainda que isso não altere o resultado.
E: Exponenciação ou potenciação tem a próxima precedência mais alta, assim 2**1+1 é 3 e não 4, e 3*1**3 é 3 e não 27.
MDAS: Multiplicação e Divisão têm a mesma precedência, que é mais alta do que a da Adição e da Subtração, que também têm a mesma precedência.
Assim 2*3-1 dá 5 em vez de 4, e 2/3-1 é -1, não 1 (lembre-se de que na divisão inteira, 2/3=0).
Operadores com a mesma precedência são avaliados da esquerda para a direita.
Assim, na expressão minuto*100/60, a multiplicação acontece primeiro, resultando em 5900/60, o que se transforma produzindo 98.
Se as operações tivessem sido avaliadas da direita para a esquerda, o resultado poderia ter sido 59*1, que é 59, que está errado.
Operações com strings

De maneira geral, você não pode executar operações matemáticas em strings, ainda que as strings se pareçam com números.
O que segue é inválido (assumindo que mensagem é do tipo string):
mensagem-1 "Alô"/123 mensagem*"Alô" "15"+2
Interessante é o operador +, que funciona com strings, embora ele não faça exatamente o que você poderia esperar.
Para strings, o operador + representa concatenação, que significa juntar os dois operandos ligando-os pelos extremos. Por exemplo:
fruta = "banana" assada = " com canela" print fruta + assada
A saída deste programa é banana com canela. O espaço antes da palavra com é parte da string e é necessário para produzir o espaço entre as strings concatenadas.
O operador * também funciona com strings; ele realiza repetição. Por exemplo, "Legal"*3 é "LegalLegaLegal".
Um dos operadores tem que ser uma string; o outro tem que ser um inteiro.
Por um lado, esta interpretação de + e * faz sentido pela analogia entre adição e multiplicação.
Assim como 4*3 equivale a 4+4+4, não é de estranhar que "Legal"*3 seja o mesmo que "Legal"+"Legal"+"Legal".
Por outro lado, uma diferença significativa separa concatenação e repetição de adição e multiplicação.
Você saberia mencionar uma propriedade da adição e da multiplicação que não ocorre na concatenação e na repetição?
Composição
Até agora, vimos os elementos de um programa (variáveis, expressões, e instruções ou comandos) isoladamente, sem mencionar como combiná-los.
Uma das características mais práticas das linguagens de programação é a possibilidade de pegar pequenos blocos e combiná-los numa composição.
Por exemplo, nós sabemos como somar números e sabemos como exibi-los; acontece que podemos fazer as duas coisas ao mesmo tempo:
>>> print 17 + 3 20
Na realidade, a soma tem que acontecer antes da impressão, assim, as ações não estão na realidade acontecendo ao mesmo tempo.
O ponto é que qualquer expressão envolvendo números, strings, e variáveis pode ser usada dentro de um comando print.
Exemplo:
>>> hora = 16 >>> minutos = 22 >>> print "O numero de minutos desde a meia-noite é ",hora*60+minutos O numero de minutos desde a meia-noite é 982 >>>
Esta possibilidade pode não parecer muito impressionante agora, mas você verá outros exemplos em que a composição torna possível expressar cálculos e tarefas complexas de modo limpo e conciso.
- Atenção:
- Existem limites quanto ao lugar onde você pode usar certos tipos de expressão.
- Por exemplo, o lado esquerdo de um comando de atribuição tem que ser um nome de variável, e não uma expressão.
- Assim, o seguinte não é válido:
- minuto+1 = hora.