文字列から変数名を割り当てたいという問題があります。私はこれが動的に変数名を割り当てると考えていますが、私はこの状況には当てはまらないと思っている他のページのソリューション、あるいは私は単に理解していません。Pythonでの文字列の反復によるクラス変数の割り当て
私は文字列をチェスボードに変換しようとしています。ボードはリストのリストです。各列には行があり、各項目にはそれぞれの列があります。
def splitString(string, length):
"""Split string into lengths on n."""
return [string[i:i + length] for i in range(0, len(string), length)]
def colourFromCase(letter):
"""Work out if a letter is uppercase, therefore white."""
if letter.isupper():
return 'white'
else:
return 'black'
def buildBoard(height, width):
"""Build a board."""
global rows
rows = []
board = 'CNBHKDRNCPPPPPPPPPpppppppppcnrdkhbnc'
split = splitString(board, width)
for n in split[0]:
className = eval(str(ABBRIVIATIONS[(n.upper())]) +
'(' + colourFromCase(n) + ')
最後のforループは、ビルドボード機能に重点を置いています。私はクラス変数であるnの名前で変数を作る必要があります。
私の最初の推測では、次のようになります。
eval(n) = eval(str(ABBRIVIATIONS[(n.upper())]) +
'(' + colourFromCase(n) + ')
私はこの信じられないほど明らかにされていませんでした理解しています。私はevalやexecを使ってはいけないと思っていますが、board.appendを使ってボードに変数を追加しようとしてから辞書やgetattr()を使う方法がわかりませんあなたはFIGURES
辞書で参照可能なすべての数字を持っていることを確認し、もちろん
FIGURES = {"B": BType, "C": CType, "D": DType, "H": HType, "K": KType, "N": NType, "R": RType}
def buildBoard(height, width):
"""Build a board."""
global rows
rows = []
board = 'CNBHKDRNCPPPPPPPPPpppppppppcnrdkhbnc'
split = splitString(board, width)
for n in split[0]:
figure = FIGURES[n.upper()](colourFromCase(n))
# etc.
と彼らはを指しているします)
これを行わないでください。ほとんど必要ではありません。代わりに辞書を使用して文字列と値のペアを格納します。 'eval'の使用は赤旗を発生させるはずです。 – Carcigenicate
私はこれを例にして私をいくつかの場所にリンクすることができますが、私は何をgoogleにするのかわかりません... – Skidushe
Pythonの辞書( '{}')は何ですか? – Carcigenicate