私はstackoverflowで新しく、私はこのコードの問題について私の最初の質問をしたいと思います。私はPythonでオブジェクトを学習するために書きました。 辞書を使ってオブジェクトの作成を呼び出そうとしています。 私の目的は、数のおかげで、例えば、私は辞書newch = {1 : Character.new_dragon(), 2 : Character.new_goblin()}
を持っていると私はそれが新しいドラゴン(@classmethod new_dragon)を作成し、Player1dictonaryを使ってオブジェクトを作成するには?
に割り当てる必要がありますPlayer1 = newch[1]
呼び出すときに問題がときということであるオブジェクトを作成することです私はプログラムを実行すると、Character.new_dragon()
とCharacter.new_goblin()
が自動的に呼び出されます(私はコントロールプリントを置く)が、 "DRAGO"という要求の後に "どのプレイヤー"と書くか?機能は、制御プリント
import random
class Character:
def __init__(self,idd,height,weight,att,defe):
self.idd=idd
self.height=height
self.weight=weight
self.att=att
self.defe=defe
@classmethod
def new_goblin(cls):
print('newgoblin')
return cls(1,getr(1,1.5,0.1),getr(40,60,0.5),getr(5,15,1),getr(6,10,1))
@classmethod
def new_dragon(cls):
print('newdrago')
return cls(2,getr(20,30,1),getr(500,2000,5),getr(50,150,3),getr(20,100,3))
def getr(start,stop,step): #returns float
x=random.randint(1, 1000)
random.seed(x)
return random.randint(0, int((stop - start)/step)) * step + start
play={1:'p1', 2:'p2', 3:'p3', 4:'p4'} #dict for players
newch={1:Character.new_dragon(),2:Character.new_goblin()} ############This doesn't work
i=1
while True:
char=input("which player? Drago or Goblin?").upper()
if(char=="DRAGO"):
play[i]=newch[1] #here i try to call Character.new_dragon()
i+=1
break
elif(char=="GOBLIN"):
play[i]=newch[2]
i+=1
break
print("write \'Drago\' or \'Goblin\'")
print(play[1].height, play[1].weight, play[1].att, play[1].defe)
がないので、あなたが辞書をこのように初期化されている場合はここで、あなたは私を助けることができれば、私は非常に喜んでいるだろう、私のコードです感謝
ありがとうございました! :) – Matte
あなたのブレークは、他のプレイヤーが自分のキャラクターを選ぶのを防ぎます。 Turnの答えは下記の私のコメントを見てください。また、 "どのキャラクター?"ではなく、 "どのプレイヤー"に聞くべきですか?提案されているもののもう1つの代替案は、入力の結果をif elseツリーの引数として関数を呼び出す関数に送ることです。だからあなたはこの問題を抱えません。 –
はい、私はしばらくの間、機能を実装します。ありがとう – Matte