python顺时针旋转_Python之二维数组N*N顺时针旋转90度
需求:把一個(gè)二維數(shù)組順時(shí)針旋轉(zhuǎn)90度,現(xiàn)實(shí)數(shù)據(jù)的替換。
比如把4*4的二維數(shù)組順時(shí)針旋轉(zhuǎn)90度
原始數(shù)據(jù)是一個(gè)嵌套列表:[['A', 'B', 'C', 'D'], ['A', 'B', 'C', 'D'], ['A', 'B', 'C', 'D'], ['A', 'B', 'C', 'D']]
更直觀打印顯示如下:
['A', 'B', 'C', 'D']
['A', 'B', 'C', 'D']
['A', 'B', 'C', 'D']
['A', 'B', 'C', 'D']
轉(zhuǎn)換成下面的數(shù)組
['A', 'A', 'A', 'A']
['B', 'B', 'B', 'B']
['C', 'C', 'C', 'C']
['D', 'D', 'D', 'D']
1、思路
在N*N維數(shù)組中,對角線的數(shù)據(jù)轉(zhuǎn)換前后不變。需要轉(zhuǎn)換次數(shù)為 N-1 次。
2、源碼實(shí)現(xiàn)
python3.5版本
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# Version:Python3.5.0
# At 2016/2/5 23:01
'''
列如把4*4的二維數(shù)組順時(shí)針旋轉(zhuǎn)90度
['A', 'B', 'C', 'D']
['A', 'B', 'C', 'D']
['A', 'B', 'C', 'D']
['A', 'B', 'C', 'D']
轉(zhuǎn)換成下面的數(shù)組
['A', 'A', 'A', 'A']
['B', 'B', 'B', 'B']
['C', 'C', 'C', 'C']
['D', 'D', 'D', 'D']
'''
import string
def get_number():
'''
獲取一個(gè)N維的數(shù)字
:return: n
'''
while True:
n = 0
number = input('\033[32;1m請輸入N維數(shù)組: \033[0m').strip() # 獲取一個(gè)N的數(shù)字
if number == '':
continue
if number.isdigit():
n = int(number)
if n > 0 and n <= 26:
break
else:
print('\033[31;1m輸入的N數(shù)字超出范圍,請重新輸入!\033[0m')
continue
else:
print('\033[31;1m輸入的N有誤,請重新輸入!\033[0m')
continue
return n
def rotating(data, n):
for r in range(n):
if r == n -1 : # 最后一個(gè)數(shù)字不用轉(zhuǎn)換,直接退出循環(huán)
break
for c in range(r+1,n):
data[r][c], data[c][r] = data[c][r], data[r][c]
print('\n第%s次轉(zhuǎn)換后的數(shù)據(jù)結(jié)果' % (r+1))
for i in range(n):
print(data[i])
return data
if __name__ == '__main__':
n = get_number() # 返回一個(gè)n
print('順時(shí)針旋轉(zhuǎn)90度 \033[31;1m%s\033[0m 維數(shù)組' % n)
# 獲取n個(gè)大寫字母
rotate_str = string.ascii_uppercase[:n]
data = [[row for row in rotate_str] for col in rotate_str]
print('開始轉(zhuǎn)換之前的數(shù)據(jù)')
for i in range(n):
print(data[i])
rotating(data, n) # 調(diào)用函數(shù)
print('\n最終轉(zhuǎn)換后得到的數(shù)據(jù)')
for i in range(n):
print(data[i])
python2.7版本
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Version:Python2.7.10
# At 2016/2/5 23:01
'''
列如把4*4的二維數(shù)組順時(shí)針旋轉(zhuǎn)90度
['A', 'B', 'C', 'D']
['A', 'B', 'C', 'D']
['A', 'B', 'C', 'D']
['A', 'B', 'C', 'D']
轉(zhuǎn)換成下面的數(shù)組
['A', 'A', 'A', 'A']
['B', 'B', 'B', 'B']
['C', 'C', 'C', 'C']
['D', 'D', 'D', 'D']
'''
import string
def get_number():
'''
獲取一個(gè)N維的數(shù)字
:return: n
'''
while True:
n = 0
number = raw_input(u'\033[32;1m請輸入N維數(shù)組: \033[0m').strip() # 獲取一個(gè)N的數(shù)字
if number == '':
continue
if number.isdigit():
n = int(number)
if n > 0 and n <= 26:
break
else:
print(u'\033[31;1m輸入的N數(shù)字超出范圍,請重新輸入!\033[0m')
continue
else:
print(u'\033[31;1m輸入的N有誤,請重新輸入!\033[0m')
continue
return n
def rotating(data, n):
for r in range(n):
if r == n -1 : # 最后一個(gè)數(shù)字不用轉(zhuǎn)換,直接退出循環(huán)
break
for c in range(r+1,n):
data[r][c], data[c][r] = data[c][r], data[r][c]
print(u'\n第%s次轉(zhuǎn)換后的數(shù)據(jù)結(jié)果' % (r+1))
for i in range(n):
print(data[i])
return data
if __name__ == '__main__':
n = get_number() # 返回一個(gè)n
print(u'順時(shí)針旋轉(zhuǎn)90度 \033[31;1m%s\033[0m 維數(shù)組' % n)
# 獲取n個(gè)大寫字母
rotate_str = string.ascii_uppercase[:n]
data = [[row for row in rotate_str] for col in rotate_str]
print(u'開始轉(zhuǎn)換之前的數(shù)據(jù)')
for i in range(n):
print(data[i])
rotating(data, n) # 調(diào)用函數(shù)
print(u'\n最終轉(zhuǎn)換后得到的數(shù)據(jù)')
for i in range(n):
print(data[i])
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的python顺时针旋转_Python之二维数组N*N顺时针旋转90度的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python微信开发实例 pdf 百度网
- 下一篇: python中time库引用不正确的_p