是否可以在Python(2.7)中将字符串转换为列表索引?

时间:2016-12-28 07:47:07

标签: python-2.7

我是一个绝对的初学者,目前正在开发Tic Tac Toe游戏,在下面的例子中我坚持如何将字符串(例如“row1 [0]”)转换为列表索引(例如row1 [0]) 。基本上,我不确定为什么eval(aa)= a不起作用,但是,例如,row1 [0] = a确实有效(是的,我知道eval()通常不赞成但却无法找到任何替代品,如字典,执行和编译都失败了)。

请注意,这不是完整的代码,只是我尝试解决上述问题之一。非常感谢您对此特定步骤的意见,到目前为止我一直无法找到答案。感谢。

row1 = [_,_,_]
row2 = [_,_,_]
row3 = [_,_,_]
a = raw_input("Player 1, choose your marker - X or O: ")
aa = raw_input("Player 1, choose box (row#[box # - 1]): ")
#Attempt at assigning "X" or "O" to a row index.
eval(aa) = a
print row1
print row2
print row3

1 个答案:

答案 0 :(得分:0)

eval('row1[0]') = 'X''a' = 'b'不起作用的原因而无法正常工作。

eval('row1[0]')会在索引0处返回列表row1,而不是对它的引用。

如果row1['', '', ''],则eval(row1[0])将返回一个空字符串(''),您无法将字符串'X'分配给一个空字符串。

如果您想使用eval,则用户必须单独输入列表名称和索引。

row1 = ['', '', '']
eval('row1')[0] = 'X'
print row1
# ['X', '', '']


我意识到你是初学者,但我的建议是使用课程,这样你就可以使用getattrgetattr是Python中的一个内置函数,它接受一个对象和一个字符串,并返回具有该名称的对象属性。

class Board(object):
     def __init__(self):
          self.row1 = ['', '', '']
          self.row2 = ['', '', '']
          self.row3 = ['' ,'', '']

board = Board()
shape = raw_input("Player 1, choose your marker - X or O: ")
row_and_col = raw_input("Player 1, choose box (row#,col#): ")   # user will input 1,0
                                                                # for example

row_number, col_number = row_and_col.split(',')  # split divides the string it is called
                                                 # upon with the character it gets as
                                                 # the argument. In this case
                                                 # 'row_and_col' is '1,0' so after this
                                                 # line row_number is '1' and col_number
                                                 # is '0'

relevant_row = getattr(board, 'row' + row_number)
# now relevant_row actually holds the reference to the list,
# not its value as eval would have returned

relevant_row[int(col_number)] = shape