Fizzbuzz Проблема – это общие упражнения, представляемые в интервью кода, чтобы проверить вашу владение простым кодом Python.
Проблема : Распечатайте все номера от 1 до 100 до оболочки с тремя исключениями:
- Для каждого числа делится три вы печатаете
"Fizz", - Для каждого номера делится пятью вы печатать
"Buzz", а также - Для каждого номера делится на три и пять, которые вы печатаете
"Fizzbuzz"Отказ
Пример : Первые 15 чисел последовательности Fizzzguzz, следующие.
1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz ...
Как написать Python One-Liner, который решает эту проблему?
Вот интерактивный обзор:
Упражнение : Пусть обе одноклассники дают те же результаты? Запустите код, чтобы проверить!
Давайте погрузимся в те одноистовые вкладыши, чтобы получить более глубокое понимание и улучшить свои навыки Python!
Fizzbuzz One-LiLER 1: Expression Expression + Concatenation строки + короткое замыкание
Следующий одноклассник решает проблему элегантным способом использования прекрасного понимания более продвинутых функций Python ( Источник ).
print('\n'.join('Fizz' * (i%3==0) + 'Buzz' * (i%5==0) or str(i) for i in range(1,101)))One-Liner создает строку с помощью Присоединяйтесь к Функция с новым символом в качестве разделителя. Вот краткое объяснение функции:
String.join (ИТЕРАЛ) Метод объединяет все строковые элементы в ИТЕРИТЕЛЬНО (например, список, строка или кортеж) и возвращает результат как новую строку. строка На котором вы называете это строку разделителя – и он отделяет отдельные элементы. Например, '-'. Присоединяйтесь к («Hello ',« мир »)) Возвращает соединенную строку «Привет-мир» Отказ
Итак, что такое утечка, вы проходите в Присоединяйтесь () функция? Это генератор экспрессии формы: Выражение для переменной в контексте Отказ Вы проходите все целочисленные значения в контексте 1 до 100, используя Диапазон () функция. Итак, вы получаете оставшиеся Выражение для меня в пределах (1, 101) Отказ Какая часть выражения?
Он состоит из трех элементов:
'Fizz' *)– модуль выражениеI% 3 == 0ВозвращаетПравдатолько если целое числоЯделится на 3, в противном случае он возвращаетсяЛожьОтказ Итак, вы умножаете строку'Fizz'либо сПравда) или сЛожь). В результате вы получаете пустую строку''во всех случаях, за исключением случаев, если целое числоЯделится на 3-в этом случае вы получаете строку'Fizz'Отказ«Buzz» *)– модуль выражениеI% 5 == 0ВозвращаетПравдатолько если целое числоЯделится на 5, в противном случае он возвращаетсяЛожьОтказ Итак, вы умножаете строку«Buzz»либо сПравда) или сЛожь). В результате вы получаете пустую строку''во всех случаях, за исключением случаев, если целое числоЯделится на 5, в этом случае вы получаете строку«Buzz»Отказ- Вы используете строковые конкатенацию, чтобы приклеить ранее полученные строки. В большинстве случаев это будет пустая строка. Если
Яделится на 3, вы получаете строку'Fizz'Отказ ЕслиЯделится на 5, вы получаете строку«Buzz»Отказ И еслиЯделится на 3 и 5, вы получаете строку'Fizzbuzz'Отказ или ул. (I)– В том случае, если вы получили непустую строку в{'Fizz', «Buzz», «Fizzbuzz»}На предыдущем шагеилиОперация просто возвращает эту строку. Это называется короткое замыкание – и используется во многих языках программирования, такими как Python для повышения эффективности логических операций.- Но если строка пуста, она интерпретируется как логическая
ЛожьОтказ Таким образом, Python возвращает второй операндилиоперация. Второй операнд просто – это строковое представление целого числаЯОтказ
Очень интересная реализация проблем Fizzbuzz!
Fizzbuzz One-Liner 2: нарезка
Альтернатива приведена в следующем приятном однокласснике (источник):
for i in range(1, 101): print('FizzBuzz'[i*i%3*4:8--i**4%5] or i)Вау-какое короткое и краткое одноклассное решение! Но как это работает?
- Вы повторяете все значения из
I = 1кI = 100и распечатать строку. Все идет нормально. - Вы используете
илиОперация и нарезка, чтобы определить строку«Fizzbuzz» [начало: конец] или ягенерирует выход. - Вы используете свойство короткого замыкания в Python: если
«Fizzbuzz» [начало: конец]пусто, целое числоЯвозвращается, иначе не пустая строка возвращается. - Вы выделяете подстроку из
'Fizzbuzz'Использование нарезка следующим образом.
Нарезка – это концепция, чтобы вырезать подстроку из данной строки. Используйте нотацию нарезки S [Старт: Стоп: Шаг] Для доступа к каждому шаг -ный элемент, начиная с индекса Начать (включая) и заканчивая индекс Стоп (Исключенный). Все три аргумента являются необязательными, поэтому вы можете пропустить их для использования значений по умолчанию ( Start = 0 , Stop = Len (lst) , Step = 1 ). Например, выражение S [2: 4] из струны «Привет» выкрой ломтик «Я» и выражение S [: 3: 2] выкрой ломтик 'HL' Отказ
В примере у вас есть операция нарезки 'Fizzbuzz' [I * I% 3 * 4: 8 - Я ** 4% 5] Отказ
Start * I% 3 * 4– Обратите внимание, что умножение*и модуль операции%иметь тот же приоритет, поэтому они оцениваются слева направо. Если целое числоЯделится на 3,Я * яТакже делится на 3, а индекс запуска равен 0. Во всех других случаях индекс запуска – это так, что нарезка либо начинается с'Fizz'или«Buzz»ОтказСтоп - я ** 4% 5– Это 4 во всех случаях, за исключением случаев, если числоЯделится на 5, в этом случае это 8.
Итак, есть четыре случая:
- Номер делится только на 3:
Start = 0,Стоп = 4->'Fizz' - Номер делится только на 5:
Start = 4,Стоп = 8->'Гул' - Номер делится как 3, так и 5:
Start = 0,Стоп = 8->'Fizzbuz - Номер делится ни 3, ни 5:
Начать,Стоп = 4->«
Фу! Это была жесткая гайка, чтобы взломать, не так ли?
Python One-liner 3: карта + лямбда
Вы можете найти подробные учебные пособия на карте и лямбдах здесь:
- Освещение функции карты Python
- Лямбда функции в Python
Эти две функции могут быть использованы для решения проблемы Fizzbuzz ( Источник ):
print(list(map(lambda i: "Fizz"*(i%3==0)+"Buzz"*(i%5==0) or str(i), range(1,101))))
Это похоже на метод 1, и теперь вы сможете понять это. Думать о разных ценностях целое число Я может взять.
Python One-Liners Книга
Python Programmemers улучшит свои навыки информатики с этими полезными одноклассниками.
Python One-listers научит вас читать и писать «одноклассники»: краткие заявления полезных функций, упакованных в одну строку кода. Вы узнаете, как систематически распаковать и понимать любую строку кода Python и писать красноречие, мощно сжатый Python, как эксперт.
Пять главных глав на пять глав обложки советы и трюки, регулярные выражения, машинное обучение, самые темы науки о данных и полезные алгоритмы. Подробные объяснения одноклассников вводят ключевые концепции компьютерных наук и повысить ваши кодировки и аналитические навыки. Вы узнаете о продвинутых функциях Python, такие как понимание списка, нарезки, нарезки, функции лямбда, регулярные выражения, карта и уменьшения функций и нарезки нарезки. Вы также узнаете, как:
• Используйте структуры данных для решения реальных проблем, такие как использование булевой индексации для поиска городов с загрязнением выше среднего • Используйте Numpy Basics, такие как массив, форма, ось, тип, вещание, расширенная индексация, нарезка, сортировка, поиск, агрегация и статистика • Рассчитайте базовую статистику многомерных массивов данных и алгоритмы K-означает для безоговорочного обучения • Создайте более усовершенствованные регулярные выражения с помощью группировки и названных групп, отрицательные LookAeads, сбежавшие символы, пробелы, наборы символов (и наборы отрицательных символов) и жадные/негридические операторы • Понимать широкий ассортимент темы компьютерных наук, включая анаграммы, палиндромы, сверты, перестановки, факториалы, простые числа, цифры фибоначчи, обфускации, поиск и алгоритмическую сортировку
К концу книги вы узнаете, как писать Python в его самых утонченных, и создавать краткие, красивые куски «Python Art» в простой строке.
Получите свой Python One-Liners сейчас !!
Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.
Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.
Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.