95652


最終的には、はなこさんのbmiが18以下なので”痩せ型”と出力したいです。  
このコードだと「不等号がつかえない」というエラーがでます。  
class内で不等号は使えないのでしょうか？

また上記のような出力をした場合はどのように直せばよいでしょうか？

**エラーコード:**

[code]

    '<' not supported between instances of 'method' and 'int'
    
[/code]

**現状のコード:**

[code]

    class BMI:
        def __init__(self,name, weight, height):
            self.name = name
            self.weight = weight
            self.height = height
    
        def set_bmi(self):
            print(self.weight / (self.height**2))
        
        @classmethod
        def set_himando(cls,set_bmi): 
            if set_bmi < 18:
                print("痩せ型")
            elif set_bmi < 25:
                print("普通体重")
    
    Hanako = BMI("はなこ",40,1.6)
    
    Hanako.set_bmi()
    Hanako.set_himando(Hanako.set_bmi)
    
[/code]


CC BY-SA 4.0
2023-07-15T15:30:06.323
95640
2023-07-17T05:29:44.960
2023-07-17T05:29:44.960
3060
59123
question
python
class内で不等号は使えないのでしょうか？

[code]

    class BMI:
        def __init__(self, name, weight, height):
            self.name = name
            self.weight = weight
            self.height = height
    
        def calc_bmi(self):
            return self.weight / (self.height**2)
    
        def classify_fatness(self):
            bmi = self.calc_bmi()
            if bmi < 18.5:
                return "痩せ型"
            if bmi < 25:
                return "普通体重"
    
            return "肥満"
    
    if __name__ == '__main__':
        Hanako = BMI("はなこ", 40, 1.6)
        print(Hanako.classify_fatness())
    
        Taro = BMI("太郎", 60, 1.7)
        print(Taro.classify_fatness())
    
[/code]


CC BY-SA 4.0
2023-07-15T16:03:19.207
95641
2023-07-15T16:03:19.207
47127
95640
answer


エラー自体は、数値とメソッドそのものを比較できないというもので、クラスの中でも不等号は使えます。しかし、クラスの構造に問題があるため、そのエラーを直しても別のエラーが出てしまいます。

恐らく、質問者の方が求めているのは次のような動作でしょう。

  1. set_bmiでインスタンスHanakoのbmiを求め、値を返す。
  2. set_bmiで求めた値を基に、set_himandoで肥満度を判定する。

まず、set_bmiは現在のBMIを出力するだけで他に何も行えていませんから、計算したBMIをreturnを用いて返り値として返すようにします。  
・その場合、このメソッドが行っている動作は「set」ではなく「calculate」(計算する)
ですから、その略「calc」に変更し、set_bmiからcalc_bmiとします。

そして、calc_bmiメソッドの返り値(結果)からBMIを判断し、出力するとうまくいきます。  
・set_himandoという名前のsetも, 出力する関数なのでprint_himandoに変更します。

[code]

    class BMI:
    
    
        def __init__(self,name, weight, height):
            self.name = name
            self.weight = weight
            self.height = height
    
        def calc_bmi(self): # calcに変更
            return self.weight / (self.height**2) # 結果をreturnを使って返す
        
        @classmethod
        def print_himando(cls, bmi): # printに変更
            if bmi < 18:
                print("痩せ型")
            elif bmi < 25:
                print("普通体重")
    
    Hanako = BMI("はなこ",40,1.6)
    
    # print_himandoの引数bmiに,Hanako.calc_bmiで求めたBMIを代入
    Hanako.print_himando(Hanako.calc_bmi()) 
    
[/code]

※直接コンソールに入出力しない、命名はローマ字で行わないのが理想ですが、変更点が分かりにくくなるのでそのままにします。


CC BY-SA 4.0
2023-07-16T13:39:21.520
95652
2023-07-16T13:43:55.877
2023-07-16T13:43:55.877
59100
59100
95640
answer