题目描述:
问题描述
现在有一张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()