# a054 - 電話客服中心
### 題目連結: [a054](https://zerojudge.tw/ShowProblem?problemid=a054)
### 題目解析
* 與 a020 身分證檢驗使用相同的公式計算流程
* 但是變成需要藉由後面9個數字反向推可能的英文字母代碼
### 題目類型
字串/流程控制
### 範例測資解讀
* 輸入
* 為身份證字號後9碼,不含英文字母
* 輸出
* 可能的英文字母代號,必須要按照字母順序出現
### 其他注意事項
無
### 程式解析
首先將字母轉換碼使用字典的格式建立
``` python
CODE = {'A':10, 'B':11, 'C':12, 'D':13, 'E':14, 'F':15, 'G':16, 'H':17, 'I':34,
'J':18, 'K':19, 'L':20, 'M':21, 'N':22, 'O':35, 'P':23, 'Q':24, 'R':25,
'S':26, 'T':27, 'U':28, 'V':29, 'W':32, 'X':30, 'Y':31, 'Z':33}
```
由於此題需要透過公式反查可能的字母代碼,因此我們可以先將 CODE 的兩位數字轉成公式中的數值
* CODE數值 = 十位數+個位數*9
``` python
#用於快速查找字母
code_string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
#記錄26個字母的CODE數值
codeSum = []
for i in range(26):
x1 = int(CODE[code_string[i]]/10)
x2 = CODE[code_string[i]]%10*9
codeSum.append( x1+x2 )
```
程式的前置工作已經完成,接下來可以讀取測試資料進行計算
首先後九碼必須要與公式的計算方式相同


接著分成三個部分加總
* codeSum
* 中間8碼累加,以 xN 代替
* 最後1碼檢查碼.以 checkSum 代替
若此身分證後九碼為真的身分證,則必須滿足以下條件
* (codeSum+xN+checkSum)%10 == 0
因此我們可以建立一個迴圈,對於codeSum之中的26種數值進行加總比對,如果有滿足條件,則代表是可能的英文代碼
``` python
for x in range(26):
if (codeSum[x]+xN+checkSum)%10 == 0:
word = code_string[x]
print(word, end='')
```
最後將程式碼調整為解題的輸出入流程即可
### 完整程式碼 (僅提供參考)
``` python=01
import sys
CODE = {'A':10, 'B':11, 'C':12, 'D':13, 'E':14, 'F':15, 'G':16, 'H':17, 'I':34,
'J':18, 'K':19, 'L':20, 'M':21, 'N':22, 'O':35, 'P':23, 'Q':24, 'R':25,
'S':26, 'T':27, 'U':28, 'V':29, 'W':32, 'X':30, 'Y':31, 'Z':33}
code_string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
codeSum = []
#set x1+x2
for i in range(26):
x1 = int(CODE[code_string[i]]/10)
x2 = CODE[code_string[i]]%10*9
codeSum.append( x1+x2 )
#start
for s in sys.stdin:
testID = list(s)
checkSum = int(testID[8])
xN = 0
for i in range(7+1):
xN += int(testID[i])*(8-i)
for x in range(26):
if (codeSum[x]+xN+checkSum)%10 == 0:
word = code_string[x]
print(word, end='')
print()
```
###### tags: `基礎15題解` `APCS` `ZeroJudge`