Helpers - компьютеры, интернет, программирование

Python FizzBuzz

Мне задали этот вопрос в Python:

Возьмите список номеров от пользователя и запустите FizzBuzz для этого списка.

Когда вы перебираете список, помните правила:

1) Если число делится и на 3, и на 5, выведите FizzBuzz

2) Если оно делится только на 3, выведите Fizz

3) Если оно делится только на 5, выведите Buzz

4) В противном случае просто напечатайте число

Также помните Элиф!

У меня есть следующий сценарий, но он выдает ошибку, если n%3=True

n=input()
    if n%3=True:
        print("Fizz")
    else if n%5=True:
        print ("Buzz")
    elif print n

Кто-нибудь может помочь? Большое спасибо!



Ответы:


1

Несколько проблем с вашим кодом здесь. Первая проблема заключается в том, что для сравнения вы должны использовать ==, а не =, который используется для назначения.

Вторая проблема заключается в том, что вы хотите проверить, что остаток от деления (то, что вычисляет оператор по модулю) равен нулю, а не тому, что он истинен, что не действительно имеет смысл.

Вы должны использовать elif для "иначе, если..." и else для "иначе". И вам нужно исправить форматирование вашего предложения else.

Вы хотите:

n=input()
if n%3 == 0:
    print("Fizz")
elif n%5 == 0:
    print ("Buzz")
else:
    print n

Наконец, ваш код не соответствует спецификации:

1) Если число делится и на 3, и на 5, выведите «FizzBuzz».

Вышеупомянутое этого не сделает. Эту часть я оставлю вам, потому что я здесь не для того, чтобы решать задание за вас :)

