鱼C论坛

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

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

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

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

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

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

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


一星答案:
def spreadsheet(s):
    letter = ('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
    letter = list(letter)
    s = list(s)
    x = []
    y = []
    if(s[0] == 'R' and s[1].isdigit() and 'C' in s[2:]):
        while 'C' in s:
            y.append(s.pop())
        y.reverse()
        temp = int(''.join(y[1:]))
        while temp:
            x_int  = temp % 26
            temp = temp // 26
            if x_int == 0:
                temp -= 1
            x.append(letter[x_int-1])
        x.reverse()
        x_str = ''.join(x)
        y_str = ''.join(s[1:])
        return(x_str+y_str)
    else:
        num = 0
        y_int = 0
        temp = s.copy()
        for i in range(len(''.join(temp))):
            if not temp[i].isdigit():
                y.append(temp[i])
                s.remove(temp[i])
        while y != []:
            temp = y.pop()
            for i in range(26):
                if letter[i] == temp:
                    y_int += (i+1) * (26 ** num)
                    num += 1
        return('R'+''.join(s)+'C'+str(y_int))


二星答案:
def spreadsheet(s):
    import re, functools
    if re.search(r'\dC', s):
        r, c = s.split('C')
        c = int(c)
        column = ''
        while c:
            c -= 1
            column = chr(c % 26 + 65) + column
            c //= 26
        return column + r[1:]
    else:
        c = re.search(r'\D+', s).group()
        r = re.search(r'\d+', s).group()
        c_lst =[ord(i) - 64 for i in c]
        c = functools.reduce(lambda x, y: x * 26 + y, c_lst)
        return 'R' + r + 'C' +  str(c)

三星答案:
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])))

基础语法:



算法讲解:





本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> 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-11-14 23:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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