2017-11-14 11 views
-1

よくわからない質問も正しく質問していますが、説明します。私はクラスを作成し、そのクラスにインスタンスを作成しました。問題は、入力によってユーザーが選択したインスタンスを使用できるようにすることです。私がチェスゲームを作りたいとしましょう。私は作品を前方に(おそらく後方に)、左に、そして右に動かすことができるようにしたい。クラス内にメソッドを作成してそのアイテムを移動し、各ピースに名前、x-coord、およびy-coordがあるとします。これは、私は、変数部分に割り当てられている入力が文字列であるので、私はエラーを取得する今 文字列としてのユーザー入力は、クラス内の変数を呼び出すために使用することはできません

class Piece(object): 
    def __init__(self, x , y): 
     self.x = x 
     self.y = y 

    def move(self, amount, direction): 
     if direction == 'right': 
      self.x = self.x + amount 
     if direction == 'left': 
      self.x = self.x - amount 
     if direction == 'up': 
      self.y = self.y + amount 
     if direction == 'down': 
      self.y = self.y - amount 

rook = Piece(0,0) 

piece = input('What piece would you like to move?') 

#Assume that the user types rook after this prompt 

piece.move(4,'right') 

を取得する問題であり、私はrook.moveを必要とするとき、私は実際には「rook'.move を取得していますint(var)、float(var)、str(var)を使って変数を変更することはできますが、変数をクラス変数に変更するにはどうすればよいでしょうか。

+0

あなたはエラーを含め、あなたのコードの残りの部分を投稿することができますか?できるだけ多くの情報を含めることは決して悪い考えではなく、やりたいことについてもう少し明確にするかもしれません。 –

+0

あなたの助けになったら私の答えを正確に記してください:) – alexisdevarennes

+0

あなたの質問に対するあなたの更新は私が疑ったものです:)私の答えはあなたの問題を解決するはずです。 – alexisdevarennes

答えて

1

あなたのクラスにピース名をマップする辞書を用意することです。

ので

pieces = { 
    'Queen': Piece(0,0), 
    'Tower': Piece(0,0), 
    'Rook' Piece(0,0) 
} 

inp = input('Which piece would you like to move?') 

if inp in pieces: 
    pieces[inp]().move(4, right) 
else: 
    print('No such piece: %s - Valid pieces: %s' % (inp, pieces.keys())) 
+0

なぜdownvote? – alexisdevarennes

+0

あなたの回答をありがとう、私は実際に私はeval()を認識しているが、私は現在学校にいるので、私の教授が承認する良い練習を形成する必要があるので、私は何かを避けるために最善を尽くす必要があります"やりたいことはありません"。これは、私が将来コーディングを続ける予定であり、コーディング/プログラミングの基礎において貧しい習慣を開発し、単にこの特定の問題の一角を削るのではないからです。私はこの問題を解決するより受け入れやすい方法を探していますが、ありがとう、私は本当にあなたの応答に感謝します。また、私は追加したい、私はdownvoteしなかった。 –

+0

2つの答えがあります – alexisdevarennes

関連する問題