30.03.2014
  • ОП забыл : в операторе else. ;) 30.03.2014
  • @SukritKalra И это! 30.03.2014
  • Кроме того, поскольку ОП использует print n, я предполагаю, что он на 2.x, где True == 1 и False == 0. Не лучший способ писать код, но в этом нет ничего плохого. 30.03.2014
  • @SukritKalra В этом случае у него все еще не так. 30.03.2014

  • 2

    На основе этого

    FizzBuzz: для целых чисел до 100 включительно печатает FizzBuzz, если целое число делится на 3 и 5 (15); Fizz, если делится на 3 (а не на 5); Buzz, если он делится на 5 (а не на 3); и целое число в противном случае.

    def FizzBuzz():
        for i in range(1,101):
            print {
                3 : "Fizz",
                5 : "Buzz",
                15 : "FizzBuzz"}.get(15*(not i%15) or
                                     5*(not i%5 ) or
                                     3*(not i%3 ), '{}'.format(i))
    

    Метод .get() здесь творит чудеса.

    Работает следующим образом

    Для всех целых чисел от 1 до 100 (101 НЕ включено),
    выведите значение ключа словаря, который мы вызываем через get в соответствии с этими правилами.

    «Получить первый неложный элемент в вызове get или вернуть целое число в виде строки».

    При проверке значения True, то есть значения, которое мы можем найти, Python оценивает от 0 до False. Если i mod 15 = 0, это False, мы перейдем к следующему.

    Поэтому мы NOT делаем каждый из 'модов' (он же остаток), так что, если мод == 0, что == False, мы получаем утверждение True. Мы умножаем True на ключ словаря, который возвращает ключ словаря (т.е. 3*True == 3)

    Когда целое число не делится на 3, 5 или 15, тогда мы попадаем в предложение по умолчанию для печати int '{}'.format(i) просто вставляет i в эту строку - как строку.

    Некоторые из выходных данных

    Fizz
    79
    Buzz
    Fizz
    82
    83
    Fizz
    Buzz
    86
    Fizz
    88
    89
    FizzBuzz< br> 91
    92
    Fizz
    94
    Buzz
    Fizz
    97
    98
    Fizz
    Buzz

    18.05.2016

    3

    n % 3 (или n % любое число) не равно True или False, это не логическое выражение. n % 3 == 0 с другой стороны, делает.

    Кстати, что происходит, когда n % 3 == 0 и n % 5 == 0 оцениваются как True?

    30.03.2014
  • @geoffspear прав, они являются подклассами int (можно проверить с помощью isinstance(True, int)). True+3 — это 4, а False*5 — это 0 в Python. Таким образом, проверку делимости на 3 можно выполнить с помощью n%3 == 0 или n%3 == False, даже если последнее не будет интуитивно понятным. 16.03.2018

  • 4

    Вот как я это сделал с помощью генераторов. Пояснения добавляются в виде комментариев.

    # the factors to check for, along with its
    # associated text data.
    FACTORS = {
        3 : "Fizz",
        5 : "Buzz",
    }
    
    
    def fizzbuzz(start, stop):
        """FizzBuzz printer"""
        for i in range(start, stop+1):
            string = ""  # build string
    
            # iterate through all factors
            for j, dat in FACTORS.items():
                # test for divisibility
                if i % j == 0:
                    # add data to string if divisible
                    string += dat
    
            if not string:
                # if string's length is 0, it means,
                # all the factors returned non-zero
                # modulus, so return only the number
                yield str(i)
            else:
                # factor had returned modulo as 0,
                # return the string
                yield string
    
    
    if __name__ == "__main__":
        for each in fizzbuzz(1, 100):
            print(each)
    

    Преимущество этой версии в том, что она не зависит от каких-либо дополнительных проверок факторов.

    19.05.2020

    5

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

    def checkdict(divdict, i):
        out = ""
        for key in divdict:
            if key != 0:
                if i%key==0:
                    out+=divdict[key]
            if key == 0 and i == 0:
                    out+=divdict[key]
        if out == "":
            out = i
        print(out)
    
    if __name__ == "__main__":
        mydict = {3:"Fizz",5:"Buzz"}
        for i in range(-50,50):
            checkdict(mydict, i)
    
    13.03.2019
  • На самом деле вывод этого кода не является четко определенным: итерация по a не имеет предсказуемого порядка (поэтому для 15 может быть создано «FizzBuzz» или «FuzzBizz»), и я думаю, что это хороший пример чрезмерной разработки: более общий, чем требуется, и добавляет много сложности; с другой стороны также не очень хорошо именование. 12.06.2019

  • 6

    один из самых коротких ответов, которые я нашел, это

    c=1
    while c<101:print((c%3<1)*'Fizz'+(c%5<1)*'Buzz'or c);c+=1
    

    61 символ

    05.02.2020

    7

    Ничего особенного, используя цикл while для достижения того же результата:

    x,xx = 1,100
    xy,xz = 3,5
    mylist = []
    
    while x <= xx:
        y = (x/xy).is_integer()
        z = (x/xz).is_integer()
    
        if y and z:
            mylist.append("fizzbuzz")
        elif y:
            mylist.append("fizz")
        elif z:
            mylist.append("buzz")
        else:
            mylist.append(x)
        x+=1
    
    print(mylist)
    
    03.07.2021

    8
  • Здравствуйте, пользователь 12616353! Добро пожаловать в Stack Overflow! В следующий раз, когда вы добавите ответ, попробуйте добавить к нему какое-то объяснение :) 29.12.2019

  • 9
  • Спасибо за исправление @Seljuk Gülcan. Итак, с помощью этого сценария очень легко просто добавить больше чисел и меток, и я надеюсь, что это очень легко увидеть. 25.07.2020
  • Новые материалы

    Интуитивное понимание тензоров в машинном обучении
    Тензор является важной концепцией во многих научных областях, таких как математика, физика, обработка сигналов и компьютерное зрение, и это лишь некоторые из них. В математике тензор — это..

    Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
    Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

    Почему объяснимость так важна прямо сейчас?
    По мере того, как системы искусственного интеллекта и инструменты на основе машинного обучения распространяются в нашей повседневной жизни, как практики, так и критики все чаще заявляют о..

    Анимированный математический анализ
    Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

    Создание простого слайдера изображений с помощью JavaScript
    Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

    Создание базы данных с помощью супергероя «Python»
    В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

    ИИ для чайников: руководство для начинающих по пониманию будущего технологий
    Вы чувствуете, что остались позади в мире ИИ? Не волнуйтесь, вы не одиноки! Со всей этой шумихой вокруг искусственного интеллекта может быть трудно понять, с чего начать. Но не позволяйте сленгу..