Primeira vez aqui? Seja bem vindo e cheque o FAQ!
x

Como você resolveria o problema 'FizzBuzz'?

0 votos
7 visitas
perguntada Nov 15 em Programação Computacional por Stuart Mill (1,434 pontos)  
editado Nov 15 por Stuart Mill

Uma pergunta de entrevista comum a programadores é pedir que implementem o FizzBuzz:

Para todo número inteiro de 1 a 100, se o número é divisível por 3 e não por 5, retorne 'Fizz'; se é divisível por 5 e não por 3, retorne 'Buzz'; se é divisível por 3 e 5, retorne 'FizzBuzz'; caso contrário, retorne o número.

Embora seja simples, uma implementação elegante e fácil de ser mantida e modificada pode ser desafiadora. Curiosamente, a maioria de graduados em ciência da computação demora mais do que alguns minutos para propor uma solução.

Qual seria sua solução para o problema?

Compartilhe

1 Resposta

+1 voto
respondida Nov 15 por Stuart Mill (1,434 pontos)  

Minha solução seria algo como:

def FizzBuzz(dividend:int, divisor:int, word:str):
    '''
    Checa se o número é do tipo especial (fizz_buzz). Caso positivo, retorna o nome desse tipo
    'Fizz ou Buzz'. Caso contrário, retorna uma string vazia.
    '''
    if dividend%divisor == 0: 
        return word
    else:
        return ''
for i in range(1,101):
    x = FizzBuzz(i,3,'Fizz') + FizzBuzz(i,5,'Buzz') # Usando concatenação de strings!
    if x == '':
        x = str(i) # Se a string for nula, substituir x pelo número da iteração
    print(f'i = {i} -> {x}') # f-string para mostrar o número da iteração e a "imagem" pela função FizzBuzz

Usando concatenação da string, checamos separadamente se o dividendo é divisível pelo divisor de interesse por FizzBuzz, unindo as strings caso seja para \(3\) e \(5\). Nos outros casos simplesmente subscrevemos a variável temporária x pelo inteiro da iteração.

Output:

i = 1 -> 1
i = 2 -> 2
i = 3 -> Fizz
i = 4 -> 4
i = 5 -> Buzz
i = 6 -> Fizz
i = 7 -> 7
i = 8 -> 8
i = 9 -> Fizz
i = 10 -> Buzz
i = 11 -> 11
i = 12 -> Fizz
i = 13 -> 13
i = 14 -> 14
i = 15 -> FizzBuzz
i = 16 -> 16
i = 17 -> 17
i = 18 -> Fizz
i = 19 -> 19
i = 20 -> Buzz
i = 21 -> Fizz
i = 22 -> 22
i = 23 -> 23
i = 24 -> Fizz
i = 25 -> Buzz
i = 26 -> 26
i = 27 -> Fizz
i = 28 -> 28
i = 29 -> 29
i = 30 -> FizzBuzz
i = 31 -> 31
i = 32 -> 32
i = 33 -> Fizz
i = 34 -> 34
i = 35 -> Buzz
i = 36 -> Fizz
i = 37 -> 37
i = 38 -> 38
i = 39 -> Fizz
i = 40 -> Buzz
i = 41 -> 41
i = 42 -> Fizz
i = 43 -> 43
i = 44 -> 44
i = 45 -> FizzBuzz
i = 46 -> 46
i = 47 -> 47
i = 48 -> Fizz
i = 49 -> 49
i = 50 -> Buzz
i = 51 -> Fizz
i = 52 -> 52
i = 53 -> 53
i = 54 -> Fizz
i = 55 -> Buzz
i = 56 -> 56
i = 57 -> Fizz
i = 58 -> 58
i = 59 -> 59
i = 60 -> FizzBuzz
i = 61 -> 61
i = 62 -> 62
i = 63 -> Fizz
i = 64 -> 64
i = 65 -> Buzz
i = 66 -> Fizz
i = 67 -> 67
i = 68 -> 68
i = 69 -> Fizz
i = 70 -> Buzz
i = 71 -> 71
i = 72 -> Fizz
i = 73 -> 73
i = 74 -> 74
i = 75 -> FizzBuzz
i = 76 -> 76
i = 77 -> 77
i = 78 -> Fizz
i = 79 -> 79
i = 80 -> Buzz
i = 81 -> Fizz
i = 82 -> 82
i = 83 -> 83
i = 84 -> Fizz
i = 85 -> Buzz
i = 86 -> 86
i = 87 -> Fizz
i = 88 -> 88
i = 89 -> 89
i = 90 -> FizzBuzz
i = 91 -> 91
i = 92 -> 92
i = 93 -> Fizz
i = 94 -> 94
i = 95 -> Buzz
i = 96 -> Fizz
i = 97 -> 97
i = 98 -> 98
i = 99 -> Fizz
i = 100 -> Buzz
comentou Nov 20 por danielcajueiro (5,501 pontos)  
Muito legal!
...