0

在尝试在乒乓球比赛中为球创造一些运动时,我遇到了一个最烦人的问题。x 和 y 坐标的值不想改变(因为缺少更好的词)。也许这是由于 python 中字符串的不可变特性,或者我对 Python 处理变量的方式有误解。任何帮助将是最受欢迎的:)

x_coordinate = 100
y_coordinate = 100

NORTH_EAST = [x_coordinate + 1, y_coordinate - 1]
NORTH_WEST = [x_coordinate - 1, y_coordinate - 1]
SOUTH_EAST = [x_coordinate + 1, y_coordinate + 1]
SOUTH_WEST = [x_coordinate - 1, y_coordinate + 1]
direction = NORTH_EAST

while True:

    print (direction)
    x_coordinate = direction[0]
    y_coordinate = direction[1]
4

1 回答 1

0

这里的问题是,当你说

NORTH_EAST = [x_coordinate + 1, y_coordinate - 1]

您构建了一个包含两个值的列表,这些值是在当时计算和存储的。它们不会根据值的x_coordinate变化而更新y_coordinate

您将需要重新计算每个循环上的值以获得您期望的行为。最简单的方法是使用函数:

directions = {
    "north east": (+1, -1),
    "north west": (-1, -1),
    "south east": (+1, +1),
    "south west": (-1, +1),
}

def new_position(old, direction):
    x, y = old
    dx, dy = directions[direction]
    return x + dx, y + dy

position = 100, 100
direction = "north east"

while True:
    print(position)
    position = new_position(position, direction)

请注意,如果存在链接的数据片段,最好将它们存储在数据结构中。在这里,我使用一个元组将xy值存储在一起,并使用一个字典来存储方向数据。这意味着代码中的重复更少。

于 2013-04-13T20:53:07.483 回答