鱼C论坛

 找回密码
 立即注册
查看: 2492|回复: 1

[技术交流] 0027-编程打卡:实现表格的行列转换

[复制链接]
发表于 2022-9-29 19:18:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 不二如是 于 2022-9-29 19:18 编辑

001.png
002.png
003.png
004.png


一星答案:

  1. def spreadsheet(s):
  2.     letter = ('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
  3.     letter = list(letter)
  4.     s = list(s)
  5.     x = []
  6.     y = []
  7.     if(s[0] == 'R' and s[1].isdigit() and 'C' in s[2:]):
  8.         while 'C' in s:
  9.             y.append(s.pop())
  10.         y.reverse()
  11.         temp = int(''.join(y[1:]))
  12.         while temp:
  13.             x_int  = temp % 26
  14.             temp = temp // 26
  15.             if x_int == 0:
  16.                 temp -= 1
  17.             x.append(letter[x_int-1])
  18.         x.reverse()
  19.         x_str = ''.join(x)
  20.         y_str = ''.join(s[1:])
  21.         return(x_str+y_str)
  22.     else:
  23.         num = 0
  24.         y_int = 0
  25.         temp = s.copy()
  26.         for i in range(len(''.join(temp))):
  27.             if not temp[i].isdigit():
  28.                 y.append(temp[i])
  29.                 s.remove(temp[i])
  30.         while y != []:
  31.             temp = y.pop()
  32.             for i in range(26):
  33.                 if letter[i] == temp:
  34.                     y_int += (i+1) * (26 ** num)
  35.                     num += 1
  36.         return('R'+''.join(s)+'C'+str(y_int))
复制代码



二星答案:

  1. def spreadsheet(s):
  2.     import re, functools
  3.     if re.search(r'\dC', s):
  4.         r, c = s.split('C')
  5.         c = int(c)
  6.         column = ''
  7.         while c:
  8.             c -= 1
  9.             column = chr(c % 26 + 65) + column
  10.             c //= 26
  11.         return column + r[1:]
  12.     else:
  13.         c = re.search(r'\D+', s).group()
  14.         r = re.search(r'\d+', s).group()
  15.         c_lst =[ord(i) - 64 for i in c]
  16.         c = functools.reduce(lambda x, y: x * 26 + y, c_lst)
  17.         return 'R' + r + 'C' +  str(c)
复制代码


三星答案:

  1. import re

  2. def spreadsheet(s):
  3.     nums = re.findall(r'(\d+)', s)
  4.     if len(nums) == 2:
  5.         n, cStr = int(nums[1]), ''
  6.         while n:
  7.             n, r = divmod(n-1, 26)
  8.             cStr += chr(r + 65)
  9.         return "{}{}".format(cStr[::-1], nums[0])
  10.     else:
  11.         return "R{}C{}".format(nums[0], sum( 26**i * (ord(c)-64) for i,c in enumerate(re.sub(r'\d', '', s)[::-1])))
复制代码


基础语法:



算法讲解:





本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-1 19:33:40 | 显示全部楼层
本帖最后由 hveagle 于 2022-10-1 19:37 编辑

@不二如是 有些编程打卡没加进淘贴,到这个淘贴补一下缺失的打卡(15,25)吧:
https://fishc.com.cn/forum.php?m ... =view&ctid=1998
内涵所有零基础入门学习Python【最新版】板块内容,所有Python奇技淫巧,所有编程打卡,所有Python高分笔记,一些作品。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-15 02:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表