通过在Python中迭代字符串来指定类变量
问题描述:
我想要从字符串中分配变量名称的问题。我知道这被称为动态分配变量名称,但其他页面上的解决方案我不认为适用于这种情况,或者我根本不明白。通过在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) + ')
重点在于buildBoard函数 - 最后一个for循环。我需要使用一个类变量n的名称来创建一个变量。
我的第一个猜测是:
eval(n) = eval(str(ABBRIVIATIONS[(n.upper())]) +
'(' + colourFromCase(n) + ')
我明白我没有使这个令人难以置信的清晰。我不认为eval或exec是要走的路,但是我不明白我可以如何使用字典或getattr()来做到这一点,因为在我将这个变量添加到board.append( )
答
您可以随时使用字典图保持引用类类型,例如:
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.
当然,请确保您有在FIGURES
字典中引用的所有可能的数据,并确保它们指向你现在在ABBRIVIATIONS
存储什么。另外,请确保您的图类接受白色/黑色字符串作为其init参数。
不要这样做。几乎是不必要的。使用字典来存储字符串/值对。 “eval”的使用应该会引起红旗。 – Carcigenicate
您有什么机会可以将我链接到某个地方并且带有这方面的示例,我不知道谷歌是怎么回事...... – Skidushe
您知道Python中的字典('{}')是什么吗? – Carcigenicate