Как использовать два цикла for для создания сетки чисел? - PullRequest
0 голосов
/ 25 октября 2019

Я определяю функцию draw_grid:

def draw_grid(num):
    grid = ''
    for i in range(1, num + 1):     #  + 1 because if  you don't then you will get the output of your integer - 1
        new_grid =(str(i)+ ' ' + str(grid))
        print(new_grid, end='')

draw_grid(4)

Это выводит 1 2 3 4, но мне нужно использовать другой цикл for, чтобы в основном повторить это, чтобы он выглядел как сетка с повторяющимися числамиЕще 4 раза.

Вопрос: Как использовать другой цикл for для создания сетки чисел?

Ответы [ 5 ]

1 голос
/ 25 октября 2019

альтернативное решение, если оно помогает, не уверен, является ли метод цикла обязательным, или просто так, как вы решили пойти, не зная всех возможностей:

import numpy as np
num = 4
grid = np.tile(np.array([range(num)])+1,(num,1))

print(grid)

[[1 2 3 4]
 [1 2 3 4]
 [1 2 3 4]
 [1 2 3 4]]
0 голосов
/ 25 октября 2019

Вот еще один способ использования Python 3 f-strings:

def draw_grid(x):
    for _ in range(x):
        print(''.join(f'{_+1} ' for _ in range(x)))

И вот подтверждение концепции:

Python 3.7.4 (default, Aug 12 2019, 14:45:07) 
[GCC 9.1.1 20190605 (Red Hat 9.1.1-2)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> def draw_grid(x):
...     for _ in range(x):
...         print(''.join(f'{_+1} ' for _ in range(x)))
... 
>>> draw_grid(5)
1 2 3 4 5 
1 2 3 4 5 
1 2 3 4 5 
1 2 3 4 5 
1 2 3 4 5 
>>> draw_grid(10)
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10 
>>> 

И, наконец, вот однострочная версия:

def draw_grid(x):
    print(*[''.join([f'{_+1} ' for _ in range(x)]) for _ in range(x)], sep='\n')
0 голосов
/ 25 октября 2019

Может сделать что-то вроде:

def draw_grid(num):
    # Two loops for xy indices
    grid = ""
    for j in range(num):
        for i in range(num):
            grid += (str(i+1) + " ")
        grid += "\n"

    print(grid)
    return grid

draw_grid(4)

Тогда вывод будет:

1 2 3 4 
1 2 3 4 
1 2 3 4 
1 2 3 4 
0 голосов
/ 25 октября 2019

Просто зацикливайтесь на range(num) (что, как я полагаю, является источником числа 4 в вашем примере). Я сделал несколько других улучшений в коде:

def draw_grid(num):
    r = range(1, num+1)
    for i in r:  # Since "i" isn't used, we can use "r" instead of "range(num)"
        print(*r)  # The star expands "r" into its items

draw_grid(4)

Вывод:

1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
0 голосов
/ 25 октября 2019

Вы выполнили набор инструкций, и теперь вы хотите выполнять один и тот же набор инструкций несколько раз. Так же, как в вашем первом цикле for есть инструкция для печати чисел, следующий цикл for должен содержать ваш первый цикл for, чтобы это происходило несколько раз.

def draw_grid(num):

    grid = ''
    for j in range(num): # starts on 0 and ends on num-1, so a total of num times
        for i in range(1, num + 1):     #  + 1 because if  you don't then you will get the output of your integer - 1

            new_grid =(str(i)+ ' ' + str(grid))

            print(new_grid, end='')
        print("\n") # So we start on a new line

draw_grid(4)
        ```

...