Python pode emular a switch...case
estrutura de controle de fluxo encontrada em muitas linguagens. Tudo que você precisa fazer é colocar seus valores esperados como chaves para um dicionário.
def starts_with_s():
return ' '.join(['No','soup','for','you!']).upper()
words = {
'a': lambda: 'Apple',
'b': lambda: 'Blueberry',
'c': lambda: 'Cookie',
's': starts_with_s
}
print words['a']()
>>> 'Apple'
print words['b']()
>>> 'Blueberry'
print words['c']()
>>> 'Cookie'
print words['s']()
>>> 'NO SOUP FOR YOU!'
Os lambdas são necessários apenas se você estiver fazendo mais do que simplesmente retornar uma string – como são funções definidas, são passados de volta e executados exatamente como a função nomeada starts_with_s()
.
Os valores padrão são mais bem tratados como uma exceção:
try:
print words['x']
except KeyError:
print 'I don't know anything about that...'
>>> 'I don't know anything about that...'
Finalmente, esta estrutura é capaz de usar qualquer objeto imutável como chave. Isso pode ser útil:
from random import choice
domain = 'rps'
winner = {
('r','r'): 'Tied. Rock on!',
('p','p'): 'Draw. Get it? Draw!? :)',
('s','s'): 'Tied. Cut that out!',
('r','p'): 'You lose. Paper covers rock',
('r','s'): 'You win. Rock breaks scissors',
('p','r'): 'You win. Paper covers rock',
('p','s'): 'You lose. Scissors cut paper',
('s','r'): 'You loss. Rock breaks scissors.',
('s','p'): 'You win. Scissors cut paper'
}
for idx in range(10):
user, computer = choice(domain), choice(domain)
print 'Trial %s: %s' % (idx+1, winner[(user, computer)])
>>> Trial 1: You lose. Paper covers rock
>>> Trial 2: You win. Scissors cut paper
>>> Trial 3: You win. Scissors cut paper
>>> Trial 4: Tied. Cut that out!
>>> Trial 5: You win. Paper covers rock
>>> Trial 6: You win. Scissors cut paper
>>> Trial 7: You win. Paper covers rock
>>> Trial 8: You lose. Scissors cut paper
>>> Trial 9: You loss. Rock breaks scissors.
>>> Trial 10: Tied. Cut that out!
Vamos ver você fazer isso em PHP!