【问题标题】:How to add points to grid in python如何在python中将点添加到网格
【发布时间】:2017-03-14 22:53:32
【问题描述】:

所以我有一个创建网格的代码(有点长)

width = int(input('Enter the width: '))
height = int(input('Enter the height: '))

# print the grid

# prints y-axel
y = 1
print('  ', end='')
for x in range(0, width):
    print(y, end='')
    y = y + 1
    if y == 10:
        y = 0
print('')

print(' +', '-' * (width), sep='')  # prints the top row
# prints all remaining x-axels
z = 1
for i in range(0, height):
    print(z, '|', '.' * width, sep='')
    z = z + 1
    if z == 10:
        z = 0

# ask do you wanna put a point in a grid
point = input('Shall we add a point (Y/N)? ')
if point == 'Y' or point == 'y':
    x_coord = int(input('Enter X-coordinate: '))
    y_coord = int(input('Enter Y-coordinate: '))

    # prints y-axel
    y = 1
    print('  ', end='')
    for x in range(0, width):
        print(y, end='')
        y = y + 1
        if y == 10:
            y = 0
    print('')

    # prints all remaing x-axels
    print(' +', '-' * (width), sep='')
    z = 1
    for i in range(0, height):
        if i != (y_coord - 1):
            print(z, '|', '.' * (width), sep='')

        if i == (y_coord - 1):
            print(z, '|', '.' * (x_coord - 1), 'X', '.' * (width - x_coord),
                  sep='')  # add the point
        z = z + 1
        if z == 10:
            z = 0

这将打印一个网格,您可以在其中决定其宽度和高度。以及您可以将点添加到网格的位置。例如 grid (width=15 and height=5) 给你一个看起来像这样的网格:

Enter the width: 15
Enter the height: 5
  123456789012345
 +---------------
1|...............
2|...............
3|...............
4|...............
5|...............

之后,您可以将 X 点添加到您制作的网格中

Shall we add a point (Y/N)? y
Enter X-coordinate: 13
Enter Y-coordinate: 2
  123456789012345
 +---------------
1|...............
2|............X..
3|...............
4|...............
5|...............

之后是我的问题。我不知道如何保存这个 X 点,所以它会保留在网格上。之后,我应该可以向网格添加新的 X 点。因此,如果我想向 (2,2) 添加新的 X 点,它看起来像

Shall we add a point (Y/N)? y
Enter X-coordinate: 2
Enter Y-coordinate: 2
  123456789012345
 +---------------
1|...............
2|.X..........X..
3|...............
4|...............
5|...............

所以基本上我的问题是我不知道如何将更改保存到我的网格。 提前致谢。

【问题讨论】:

  • 您可以将网格点坐标存储在列表中。您拥有的代码不是很适应。例如,您有两个单独的代码块打印出网格。一个打印空网格,另一个打印一个点。无论有多少点,您确实需要一个打印网格的代码块。这可能意味着每次在循环中一次打印一个网格坐标,并每次检查当前坐标对是否在列表中,如果是则打印一个“X”。

标签: python css grid


【解决方案1】:

您需要保留以前 X 坐标的列表。

说明

Python 有一个list 数据类型。

您可以将项目添加到列表中,您可以检查项目是否已经在列表中。

以下演示了列表的工作原理:

points = []
print(points)
if [1,2] in points:
    print("Found you")
else:
    print("It isn't here")

points.append([1,2])
points.append([5,6])
points.append([7,3])
print(points)
if [1,2] in points:
    print("Found you")
else:
    print("It isn't here")

它给出了这个输出:

[]
It isn't here
[[1, 2], [5, 6], [7, 3]]
Found you

修复您的代码

我已经修改了您的代码并发表了评论以向您展示如何:

width = int(input('Enter the width: '))
height = int(input('Enter the height: '))

# print the grid

# prints y-axel
y = 1
print('  ', end='')
for x in range(0, width):
    print(y, end='')
    y = y + 1
    if y == 10:
        y = 0
print('')

print(' +', '-' * (width), sep='')  # prints the top row
# prints all remaining x-axels
z = 1
for i in range(0, height):
    print(z, '|', '.' * width, sep='')
    z = z + 1
    if z == 10:
        z = 0

# this is a list of all the xpoints
xpoints = []

# Keep asking until the user says no
while True:
    # ask do you wanna put a point in a grid
    point = input('Shall we add a point (Y/N)? ')
    if point == 'Y' or point == 'y':
        x_coord = int(input('Enter X-coordinate: '))
        y_coord = int(input('Enter Y-coordinate: '))
        xpoints.append([x_coord, y_coord])  # add the new point to the list

        # prints y-axel
        y = 1
        print('  ', end='')
        for x in range(0, width):
            print(y, end='')
            y = y + 1
            if y == 10:
                y = 0
        print('')

        # prints all remaining x-axels
        print(' +', '-' * (width), sep='')
        z = 1
        # for every row
        for i in range(0, height):
            line = str(z)+"|" # This string will hold the line as we add dots to it
            # for every point in the row
            for x in range(width):
                # if this point is an X point:
                if [x, i] in xpoints:
                    line += 'X'
                # if it isn't:
                else:
                    line += '.'
            print(line) # Show the line
            z = z + 1
            if z == 10:
                z = 0
    else:
        break

【讨论】:

  • 您的代码是正确的,只是 X 点总是指向 (x+1,y+1)。所以它在两个轴上都超过了 1。所以我只需要将if [x, i] in xpoints: 修复为if [x+1, i+1] in xpoints:
  • 取决于您是 0 还是 1 索引您的数组。但是,是的,你的 UI 被 1 索引了,我应该看到 :)
【解决方案2】:

您的网格是一个二维数组:

width = int(input('Enter the width: '))
height = int(input('Enter the height: '))

grid = []
for i in range(height):
    grid.append(['.']*width)

def print_grid(grid):
    # Header: '  123456789012345'
    print('  ', end='')
    for i in range(width):
        print(i%10, end='')
    print('')  # New line
    # Table: ' +---------------'
    print(' +', end='')
    for i in range(width):
        print('-', end='')
    print('')  # New line
    # Rows
    for i, row in enumerate(grid):
        print(str(i) + '|', end='')
        for cell in row:
            print(cell, end='')
        print('')  # New line

def fill_grid(grid, x, y):
    grid[y-1][x-1] = 'X'

用法:

fill_grid(grid, 13, 3)
print_grid(grid)

【讨论】:

    【解决方案3】:

    您应该使用列表列表作为网格,并在用户输入内容时将索引 [y][x] 处的相应元素更改为“X”。

    grid = [['-' for i in range(9)] for j in range(7)]
    
    y = 5
    x = 3
    # Note that y comes first.
    grid[y][x] = 'X'
    
    for row in grid:
        for item in row:
            print(item, end='')
        print()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-22
      • 2020-04-24
      • 1970-01-01
      • 1970-01-01
      • 2015-03-04
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      相关资源
      最近更新 更多