29

Costumo ver várias linguagens de programações onde uma operação ternária é quase sempre idêntica.

(x % 2 == 0) ? "par" : "impar"

Porém, quando fui tentar fazer isso no Python, deu erro:

(x % 2 == 0) ? "par" : "impar"
             ^
SyntaxError: invalid syntax

se assim não funciona, então como seria uma operação ternária em Python?

1
  • 3
    Lembrando que esse operador não se chama ternário mas sim condicional. Acontece que ele costuma ser o único operador ternário (ou seja, que recebe três operandos) das linguagens nas quais ele aparece, por isso a forte associação. Commented 26/10/2016 às 17:00

6 Respostas 6

46

Existe sim, no Python é conhecido como Expressão Condicional.

<expressao1> if <condicao> else <expressao2>

Primeiro, a condição é avaliada (ao invés de expressao1), se a condição for verdadeira, expressao1 é avaliada e seu valor é retornado; caso contrário, expressao2 é avaliada e seu valor retornado.

Com base no teu exemplo, o código fica assim:

x = 10
print ("par" if x % 2 == 0 else "impar")

Uma alternativa com operadores booleanos and e or:

<condicao> and <expressao1> or <expressao2>

No entanto, não funciona do mesmo modo que uma Expressão Condicional, se a condição for verdadeira, expressao1 é avaliada e seu valor retornado; se expressao1 for falso, expressao2 é avaliada e seu valor retornado.

Com base no teu exemplo:

x = 10
print (x % 2 == 0 and "par" or "impar")

De acordo com o PEP 308, Conditional Expressions, a razão por não ter sido implementado a sintaxe <condicao> ? <expressao1> : <expressao2> usado em muitas linguagens derivadas do C é:

(Em tradução livre)

Eric Raymond até implementou isto.

O BDFL rejeitou isto por várias razões: o dois-pontos já tem muitos usos em Python (embora, na verdade, não seria ambíguo, porque o ponto de interrogação exige o dois-pontos correspondente); para as pessoas que não usam linguagens derivadas do C, é difícil de entender.

Obs: BDFL (Benevolent Dictator For Life): Guido van Rossum, criador do Python.

6
  • Hum... Que interessante. O "se deu" fica antes do if e o "se não" depois do else. Commented 26/10/2016 às 16:38
  • Isso é realmente um ternário ou é um syntax sugar do Python? Commented 26/10/2016 às 16:38
  • @WallaceMaxters Está mais para operador ternário, de uma olhada no link da documentação e no PEP para ver a discussão... =)
    – stderr
    Commented 26/10/2016 às 16:50
  • Vou te dar uma moral :p. Foi difícil escolher uma. Depois boto recompensa para não chatear ninguém :p Commented 26/10/2016 às 17:33
  • 1
    Parece que você é fã de Python, né? Commented 26/10/2016 às 19:42
12

Em Python o if pode ser usado tanto como um statement, como um operador em contextos diferentes. Como operador dá para fazer assim:

print(1 if True else 2)

No seu exemplo:

x = randint(0,9)
print ("par" if x % 2 == 0 else "impar")

Veja funcionando no ideone. E no repl.it. Também coloquei no GitHub para referência futura.

Ele pega o primeiro valor se a condição for verdadeira, se a condição for falsa ele pega o que está no else. Genericamente falando a expressão condicional (não gosto do termo ternário) fica assim:

valorVerdadeito if condicao else valorFalso
0
7

Sim, na operação ternaria você utiliza o if e else normalmente.

y = "par" if x % 2 == 0 else "impar"
7

A linguagem Python possui sua própria sintaxe para operação ternária. O que difere da maioria que utilizam a conhecida sintaxe (condição ? verdadeiro : false).

A sua expressão com if e else "normal" ficaria:

if x % 2 == 0:
    print "Par"
else:
    print "Ímpar"

Passando para operação ternária do Python, ficaria:

print "Par" if x % 2 == 0 else "Ímpar"

Veja funcionando no Ideone.

3
1

Um jeito interessante de se fazer também é:

('impar', 'par')[x%2==0]

Fica até mais simples na minha opinião

-4

A função utiliza um operador ternário para calcular o MDC de dois números

def mdc(a,b):
  return b if (a == 0) else mdc(b % a, a)

Você deve fazer log-in para responder a esta pergunta.

Esta não é a resposta que você está procurando? Pesquise outras perguntas com a tag .