

普段はRubyを使っています。Pythonの勉強を始めたのですが、早速躓いていたので教えて下さい。

[code]

    class FizzBuzz
      def self.fizz?(i)
        i > 0 && (i % 3) == 0
      end
    
      def self.buzz?(i)
        i > 0 && (i % 5) == 0
      end
    
      def self.fizz_buzz?(i)
        fizz?(i) && buzz?(i)
      end
    
      def self.to_p(i)
        case
        when fizz?(i) && !fizz_buzz?(i)
          'Fizz'
        when buzz?(i) && !fizz_buzz?(i)
          'Buzz'
        when fizz_buzz?(i)
          'FizzBuzz'
        else
          i
        end
      end
    end
    
    1.upto(100) do |i|
      puts FizzBuzz.to_p(i)
    end
    
[/code]

これをPythonで書こうとしてるのですが、書き方がわかりません。  
以下が私の書いたPythonのコードです。(実行できません)  
「Pythonらしく書くにはこうするとよい」などのアドバイスもいただけると幸いです。

[code]

    class FizzBuzz:
        @classmethod
        def is_fizz(i):
            return (i > 0 and (i % 3) == 0)
    
        @classmethod
        def is_buzz(i):
            return (i > 0 and (i % 5) == 0)
    
        @classmethod
        def is_fizz_buzz(i):
            return (self.is_fizz(i) and self.is_buzz(i))
    
        @classmethod
        def to_print(i):
            if self.is_fizz(i) and not self.is_fizz_buzz(i):
                return 'Fizz'
            elif self.is_buzz(i) and not self.fizz_buzz(i):
                return 'Buzz'
            elif self.fizz_buzz(i):
                return 'FizzBuzz'
            else:
                return i
    
    for i in range(1, 101):
        print FizzBuzz.to_print(i)
    
[/code]


CC BY-SA 4.0
2015-12-20T18:51:55.327
20232
2020-09-13T05:39:22.237
2020-09-13T05:39:22.237
3060
9149
question
ruby python
Ruby で書いたこの FizzBuzz コードを Python で書くとどうなるのでしょうか?


最低限動くように修正するなら、こんな感じです。

[code]

    class FizzBuzz:
    
        @staticmethod
        def is_fizz(i):
            return i > 0 and (i % 3) == 0
    
        @staticmethod
        def is_buzz(i):
            return i > 0 and (i % 5) == 0
    
        @classmethod
        def is_fizz_buzz(cls, i):
            return cls.is_fizz(i) and cls.is_buzz(i)
    
        @classmethod
        def to_print(cls, i):
            if cls.is_fizz(i) and not cls.is_fizz_buzz(i):
                return 'Fizz'
            elif cls.is_buzz(i) and not cls.is_fizz_buzz(i):
                return 'Buzz'
            elif cls.is_fizz_buzz(i):
                return 'FizzBuzz'
            else:
                return i
    
    for i in range(1, 101):
        print FizzBuzz.to_print(i)
    
[/code]


CC BY-SA 3.0
2015-12-20T19:38:14.487
20234
2015-12-20T19:38:14.487
7837
20232
answer


クラス勉強には、上記のものはいいと思いますが、関数を使えばもっと簡単になります。  
（ちなみにpythonでは、.to_print()のようなメソッドは、あまり見ないので、ここでは、rubyぽっくpythonを書いている感じがします）

[code]

    def fizzbuzz(n):
        if n % 3 == 0 and n % 5 == 0:
            return 'FizzBuzz'
        elif n % 3 == 0:
            return 'Fizz'
        elif n % 5 == 0:
            return 'Buzz'
        else:
            return str(n)
    
    for i in range(1, 101):
        print(fizzbuzz(i))
    
[/code]


CC BY-SA 4.0
2015-12-21T01:34:29.010
20237
2020-09-13T03:38:06.680
2020-09-13T03:38:06.680
32986
2314
20232
answer