【发布时间】:2017-02-14 17:25:55
【问题描述】:
我想从字符串中分配变量名的问题。我知道这称为动态分配变量名,但我认为其他页面上的解决方案不适用于这种情况,或者我根本不明白。
我正在尝试将字符串变成棋盘,棋盘是列表的列表。每个列表一行,每个项目对应的列。
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( )
【问题讨论】:
-
不要这样做。几乎从不需要。改用字典来存储字符串/值对。使用
eval应该会引起危险。 -
你能不能把我链接到一些有这个例子的地方,我不知道用谷歌搜索什么......
-
你知道 Python 中的字典 (
{}) 是什么吗? -
我有,但我不知道如何将它用于此用途...
-
您正在尝试动态创建变量。假设您要创建一个名为
something2的变量,其中包含3。为什么不将字符串"something2"作为键添加到以3为值的字典中?
标签: python iteration dynamic-variables