簡體   English   中英

如何在這個問題中迭代。實際上我發現從 A 到 Z 我們會收到索引 1-26,從 AA 到 ZZ 是 26+26^2。但是如何進行?

[英]HOW TO ITERATE IN THIS QUESTION.ACTUALLY I FOUND THAT FROM A to Z WE WOULD RECIEVE INDEX 1-26 AND FROM AA TO ZZ IT IS AS 26+26^2.BUT HOW TO PROCEED?

在電子表格中,列的標簽如下:

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

但我知道這行不通。

首先,我們想寫一個函數來給出一個字母的位置(你已經或多或少做了)。

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM