进制之间的转换
'''
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