在更改.format中的变量后,为什么字符串格式的全局变量保持不变?

时间:2019-07-26 05:46:07

标签: python python-3.x string-formatting tic-tac-toe

python的新手,尝试编写井字游戏,并最终遇到这种情况,在这种情况下,我似乎无法打印出表的版本(多行字符串),并且将新O分配给了输入,即使将O分配给该位置的变量也是如此。

下面的代码不完整,目前仅关注上面的问题。

 mydict=dict.fromkeys(['a1','a2','a3','b1','b2','b3','c1','c2','c3'],' ')
table = '       |       |       \n' \
        '   {}   |   {}   |   {}   \n' \
        '_______|_______|_______\n' \
        '       |       |       \n' \
        '   {}   |   {}   |   {}   \n' \
        '_______|_______|_______\n' \
        '       |       |       \n' \
        '   {}   |   {}   |   {}   \n' \
        '       |       |     '.format(mydict['a1'],mydict['a2'],mydict['a3'],mydict['b1'],mydict['b2'],mydict['b3'],mydict['c1'],mydict['c2'],mydict['c3'])

def assign(i):
    if q%2==0:
        mydict[str(i)]='O'
        print(mydict)
    else:
        mydict[str(i)]='X'

q=2
while q%2==0:
    x=input('Player 1, please choose your position:')
    assign(x)
    print(table)

当我跑步时:

TIC TAC TOE
       |       |       
       |       |       
_______|_______|_______
       |       |       
       |       |       
_______|_______|_______
       |       |       
       |       |       
       |       |       
Player 1, please choose your position:a1
{'a1': 'O', 'a2': ' ', 'a3': ' ', 'b1': ' ', 'b2': ' ', 'b3': ' ', 'c1': ' ', 'c2': ' ', 'c3': ' '}
       |       |       
       |       |       
_______|_______|_______
       |       |       
       |       |       
_______|_______|_______
       |       |       
       |       |       
       |       |       
Player 1, please choose your position:

如您所见,O不在位置a1中出现。

3 个答案:

答案 0 :(得分:1)

修改mydict是不够的,还需要其他一些更改:

mydict=dict.fromkeys(['a1','a2','a3','b1','b2','b3','c1','c2','c3'],' ')
def table():
    table = '       |       |       \n' \
            '   {}   |   {}   |   {}   \n' \
            '_______|_______|_______\n' \
            '       |       |       \n' \
            '   {}   |   {}   |   {}   \n' \
            '_______|_______|_______\n' \
            '       |       |       \n' \
            '   {}   |   {}   |   {}   \n' \
            '       |       |     '.format(mydict['a1'],mydict['a2'],mydict['a3'],mydict['b1'],mydict['b2'],mydict['b3'],mydict['c1'],mydict['c2'],mydict['c3'])
    return table
def assign(i, q):
    if q%2 == 0:
        mydict[str(i)]='O'
        print(mydict)
    else:
        mydict[str(i)]='X'
    print(table())

q=0
while ' ' in mydict.values():
    x=input('Player %s, please choose your position:' % ((q % 2) + 1))
    q += 1
    assign(x, q)

答案 1 :(得分:0)

格式化仅会创建字符串的新副本,并且不会应用于任何进一步的更改。您应该创建一个函数来格式化表格并使用基本模板。

table = ('       |       |       \n'
         '   {}   |   {}   |   {}   \n'
         '_______|_______|_______\n'
         '       |       |       \n'
         '   {}   |   {}   |   {}   \n'
         '_______|_______|_______\n'
         '       |       |       \n'
         '   {}   |   {}   |   {}   \n'
         '       |       |     ')


def format_table():
    return table.format(mydict['a1'], mydict['a2'],
    mydict['a3'], mydict['b1'],
    mydict['b2'], mydict['b3'],
    mydict['c1'], mydict['c2'],
    mydict['c3'])

现在,当您打印表格时,只需执行以下操作:

print(format_table())

答案 2 :(得分:0)

代码不起作用的原因是因为每次打印变量表时都不会调用format。为了保留格式并使用新值更新字符串,您需要每次都进行调用。我的建议如下。

mydict=dict.fromkeys(['a1','a2','a3','b1','b2','b3','c1','c2','c3'],' ')
tablestring = '       |       |       \n' \
            '   {}   |   {}   |   {}   \n' \
            '_______|_______|_______\n' \
            '       |       |       \n' \
            '   {}   |   {}   |   {}   \n' \
            '_______|_______|_______\n' \
            '       |       |       \n' \
            '   {}   |   {}   |   {}   \n' \
            '       |       |     '

def assign(i):
    if q%2==0:
        mydict[str(i)]='O'
        print(mydict)
        print(tablestring.format(mydict['a1'],mydict['a2'],mydict['a3'],mydict['b1'],mydict['b2'],mydict['b3'],mydict['c1'],mydict['c2'],mydict['c3']))
    else:
        mydict[str(i)]='X'