«FIZZ BANG BUZZ!» 3,7,11 эффективность

Я написал метод изменения шума Fizz в Python, который печатает «fizz», «bang» и «buzz» для 3, 7 и 11 соответственно.

def FizzBang():
    string = ''
    for n in range(1,101):
        msg = ""
        if not n % 3:
            msg += "Fizz"
        if not n % 7:
            msg += "Bang"
        if not n % 11:
            msg += "Buzz"
        print msg or str(n)

Что я могу сделать, чтобы увеличить скорость этой программы? Я знаю, что модуль довольно дорог. Также возможно, что конкатенация строк также может не понадобиться.

11 голосов | спросил Liondancer 28 PMpMon, 28 Apr 2014 21:55:57 +040055Monday 2014, 21:55:57

1 ответ


6

Действительно, сложение быстрее, чем по модулю. Эта реализация работает примерно на 33% быстрее, чем оригинал при подсчете до 100. Однако я ожидаю, что он не будет масштабироваться и до больших пределов из-за использования памяти O ( n ).

def fizz_bang(limit=100):
    limit += 1
    strings = [''] * limit

    fbb = ((3, 'Fizz'), (7, 'Bang'), (11, 'Buzz'))
    for stride, noise in fbb:
        for n in range(0, limit, stride):
            strings[n] += noise
    for n in range(1, limit):
        print strings[n] or n

Кроме того, согласно соглашениям PEP 8, FizzBang следует называть fizz_bang.

ответил 200_success 28 PMpMon, 28 Apr 2014 23:55:55 +040055Monday 2014, 23:55:55

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132