2016-05-28 29 views
1
def equip(x): 
    global bag_sword 
    global bag_chest 
    global bag_gloves 
    global bag_helmet 
    while x == "iron sword" and "iron sword" in bag: 
     if bag_sword: 
      print "You can't have 2 weapons equipped!" 
      x = "" 
     print "\nYou equip the iron sword.\n" 
     bag.remove("iron sword") 
     bag_sword.append("iron sword") 

これを初めて実行するとうまく動作しますが、2回目に実行すると何も起こりません。Python関数が何も返さない

bag_swordはリスト

テストコードです:私はinput[]

の代わりに変数を使用してみました

bag.append("iron sword") 
if input1[:5] == "equip": 
    print input1[:5] 
    equip(input1[6:]) 
    print input1[6:] 
I type into the console 'equip iron sword' 

(それは構文ではありません)

+0

グローバル変数を読み込んだり変形したりするので、呼び出すたびに必ず同じことをするわけではありません。あなたは何をしたいですか? – nwk

+0

何もない場合は、bag_swordに武器を追加し、既に存在する場合は2つを装備できないとプレイヤーに伝えます。 –

答えて

2

ここ説明されているように機能を動作させる方法です:

bag_sword = [] 

def equip(x): 
    global bag_sword 
    if x == "iron sword": 
     if "iron sword" in bag_sword: 
      print "You can't have 2 weapons equipped!" 
     else: 
      bag_sword.append("iron sword") 

print bag_sword # Prints "[]". 
equip("iron sword") # Prints nothing. Puts the string "iron sword" in bag_sword. 
print bag_sword # Prints "['iron sword']". 
equip("iron sword") # Prints "You can't have 2 weapons equipped!". bag_sword is unchanged. 
+0

私はあなたにいくつかの調整を加えてこれを修正しました。なぜ私はwhileループを使用したのかわかりません、私は数日の間これで今heh、ありがとう。 –

0

あなたは(また、グローバル変数を取り除くしようとする)NWKのソリューションは、より一般的にすることができます。

def equip(item, bag): 
    if item in bag: 
     print "You can't have 2 {}s equipped!".format(item) 
    else: 
     bag.append(item) 

def main(): 
    bag_sword = [] 
    print bag_sword 
    equip("iron sword", bag_sword) 
    print bag_sword 
    equip("iron sword", bag_sword) 

if __name__ == '__main__': 
    main() 

また、辞書やクラスは、いくつかの袋リストよりも良い選択肢だろうと私には思える:

def equip(item, slot, inventory): 
    if inventory[slot] == item: 
     print 'Already equipped.' 
    else: 
     inventory[slot] = item 
     print item.capitalize(), 'equipped.' 

def main(): 
    inventory = { 
     'weapon': None, 
     'gloves': None, 
     } 

    equip('iron sword', 'weapon', inventory) 
    print inventory 
    equip('iron sword', 'weapon', inventory) 

if __name__ == '__main__': 
    main() 
関連する問題