0

さて、私は、、、および他のいくつかの属性を持つことfoodになっているこのクラスを持っています。hunger

私はこのような定義を持っています:

def setfood():
     choice = input("Choice: ")
     if choice == "1":
           food = 1
           bored = 2
     if choice == "2":
           food = 4
           bored = 8
     return food
     return bored

そして、私はこのようなクラスを持っています。

class thing(object):
    def __init__(self, name, hunger = 0, boredom = 0):
        self.name = name
        self.hunger = hunger
        self.boredom = boredom

    def eat(self):
       setfood()
       self.hunger -= food
       self.boredom += bored

ええと、私が何をしても、それを機能させることはできません。グローバル変数についてこのエラーが発生し続けました。

プログラムの主要部分に追加しfood = 0ますbored = 0が、グローバル変数を定義に渡すことができないため、違いはありません。

クラスに定義を追加しようとしましたが、それでも違いはありませんでした。また、各変数を返すために個別の定義を作成しようとしました...これも機能しませんでした。何をしても勝てない。

私がそれを機能させることができる唯一の方法は、私がこれを行う場合です:

food = setfood()

私は多分それをこれに変えることができると思いました:

food = setfood(food)
food = setfood(bored)

しかし、それも機能しません...

しかし、両方の変数に対してそれを行う場合は、すべてを2回実行する必要があります。だから私は正確に何をしますか?私はとても迷い、イライラしています。

4

2 に答える 2

1

"NameError:グローバル名'food'が定義されていません"

foodif関数内では、ブロックの1つを入力したときにのみ定義されます。1または2以外の入力を入力していますか?osfoodが何にも定義されない場合。food次のようなデフォルト値を設定できます。

food = 0 # food stays at 0 for invalid choices
choice = input("Choice: ")
if choice == "1":
     food = 1
     bored = 2
if choice == "2":
     food = 4
     bored = 8
return food

また、2つの変数を返すには、returnステートメントでタプルを返す必要があります。

 return (food, bored)

その後、発信者は行うことができます

 (food, bored) = setfood()

意図したとおりに一度に2つの値を返すことができます

于 2013-02-01T03:09:34.670 に答える
0
def setfood(): 

setメソッドです。何も返す必要はありません。getfood()やgetboredStatus()などの他のメソッドを定義して、食べ物のステータスや退屈なステータスを返す必要があります。詳細については、こちらをご覧ください

于 2013-02-01T03:06:39.987 に答える