【问题标题】:UPDATING a variable inside a loop (python)更新循环内的变量(python)
【发布时间】:2021-06-29 16:05:24
【问题描述】:

我正在尝试使用循环为我的棋盘游戏创建骰子。但是,变量 pos 不会自我更新,因此下次触发 for 循环时,它会从其先前的值而不是 0 开始。在每次触发 for 循环时,pos 默认从 0 开始并且不会每次运行后都不会更新。这意味着玩家总是会回到 平方 0。

这是我迄今为止编写的代码:

    w = True

    while w == True:
        dice1 = random.randint(1, 6)

        player1_dice = input("\nBULL (P1): Please press 'ENTER' to roll the dice ")
        if player1_dice == "":
            print("BULL (P1) rolled a", dice1)

        elif player1_dice != "":
            print("BULL (P1): Please make sure to press 'ENTER' ")

        dieValue = dice1
        pos = 0

        for pos in range(dieValue) :
            posi = pos + 1
            P1_pos =  player1.goto(p1_list[posi])
            pos = posi
            

【问题讨论】:

  • 为什么你认为pos = 0 行不会将变量重置为0?
  • 您不能让pos 既是保留值又是循环变量。将pos = 0 移出循环,并将循环变量更改为i。然后循环变为pos += 1 / P1_pos = platyr1.goto(p1_list[pos])
  • 谢谢,现在可以使用了。我不知道为什么我一开始就没有想到。

标签: python for-loop variables while-loop dice


【解决方案1】:

如果我没听错,那么玩家的位置应该作为这个函数/方法的参数传递。然后你将 dice1 和这个位置相加得到一个新位置。或者你可以通过 player1.pos() 访问玩家的位置。

另一个奇怪的事情是你将pos初始化为0,然后你还在for循环中使用pos。在你的 for 循环中,pos 在第一次迭代中为 0,在第二次迭代中为 1,依此类推,直到你达到 pos == dice1-1 的值(如果有范围(4),@ 的值987654325@ 将是 0,1,2,3)。

【讨论】:

    【解决方案2】:

    pos 本身在循环中更改时不会更改,因为range(dieValue) 是 for 循环正在循环的可迭代对象。您可以将范围精确地视为(0, 1, 2, ..., dieValue - 1)

    要保持播放器的位置,您必须在 while 循环之外记录位置。此外,您应该将 for 循环更改为

    for _ in range(dieValue):
        pos += 1
        P1_pos = player1.goto(p1_list[pos])
    

    【讨论】:

    • 啊,我想我现在明白你的意思了。我会修改答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    • 2018-12-25
    • 2019-03-05
    相关资源
    最近更新 更多