Automate The Boring Stuff - Character Picture Grid
It's wasteful to use range() and then only use the result for indexing.
Instead, just iterate directly over the values:
for col in range(len(grid[0])):
    for row in grid:
        print(row[col],end='')
    print()

We can simplify, though - use the zip function to transpose the array:
transposed = zip(*grid)

for row in transposed:
    for col in row:
        print(col,end='')
    print()

The next simplification is instead of printing one character at a time, we can use join to form strings for printing:
for row in zip(*grid):
    print(''.join(row))

And we can join all the rows using '\n'.join(), giving this final version:
print('\n'.join(''.join(x) for x in zip(*grid)))

Equivalently, using map:
print('\n'.join(map(''.join, zip(*grid))))