如何在这个问题中迭代.实际上,我发现从A到Z,我们的索引是1-26,从AA到ZZ,它是26+26^2.但是如何进行呢?&



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

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

A是第一列,B是第二列,Z是第26列,以此类推。三个圆点表示缺失的标签及其列号。使用上面给出的表,推导出列标签和它们对应的数字之间的映射。接受列标签作为输入,输出相应的列号。

I start as:

n=input()
alpha='ABCDEFGHIJKLMNOPQRSTUVWXYZ'

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

但我知道这行不通。

首先,我们要写一个函数来给出一个字母的位置(你已经或多或少做过了)。

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

有两种情况:

  • 如果列输入只有一个字母,那么只需返回该字母在字母表中的位置
  • 输入有2个字母,在这种情况下列号为position(letter1) * 26 + position(letter2)

程序如下:

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")

由于我们必须按照输入的要求继续执行多次,因此使用递归是理想的:

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)

相关内容

  • 没有找到相关文章