質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

3回答

3539閲覧

○○ is not definedが解決できない

bellsmarket

総合スコア62

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2017/12/28 21:43

###前提・実現したいこと
Pythonの理解を深める為にjavaのコードを
Pythonに書き換えております。

javaでは下記の関数はprivate関数でしたので
__digestFood(foodType)にしても上手く動作しません。
クラスで試してもインスタンスで試しても関数をpublicにしても
動きません。
どうしたら改善しますでしょうか?
###発生している問題・エラーメッセージ

Traceback (most recent call last): File "パス/human.py", line 88, in <module> Human.eatFood("self","魔法の水") File "パス/human.py", line 72, in eatFood __digestFood(foodType) NameError: name '_Human__digestFood' is not defined

また__digestFood関数をpublicにして直接実行すると
self.vitality += 10と
self.magic += 10
の2行が引っかかって
TypeError: must be str, not int
と文字列にしろとエラーが出力されます。
Pythonは数値を文字列にその都度文字列に直さないといけないのでしょうか?
そのまま数値で通すことはできないのでしょうか?

###該当のソースコード

python

1#/usr/bin/python3 2def s(w): 3 return str(w) 4 5class Human: 6 # 基本のステータスを宣言 7 name = "" 8 gender = "" 9 length = "" 10 weight = "" 11 vitality = "" 12 magic = "" 13 14 # コンストラクタ 15 # def __init__(self): 16 17 #getter,setter 名前-------------------------------------- 18 def getName(self): 19 return self.name 20 def setName(self, name): 21 self.name = "彼の名前は" + name + "です。" 22 23 # getter,setter 性別-------------------------------------- 24 def getGender(self): 25 return self.gender 26 def setGender(self,gender): 27 self.gender = gender 28 29 30 # getter,setter 身長-------------------------------------- 31 def getLength(self): 32 return self.length 33 def setLength(self,length): 34 self.length = length 35 36 37 # getter,setter 体重-------------------------------------- 38 def getWeight(self): 39 return self.weight 40 def setWeight(self,weight): 41 self.weight = weight 42 43 44 # getter,setter 体力-------------------------------------- 45 def getvitality(self): 46 return self.vitality 47 def setvitality(self,vitality): 48 self.vitality = vitality 49 50 # getter,setter 魔力-------------------------------------- 51 def getMagic(self): 52 return self.magic 53 def setMagic(self,magic): 54 self.magic = magic 55 print(type(magic)) 56 57 # 話す-------------------------------------- 58 def talk(self,about): 59 print(about) 60 61 # 食べる-------------------------------------- 62 def eatFood(self,food): 63 foodType = 0 64 if food == "薬草": 65 foodType = 1 66 elif food == "魔法の水": 67 foodType = 2 68 else: 69 foodType = 3 70 # 確認用 71 print(foodType) 72 __digestFood(foodType) 73 # 74 # # 消化する-------------------------------------- 75 def __digestFood(self,foodType): 76 if foodType == 1: 77 self.vitality += 10 78 print("HPが10回復した") 79 elif foodType == 2: 80 print("MPが10回復した") 81 self.magic += 10 82 else: 83 print("お腹を壊してしまった") 84 self.vitality -= 1 85 86 87Hero =Human() 88Hero.eatFood("エリクサ") 89Human.eatFood("hoge","魔法の水") 90

###試したこと
課題に対してアプローチしたことを記載してください

###補足情報(言語/FW/ツール等のバージョンなど)
Python3.6
Mac OSX 10.12.6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

1,NameError: name '_Human__digestFood' is not definedの件

Pyhton

1print(foodType) 2__digestFood(foodType)

Pyhton

1print(foodType) 2self.__digestFood(foodType)

2,TypeError: must be str, not intの件
文字列型で宣言してるので、数値型にしてください。

Pyhton

1 vitality = "" 2 magic = ""

Pyhton

1 vitality = 0 2 magic = 0

3,Human.eatFood("hoge", "魔法の水")の件
これは一体何を行いたいのでしょうか?
関数定義はdef eatFood(self, food):と宣言しているので文字列は許容しませんがー。。


変更後のソース

Pyhton

1# -*- coding: utf-8 -*- 2 3 4def s(w): 5 return str(w) 6 7 8# python 3のクラス宣言 9class Human(object): 10 # 基本のステータスを宣言 11 name = "" 12 gender = "" 13 length = "" 14 weight = "" 15 vitality = 0 16 magic = 0 17 18 # コンストラクタ 19 # def __init__(self): 20 21 #getter,setter 名前-------------------------------------- 22 def getName(self): 23 return self.name 24 def setName(self, name): 25 self.name = "彼の名前は" + name + "です。" 26 27 # getter,setter 性別-------------------------------------- 28 def getGender(self): 29 return self.gender 30 def setGender(self, gender): 31 self.gender = gender 32 33 34 # getter,setter 身長-------------------------------------- 35 def getLength(self): 36 return self.length 37 def setLength(self, length): 38 self.length = length 39 40 41 # getter,setter 体重-------------------------------------- 42 def getWeight(self): 43 return self.weight 44 def setWeight(self, weight): 45 self.weight = weight 46 47 48 # getter,setter 体力-------------------------------------- 49 def getvitality(self): 50 return self.vitality 51 def setvitality(self, vitality): 52 self.vitality = vitality 53 54 # getter,setter 魔力-------------------------------------- 55 def getMagic(self): 56 return self.magic 57 def setMagic(self, magic): 58 self.magic = magic 59 print(type(magic)) 60 61 # 話す-------------------------------------- 62 def talk(self, about): 63 print(about) 64 65 # 食べる-------------------------------------- 66 def eatFood(self, food): 67 foodType = 0 68 if food == "薬草": 69 foodType = 1 70 elif food == "魔法の水": 71 foodType = 2 72 else: 73 foodType = 3 74 # 確認用 75 print(foodType) 76 self.__digestFood(foodType) 77 # 78 # # 消化する-------------------------------------- 79 def __digestFood(self, foodType): 80 if foodType == 1: 81 self.vitality += 10 82 print("HPが10回復した") 83 elif foodType == 2: 84 print("MPが10回復した") 85 self.magic += 10 86 else: 87 print("お腹を壊してしまった") 88 self.vitality -= 1 89 90 91def main(): 92 Hero = Human() 93 Hero.eatFood("エリクサ") 94 #Human.eatFood("hoge", "魔法の水") 95 96 97if __name__ == '__main__': 98 main() 99

□余談
1,name,gender,length,weight,vitality,magicがクラス変数になってます。
インスタンス変数で宣言したい時はコンストラクタ内で宣言してください。

Python

1def __init__(self): 2 self.name = "" 3

2,プロパティの宣言は@propertyデコレータを使うとソースを読む人へのヒント情報になります。
興味があるなら、ぐぐってみてくださいな。

投稿2017/12/28 23:21

umyu

総合スコア5846

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

self.__digestFood(foodType)で呼び出してください

投稿2020/03/20 07:07

dark-eater-kei

総合スコア1248

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

つself.__digestFood(foodType)

投稿2017/12/28 23:36

hichon

総合スコア5737

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問