ここ

2017-11-26 9 views
0

を指示されていないとき、Pythonは定義を実行するには、私のコードです:ここ

from __future__ import print_function 

import random 

from random import shuffle 
from random import randint 

class ship: 
    def __init__(self): 
     self.database_scientific = 100 
     self.database_cultural = 100 

def move_on(self): 


    def _do_damage(self): 
     self = self - randint(5,30) 

     print(module) 

    system_list = [ 
     'scientific database', 
     'cultural database' 
    ] 

    system_list_damaged = { 
     'scientific database': _do_damage(self.database_scientific), 
     'cultural database': _do_damage(self.database_cultural) 
    } 

    if randint(0,10) >= 1: 
     encounter_type = randint(1,4) 
     vulnerable_system = system_list[0] 
     vulnerable_system_number_two = system_list[1] 
     if encounter_type == 1: 
      print("\n[1] Allow it to hit %s. \n[2] Rotate so it hits another part of the ship." % vulnerable_system) 

      choice = raw_input("\n> ") 

      if choice == 1 and vulnerable_system == "surface probes": 
       print("\nThe asteroid crashes into the ship and knocks one of the surface probes loose.") 
       self.surface_probes = self.surface_probes - 1 
      elif choice == 1: 
       print("\nThe asteroid crashes into the %s causing irreparable damage." % vulnerable_system) 
       for vulnerable_system in system_list_damaged.keys(): 
        system_list_damaged[vulnerable_system](self) 
        break 
s = ship() 
s.move_on() 

私はmove_on()の定義を初期化するときに明示的に聞いていないとき、それは)(_do_damageを実行しています。誰がなぜこれが起こっているのか説明できますか?私は良い答えや解決策を見つけることができませんでした。私はもともとmove_on()の外に_do_damage()を持っていましたが、_do_damage()の定義を呼び出すことはできませんでした...

+1

ここに2つの '_do_damage'呼び出しがあります。 'system_list_damaged'を見てください。 –

+0

待ちます。実際に私は伝えることはできません。あなたのインデントを修正してください。 –

+0

しかし、それらは実行されるべきではありません。これは、system_listと破損するモジュールを一致させる辞書です。 – Joshua

答えて

0

関数呼び出しは辞書に値として格納されています。 これは、関数呼び出しの戻り値を関数自体ではなくに格納します。それをすべてを簡素化するために、今、(コメントごとに)system_listから

from random import choice 
element = choice(system_list) 

をランダムリスト要素を選択する

system_list_damaged = { 
    'scientific database': _do_damage, 
} 

# call: 
system_list_damaged['scientific database'](self.database_scientific) 

、辞書に保存されている関数を呼び出すには、行うことができます。

from random import choice 

system_list_damaged = { 
    'scientific database': [_do_damage, self.database_scientific] 
    'cultural database': [_do_damage, self.database_cultural] 
} 
# and to call a random one, 
function_to_call = choice(system_list_damaged.keys()) 
system_list_damaged[function_to_call][0](function_to_call[1]) 
+0

さて、どうすれば 'system_list'から項目をランダムに選択し、それを' system_list_damaged'に関連付けることができますか? – Joshua

+0

私はそのコードを実行しましたが、それは効果がないようです。 '_do_damage()'関数に何か問題がありますか? – Joshua

+0

変数 'module'がどこから来るのかわからないので、わかりません。 –