问题描述
现在有一张n行m列的由”o”和”*”字符组成的图案,需要你做若干次翻转和旋转操作,并输出最后的结果.
输入格式
第一行两个整数n和m
接下来n行,每行m个字符,表示待变换的图案
下一行一个整数p表示操作次数
接下来p行,每行一个整数,表示操作.(1代表水平翻转,2代表垂直翻转,3代表顺时针转90°,4代表逆时针转90°)
输出格式
输出n行m列(或m行n列)字符,表示变换后的图案
样例输入
4 5
**ooo
**o**
**oo*
**o**
2
2
3样例输出
****
****
oooo
o*o*
o***数据规模和约定
1<=n,m<=100
0<=p<=1000000
这题属于入门题的难度了 相信对于前两个操作来说 大家都没有问题 正常反转即可
问题是 顺时针旋转90度和逆时针旋转90度该怎么做呢
这里Python提供了很好的一个函数——zip
实现矩阵旋转的方法可以参考:Python :矩阵旋转_KS想去海底的博客-CSDN博客_python矩阵旋转
- def check1(graph) :
- for i in range(len(graph)) :
- graph[i] = graph[i][::-1]
- return graph
-
- def check2(graph) :
- graph = graph[::-1]
- return graph
-
- def check3(graph) :
- graph = graph[::-1]
- graph = list(map(list,zip(*graph)))
- return graph
-
- def check4(graph) :
- graph = list(map(list,zip(*graph)))
- graph = graph[::-1]
- return graph
-
- n,m = map(int,input().split())
- Map = []
- for i in range(n) : Map.append(list(input()))
- p = int(input())
- for _ in range(p) :
- x = int(input())
- if x == 1 :
- Map = check1(Map)
- elif x == 2 :
- Map = check2(Map)
- elif x == 3 :
- Map = check3(Map)
- else :
- Map = check4(Map)
-
- for i in range(len(Map)) :
- for j in range(len(Map[i])) :
- print(Map[i][j],end='')
- print()
-