jzzlee

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

  学Python,亦重拾算法。

  两种单元格表示方式间的转换。遇到两个问题,一是除26时,商为1的问题,二是在区分两种格式时出错。

  

 1 # -*- coding: utf-8 -*-
 2 d=ord('A')-1
 3 def dig_ch(row):
 4     ans=''
 5     while(row):
 6         md=row%26
 7         if md!=0:
 8             ans+=chr(md+d)
 9             row=row/26
10         else:
11             ans+='Z'
12             row=row/26-1    #忘记减1
13                 
14     return ans[::-1]
15 def colm(coord):
16     x=0
17     while(1):
18         if coord[x] in num:
19            return x
20         else:
21             x+=1
22 def ch_dig(row):
23     row=row[::-1]
24     ans=0
25     i=0
26     while(i<len(row)):
27         md=pow(26,i)*(ord(row[i])-d)
28         ans+=md
29         i+=1
30     return str(int(ans))
31 
32 n=int(raw_input())
33 num=['1','2','3','4','5','6','7','8','9','0']
34 
35 while(n):
36     coord=raw_input()
37     n-=1
38     if coord[0]=='R' and coord[1] in num and coord.find('C')!=-1: #忘记检测C的存在
39         c=coord.find('C')
40         col=coord[1:c]
41         row=int(coord[c+1:])
42         print dig_ch(row)+col
43     else:
44         x=colm(coord)
45         col=coord[x:]
46         row=coord[:x]
47         print 'R'+col+'C'+ch_dig(row)

  事实上用正则表达式来检测和切割输入的字符串更加方便,另外,检测数字时有函数isdigit(),忘记用了。

posted on 2014-04-23 11:59  jzzlee  阅读(169)  评论(0编辑  收藏  举报