【问题标题】:Cannot assign operator on python3无法在 python3 上分配运算符
【发布时间】:2016-04-15 18:03:34
【问题描述】:

我正在学习 python 并尝试在函数中编写我的代码。

## set total sticks number
stick_left = 20
## Given hints, this for statement shows sticks
for _ in range(5): print('|  '*stick_left)
## this condition lasts until stick = 0
while stick_left>0:
    ## first player
    first_player=input('Player1: please pick sticks up to 3 ')
    if first_player>3 or first_player<0:
        print('Please pick between 1-3 stick(s)')
    else:
        stick_left-=first_player
        if stick_left<=0:
            print ('Player1 lost')
            break
        else:
            print('There is %d stick(s) left' %stick_left) ## print how many sticks left
            for _ in range(5): print('|  ' * stick_left)
    ## second player
    second_player = input('Player2: Please pick sticks up to 3 ')
    if second_player > 3 or second_player < 0:
        print('Please pick between 1-3 stick(s)')
    else:
        stick_left -= second_player
        if stick_left <= 0:
            print ('Player2 lost')
            break
        else:
            print('There is %d stick(s) left' % stick_left)
            for _ in range(5): print('|  ' * stick_left)

这是我的代码包含函数

player =0
def player():
    for i in 2:
        player%d %i= input('Player %d:  Please pick sticks up to 3' %i)
        if player >3 or player <0:
            print('Please pick between 1-3 stick(s)')

在第 4 行,我想让它打印 player1 player2,但我只是注意到我不能像那样分配运算符。 我试过player_%d %i,但没有运气。有人可以给我建议吗? 谢谢!

【问题讨论】:

  • 你不能有一个名为player的变量和一个同名的函数
  • @ForceBru 你可以,它只会重新定义变量。所以函数内部的player 将引用函数,而不是0
  • @TuomasLaakkonen,所以这会导致混乱并做一些 OP 不想要的事情
  • 在此处使用列表;一般情况见this question

标签: python operator-keyword


【解决方案1】:

您不能像这样动态定义变量名。使用字典。

players = {}
def player():
    for i in range(2):
        players[i] = input("Player %d: Please pick sticks up to 3" % (i,))
        # etc

【讨论】:

  • 也可以使用list(虽然是0索引)。
  • 在这种情况下,当然可以,尽管在我看来,甚至 需要 为每个玩家单独的变量。
【解决方案2】:

exec() 函数将为您工作。请参考以下代码。

player =0
def player():
    for i in range(1,3):
        exec("player%d = input('Player%d =  Please pick sticks up to 3 ')" %(i,i))
player()

下面是o/p。

Player1 = 请选择最多 3 个 1 的木棍

Player2 = 请选择最多 3 2 的木棍

【讨论】:

  • 虽然这可行,但请不要向新程序员推荐 exec。这里可能会出现大量可笑的脚射。
  • 而这不会实际上在 Python 3 中工作(尽管它在 Python 2 中可以)。如果你在循环之后添加print(player1),它将在 Py2 中工作并在 Py3 中给你一个 NameError。
  • @Pshiw:正如我所说,尝试在循环后添加print(player1)。这将在 Python 3.4 中使用 NameError: name 'player1' is not defined 失败,即使它会在 Python 2.7 中成功,因为 exec 的行为方式发生了变化。
猜你喜欢
  • 2014-07-01
  • 1970-01-01
  • 2021-04-06
  • 1970-01-01
  • 1970-01-01
  • 2020-06-20
  • 1970-01-01
  • 1970-01-01
  • 2021-01-13
相关资源
最近更新 更多