Python:每日一题 49
- 2017-11-27 13:36:00
- 六月
- 来源:
- http://bbs.fishc.com/thread-87429-1-1.html
- 转贴 584
- Spreadsheet Row Column
- A1 R1C1
- D5 R5C4
- AA48 R48C27
- BK12 R12C63
A1单元格,表示的是第一行R1,第一列C1
D5单元格,表示的是第五行R5,第四列C1
好了,现在请你给出一个函数def spreadsheet(s):,可以实现两者之间的 相互转换。
测试代码忘记给了!
- test.assert_equals(spreadsheet("A1"), "R1C1")
- test.assert_equals(spreadsheet("R1C1"), "A1")
- test.assert_equals(spreadsheet("R5C4"), "D5")
- test.assert_equals(spreadsheet("AA48"), "R48C27")
- test.assert_equals(spreadsheet("BK12"), "R12C63")
- test.assert_equals(spreadsheet("R12C63"), "BK12")
- test.assert_equals(spreadsheet("R85C26"), "Z85")
- test.assert_equals(spreadsheet("R31C78"), "BZ31")
- test.assert_equals(spreadsheet("BZ31"), "R31C78")
这个答案不是我写的,我跟re不熟,选了个比较好的答案供各位参考。
- import re
- def spreadsheet(s):
- nums = re.findall(r'(d+)', s)
- if len(nums) == 2:
- n, cStr = int(nums[1]), ''
- while n:
- n, r = divmod(n-1, 26)
- cStr += chr(r + 65)
- return "{}{}".format(cStr[::-1], nums[0])
- else:
- return "R{}C{}".format(nums[0], sum( 26**i * (ord(c)-64) for i,c in enumerate(re.sub(r'd', '', s)[::-1]))
发表评论