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