1

I'm new to programming and I'm having trouble with a school assignment. I need to print the heart from 'Automate the Boring Stuff Chapter 4', (I already did that.) So now I need to rotate it -90°, I tried multiple solutions, (like reversing the range) but nothing works. What im trying to print is this:

....O....
...OOO...
..OOOOO..
.OOOOOOO.
.OOOOOOO.
..OO.OO..

Here is my code (Spoilers ahead):

grid = [['.', '.', '.', '.', '.', '.'],
          ['.', 'O', 'O', '.', '.', '.'],
          ['O', 'O', 'O', 'O', '.', '.'],
          ['O', 'O', 'O', 'O', 'O', '.'],
          ['.', 'O', 'O', 'O', 'O', 'O'],
          ['O', 'O', 'O', 'O', 'O', '.'],
          ['O', 'O', 'O', 'O', '.', '.'],
          ['.', 'O', 'O', '.', '.', '.'],
          ['.', '.', '.', '.', '.', '.']]

for i in range(6):
    for a in range(9):
        if a < 8:
            print(grid[a][i], end="")
        else:
            print(grid[a][i])

I would like to thank y'all in advance.

2
  • 1
    Please clarify, reverse or rotate? Given the expected output, it appears you are trying to rotate it -90 degrees. And ... can you use numpy? Commented Nov 25, 2020 at 11:56
  • I covered it because I have already done the book lol Commented Nov 25, 2020 at 12:19

3 Answers 3

1

For a built-in solution ...

This little bit of code uses list transposition and reverse slicing:

list(map(list, zip(*grid)))[::-1]

Output:

....O....
...OOO...
..OOOOO..
.OOOOOOO.
.OOOOOOO.
..OO.OO..

Or, if you'd like to use numpy ...

Logic:

  • Create a numpy.ndarray from the grid.
  • Transpose the array and use reverse slicing to invert the transposed array.

Example:

import numpy as np

g = np.array(grid)
g.T[::-1]

Which creates an array as:

array([['.', '.', '.', '.', 'O', '.', '.', '.', '.'],
       ['.', '.', '.', 'O', 'O', 'O', '.', '.', '.'],
       ['.', '.', 'O', 'O', 'O', 'O', 'O', '.', '.'],
       ['.', 'O', 'O', 'O', 'O', 'O', 'O', 'O', '.'],
       ['.', 'O', 'O', 'O', 'O', 'O', 'O', 'O', '.'],
       ['.', '.', 'O', 'O', '.', 'O', 'O', '.', '.']], dtype='<U1')

And can be printed as:

for i in g.T[::-1]:
    print(''.join(i))

Output:

....O....
...OOO...
..OOOOO..
.OOOOOOO.
.OOOOOOO.
..OO.OO..

Comments:
I realise the course (most likely) encourages the use of lower-level Python constructs (list, dict, etc). And I wholly agree this is important / vital. However, I also feel it's important to expose those new to Python (and development in general) to powerful/efficient libraries such as numpy, and how they can be used. Because let's be honest, in the real world ... you're going to write a couple lines in numpy rather than 10 functions to accomplish the same task.

Sign up to request clarification or add additional context in comments.

Comments

0
grid = [['.', '.', '.', '.', '.', '.'],
          ['.', 'O', 'O', '.', '.', '.'],
          ['O', 'O', 'O', 'O', '.', '.'],
          ['O', 'O', 'O', 'O', 'O', '.'],
          ['.', 'O', 'O', 'O', 'O', 'O'],
          ['O', 'O', 'O', 'O', 'O', '.'],
          ['O', 'O', 'O', 'O', '.', '.'],
          ['.', 'O', 'O', '.', '.', '.'],
          ['.', '.', '.', '.', '.', '.']]

for i in range(6):
    for a in range(9):
        if a < 8:
            print(grid[a][-(i+1)], end="")
        else:
            print(grid[a][i])

#output
....O....
...OOO...
..OOOOO..
.OOOOOOO.
.OOOOOOO.
..OO.OO..

Comments

0

A Easy understand way to complete it. (My English is not well, I hope you can understand.)

If it is hard for you to think which one to print, so to I. I usually create a reversed_grid array to save rotated result. The next thing to do is to find the relationship between and reversed_grid and grid after rotation. I generally look for some specific examples to summarize the general relationship between two arrays. For example, grid[0][0] will be stored in reversed_grid[5][0] after rotation. There are some other examples. ([0][5] -> [5][0] means grid[0][0] = reversed_grid[5][0])

[0][0] -> [5][0], [0][1] -> [4][0], [0][2] -> [3][0], ... , [0][5] -> [0][0]
[1][0] -> [5][1], [1][1] -> [4][1], [1][2] -> [3][1], ... , [1][5] -> [0][1]
[2][0] -> [5][2], ... 
[3][0] -> [5][3], ... 
... 
[8][0] -> [5][8], ...

Through the above examples, you can summarize the relationship is reversed_grid[6-j][i] = grid[i][j]. The last thing you have to do is print reversed_grid line by line.

The final code is as follows:

grid = [['.', '.', '.', '.', '.', '.'],
          ['.', 'O', 'O', '.', '.', '.'],
          ['O', 'O', 'O', 'O', '.', '.'],
          ['O', 'O', 'O', 'O', 'O', '.'],
          ['.', 'O', 'O', 'O', 'O', 'O'],
          ['O', 'O', 'O', 'O', 'O', '.'],
          ['O', 'O', 'O', 'O', '.', '.'],
          ['.', 'O', 'O', '.', '.', '.'],
          ['.', '.', '.', '.', '.', '.']]

reversed_grid = [['' for i in range(9)] for j in range(6)] # create and initialize reversed_grid
for row in range(9):
    for col in range(6):
        reversed_grid[5-col][row] = grid[row][col]

for row in range(6):
    for col in range(9):
        print(reversed_grid[row][col], end='')
    print()

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.