我是一个绝对的初学者,目前正在开发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
答案 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', '', '']
我意识到你是初学者,但我的建议是使用课程,这样你就可以使用getattr
。 getattr
是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