[Перевод] Непайтоновый Пайтон

Когда я подавал заявку на вступление в Hacker School, я столкнулся со следующей задачкой: Напишите программу, которая выводит числа от 1 до 100 (включительно). Если число делится на 3, выведите Fizz вместо числа. Если оно делится на 5, выведите Buzz. Если оно делится как на 3, так и 5, выведите FizzBuzz. Вы можете использовать любой язык программирования.

(С тех пор сотрудники Hacker School слегка изменили задачку, скорее всего, для того, чтобы затруднить её решение с помощью интернет-поисковиков. Я намеренно не включил сюда изменённое условие, чтобы минимизировать эффект моего поста на гуглобельность.)Задачка довольно проста и не требует обдумывания, поэтому хорошо подходит как пример для разых языков и стилей программирования словно Hello, World или задача на поиск чисел Фибоначчи.

Сегодня я опять видел эту задачу, когда показывал другу мою заявку в Hacker School, и внезапно я задумался над тем, как много способов её решения существует лишь только в Пайтоне. Пайтон, особенно с PEP 8, представляет пользователю идеальные методы написаний пайтонового Пайтона. Но Пайтон не требует пайтоновости, поэтому я задумался, в каких стилях я могу писать.Внимание: далее следует очень непайтоновый Пайтон. Тем не менее, код должен работать (с Пайтоном версии 2.7.5).

Присылайте мне свои комментарии или твиты с исправленями ошибок или добавленями.

def fizzbuzz (number): if number % 3 == 0 and number % 5 == 0: return 'FizzBuzz' elif number % 3 == 0: return 'Fizz' elif number % 5 == 0: return 'Buzz' else: return number

for number in range (1, 101): print fizzbuzz (number)

fizzbuzz = lambda n: 'FizzBuzz' if n % 3 == 0 and n % 5 == 0 else None fizz = lambda n: 'Fizz' if n % 3 == 0 else None buzz = lambda n: 'Buzz' if n % 5 == 0 else None fizz_andor_maybenot_buzz = lambda n: fizzbuzz (n) or fizz (n) or buzz (n) or str (n)

print reduce (lambda m, n: m+'\n'+n, map (fizz_andor_maybenot_buzz, range (1, 101)))

import sys

class Value (object): def __init__(self, value): self.setValue (value)

def setValue (self, value): self.value = value

def getValue (self): return self.value

def toString (self): return self.getValue ().__str__()

class FizzBuzz (object): def __init__(self, n): if n % 15 == 0: value = 'FizzBuzz'; elif n % 3 == 0: value = 'Fizz'; elif n % 5 == 0: value = 'Buzz'; else: value = str (n); self.setValue (value);

def setValue (self, value): self.value = Value (value);

def getValue (self): return self.value;

class FizzBuzzRunner (object): def __init__(self, n): self.setN (n)

def setN (self, n): self.n = n

def run (self): for i in range (1, self.n): sys.stdout.write (FizzBuzz (i).getValue ().toString ()+'\n');

if __name__ == '__main__': n = 101; FizzBuzzRunner (n).run ()

def main (): i = 0; value = '';

while i < 100: i += 1 if i % 15 == 0: value = 'FizzBuzz'; elif i % 3 == 0: value = 'Fizz'; elif i % 5 == 0: value = 'Buzz'; else: value = str(i); print value;

return 0;

main ();

def fizzbuzz (n): return 'FizzBuzz' if n % 3 == 0 and n % 5 == 0 else None

def fizz (n): return 'Fizz' if n % 3 == 0 else None

def buzz (n): return 'Buzz' if n % 5 == 0 else None

def fizz_andor_maybenot_buzz (n): print fizzbuzz (n) or fizz (n) or buzz (n) or str (n)

map (fizz_andor_maybenot_buzz, xrange (1, 101))

© Habrahabr.ru