学习python,每日练习20200901

进制之间的转换

'''
https://docs.python.org/zh-cn/3.7/library/string.html?highlight=string#module-string
string.ascii_letters
下文所述 ascii_lowercase 和 ascii_uppercase 常量的拼连。 该值不依赖于语言区域。
string.ascii_lowercase
小写字母 'abcdefghijklmnopqrstuvwxyz'。 该值不依赖于语言区域,不会发生改变。
string.ascii_uppercase
大写字母 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'。 该值不依赖于语言区域,不会发生改变。
string.digits
字符串 '0123456789'。
string.hexdigits
字符串 '0123456789abcdefABCDEF'。
string.octdigits
字符串 '01234567'。
string.punctuation
由在 C 语言区域中被视为标点符号的 ASCII 字符组成的字符串。
string.printable
由被视为可打印符号的 ASCII 字符组成的字符串。 这是 digits, ascii_letters, punctuation 和 whitespace 的总和。
string.whitespace
由被视为空白符号的 ASCII 字符组成的字符串。 其中包括空格、制表、换行、回车、进纸和纵向制表符。
'''
#给出26进制的对应关系
import string
#生成26位大写字母
temp = string.ascii_uppercase
dict1 = {}
count =1
count1 = 0
dict2 = {}
#按照大写字母的递增顺序给出大写字母和数字的对应关系并存放在字典中dict1中 dict1 = {'A': 1, 'B': 2......'Y': 25, 'Z': 26}
for i in temp:
    dict1[i] = count
    count +=1
#按照数字的递增和大写字母的递增顺序的对应关系来存放在字典dict2中
for i in range(1,27):
    dict2[i] = temp[count1]
    count1 +=1

#求各个进制下面给定一个数,然后求这个数的各个数字
def getnum(num,bin):
    list1 = []
    length = len(str(num))
    while length>0:
        #通过数值对26求余数,得到最低位的数字并保存
        i = num %bin
        #num = num对26取整除,将num的值更新为除以26之后的商
        num = num //bin
        list1.append(i)
        #length控制循环次数
        length -= 1
    #由于列表中的值时从低位到高数,因为取反后,得到从高位到低位的各个数字列表
    list2 = list(reversed(list1))
    return list2

def spreadsheet(sheet):
    if (sheet.find('R') != -1 ) and (sheet.find('C') != -1 ) and (sheet.find('C')-sheet.find('R')>=2):
        sheet_num1 = ''.join(sheet.split('R'))
        sheet_num2 = sheet_num1.split('C')
        #得到行的值
        num_r= sheet_num2[0]
        #得到列的值
        num_c = sheet_num2[1]
        #根据列的值来计算对应的字母
        lst = getnum(int(num_c),26)
        result_str = ''.join(dict2[i] for i in lst)
        result = result_str+str(num_r)
        return result

    else:
        #得到字母
        sheet_alpha = ''.join(j for j in sheet if j.isalpha())
        length = len(sheet_alpha)
        sum =0
        count = 0
        #根据字母来计算对应的行也就是C
        for i in range(length-1,-1,-1):
            sum += dict1[sheet_alpha[count]]*(26**i)
            count+=1
        #得到对应的列也就是
        sheet_num = ''.join(k for k in sheet if k.isdigit())
        result = 'R'+sheet_num+'C'+str(sum)
        return result

print(spreadsheet('R12C63'))

题目地址;
https://fishc.com.cn/forum.php?mod=viewthread&tid=87429&ctid=588
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值