通过迭代 Python 中的字符串分配 class 变量
Assigning class variables through iteration of a string in 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 的变量,它是一个 class 变量。
我的第一个猜测是:
eval(n) = eval(str(ABBRIVIATIONS[(n.upper())]) +
'(' + colourFromCase(n) + ')
我知道我没有说清楚。我不认为 eval 或 exec 是可行的方法,但我不知道如何使用字典或 getattr() 来执行此操作,因为在我要使用 [=24= 将变量添加到面板之后]()
您始终可以使用包含对 class 类型的引用的字典映射,例如:
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
中的内容。另外,确保你的 figure classes 接受 white/black 字符串作为它们的初始参数。
我有问题想从字符串中分配变量名。我理解这叫做动态分配变量名,但是其他页面上的解决方案我认为不适用于这种情况,或者我根本不明白。
我正在尝试将一个字符串变成一个棋盘,棋盘是一个列表列表。每个列表一行,每个项目各自的列。
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 的变量,它是一个 class 变量。
我的第一个猜测是:
eval(n) = eval(str(ABBRIVIATIONS[(n.upper())]) +
'(' + colourFromCase(n) + ')
我知道我没有说清楚。我不认为 eval 或 exec 是可行的方法,但我不知道如何使用字典或 getattr() 来执行此操作,因为在我要使用 [=24= 将变量添加到面板之后]()
您始终可以使用包含对 class 类型的引用的字典映射,例如:
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
中的内容。另外,确保你的 figure classes 接受 white/black 字符串作为它们的初始参数。