如何迭代这个问题。实际上,我发现从A到Z,我们会得到索引126,从AA到ZZ,它是26+26^2。但如何进行呢?

2024-10-03 09:14:37 发布

您现在位置:Python中文网/ 问答频道 /正文

在电子表格中,列的标签如下:

Label           Number
A               1
...             ...
Z               26
AA              27
...             ...
AZ              52
BA              53
...             ...
ZZ              702
AAA             703
...             ...
AAZ             728
ABA             729

A是第一列,B是第二列,Z是第26列,依此类推。三个点表示缺少的标签及其列号。使用上面给出的表,推导列标签与其相应编号之间的映射。接受列标签作为输入,并打印相应的列号作为输出

我一开始是:

   n=input()
   alpha='ABCDEFGHIJKLMNOPQRSTUVWXYZ'


   if len(n)==1:
       print(alpha.index(n.upper())+1)
   elif len(n)==2

但我知道这行不通


Tags: alphanumberlen标签label编号az电子表格
2条回答

由于我们必须根据输入的需要继续多次,因此最好使用递归:

alpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

# retrieve position of a letter in the alphabet set
def position(letter):
  pos = alpha.index(letter) + 1
  return pos

# function to recursively find the column number  
def column_number(label, n):
  if n==1:
    return position(label)

  else:
    return ((26**(n-1)) * position(label[0])) + column_number(label[1:], n-1)

# main code
label = input().upper()
n = len(label)

col_n = column_number(label, n)
print(col_n)

首先,我们要编写一个函数,它给出一个字母的位置(您已经或多或少地这样做了)

alpha='ABCDEFGHIJKLMNOPQRSTUVWXYZ'

def position(letter):
    return alpha.index(letter.upper())+1

然后您有两个案例:

  • 任一列输入都有一个字母,因此只需返回字母在字母表中的位置即可
  • 输入有两个字母,在这种情况下,列号为位置(字母1)*26+位置(字母2)

这为我们提供了以下程序:

def column_number(label):
    if len(label) == 1:
        return position(label)
    elif len(label) == 2:
        return 26*position(label[0]) + position(label[1])
    else:
        print("incorrect label format")

相关问题 更多 >