Python 正在不间断地设置变量

Python 正在不间断地设置变量,python,list,variables,set,Python,List,Variables,Set,我试着在屏幕上移动东西。pygame仅用于简单的文本输入。这是我的一段非常简短的代码: import pygame pygame.init() sensitivity = 5 # How fast it moves rot=rot_speed = [0, 0] done=pause = False screen = pygame.display.set_mode((800, 450)) screen.fill((255,255,255)) pygame.display.flip() while

我试着在屏幕上移动东西。pygame仅用于简单的文本输入。这是我的一段非常简短的代码:

import pygame
pygame.init()
sensitivity = 5 # How fast it moves
rot=rot_speed = [0, 0]
done=pause = False
screen = pygame.display.set_mode((800, 450))
screen.fill((255,255,255))
pygame.display.flip()
while not done: # ---------- Main program loop ---------- #
    for event in pygame.event.get(): # If they pressed a key
        if event.type == pygame.QUIT: # Did they click quit?
            done = True
        if event.type == pygame.KEYDOWN: # Has a key been pressed?
            type_key = 1
            print("SENSITIVITY", sensitivity, rot_speed,".", rot)
            if event.key == pygame.K_w: # Up key pressed
                rot_speed[1] = sensitivity*-1
            if event.key == pygame.K_s: # Down key pressed
                rot_speed[1] = sensitivity
            if event.key == pygame.K_a: # Left key pressed
                rot_speed[0] = sensitivity*-1
            if event.key == pygame.K_d: # Right key pressed
                rot_speed[0] = sensitivity
            if event.key == pygame.K_SPACE:
                if pause == False:
                    pause = True
                else:
                    pause = False
            print("KEYS", sensitivity, rot_speed,".", rot)
    if pause == False:
        print("rot_speed", rot_speed)

我遇到的问题是,当我只尝试设置
rot\u速度时,变量
rot
rot\u速度
被设置。有什么想法吗?当我没有列表和单个变量的速度时,它工作了,但我可能用其他方式更改了代码。在变量设置周围放置print语句,这很奇怪。

尝试编写
rot,rot\u speed=[0,0],[0,0]
。这会将
rot
rot\u速度
设置为单独的值。目前您有
rot=rot\u speed=[0,0]
,这意味着您正在将
rot
设置为指向
rot\u speed
的指针。因此,只有当
rot\u速度改变时,它才会改变

试着写
rot,rot\u速度=[0,0],[0,0]
。这会将
rot
rot\u速度
设置为单独的值。目前您有
rot=rot\u speed=[0,0]
,这意味着您正在将
rot
设置为指向
rot\u speed
的指针。因此,只有当
rot\u速度改变时,它才会改变

您为两个名称分配了一个列表对象:

rot=rot_speed = [0, 0]
本文件不分配两份副本;您只需要有两个不同的标签,它们都引用同一事物。
rot\u speed
的任何突变也将通过
rot
可见:

>>> rot = rot_speed = [0, 0]
>>> rot is rot_speed   # they are the same object
True
>>> rot[0] = 42  # mutating the list
>>> rot_speed    # changes visible in both places
[42, 0]
创建两个单独的列表:

rot = [0, 0]
rot_speed = [0, 0]
您可能想了解Python变量(名称)是如何工作的。我强烈推荐Ned Batcheld。

您为两个名称分配了一个列表对象:

rot=rot_speed = [0, 0]
本文件不分配两份副本;您只需要有两个不同的标签,它们都引用同一事物。
rot\u speed
的任何突变也将通过
rot
可见:

>>> rot = rot_speed = [0, 0]
>>> rot is rot_speed   # they are the same object
True
>>> rot[0] = 42  # mutating the list
>>> rot_speed    # changes visible in both places
[42, 0]
创建两个单独的列表:

rot = [0, 0]
rot_speed = [0, 0]

您可能想了解Python变量(名称)是如何工作的。我强烈推荐内德·巴奇尔德。

@VasilisG。忘了说-每个列表需要两个项目,一个是x,一个是y
rot=rot\u speed=[0,0]
将相同的列表分配给两个变量。您正在分配给
rot
。如果您不想分配给
rot
,则只需从该行中删除
rot=
。如果您希望这两个变量成为两个单独的列表对象,则分配两个单独的列表对象。您现在在他们之间共享一个对象,但您没有得到两个副本。@MartijnPiers让他们预设列表值。这对于更大的代码很重要。问题是当你按下箭头键时…@VasilisG。忘了说-每个列表需要两个项目,一个是x,一个是y
rot=rot\u speed=[0,0]
将相同的列表分配给两个变量。您正在分配给
rot
。如果您不想分配给
rot
,则只需从该行中删除
rot=
。如果您希望这两个变量成为两个单独的列表对象,则分配两个单独的列表对象。您现在在他们之间共享一个对象,但您没有得到两个副本。@MartijnPiers让他们预设列表值。这对于更大的代码很重要。问题是当你按下箭头键时…非常感谢!我会在它允许的时候接受答案!不客气!当我们第一次开始编程时,这样的事情对我们所有人来说都是令人沮丧的。是的,我也学会了,但我忘了这太遥远了:)太感谢了!我会在它允许的时候接受答案!不客气!当我们第一次开始编程时,这样的事情对我们所有人来说都是令人沮丧的。是的,我也学会了,但我忘了这太遥远了:)