2017-06-05 160 views
0

打印結果最近我一直在研究我的一個小項目,但我遇到了一個問題,我被卡住了。我已經查過了不同的地方,但是我找不到我要找的東西。這是我的代碼:只有當字符串項目索引==列表項目索引

special_alphabet = [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, 
v, w, x, y, z] 

alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k','l', 'm', 'n', 
'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] 

name = input('Please insert your name: ') 

item_alphabet = -1 
item_special_alphabet = -1 
index = -1 

for item in name: 
    item_alphabet = item_alphabet + 1 
    item_special_alphabet = item_special_alphabet + 1 
    index = index + 1 

    if alphabet[item_alphabet] == name[index]: 
     print(special_alphabet[item_special_alphabet]) 

special_alphabet列表包含了我對變量的特殊字符。我沒有展示它們,因爲它們太長了,但它們在那裏。

我現在遇到的問題是,當我運行此代碼並鍵入我的輸入時,它確實檢查了我插入的'name'(字符串),它只是按照列表的順序(基本上是字母)。所以當我輸入:Amine時,它只返回A的特殊字符(因爲它是字符串和列表中的第一個(0))和E(同樣的原因,只是第五個)。尋找的是如何在沒有任何順序的情況下通過整個列表並在運行if聲明並打印出特殊字符之前檢查其中的所有項目。 預先感謝您。

+1

嘗試使用字典作爲查找而不是2列表,其中您的常規字母表是關鍵和特殊的價值。 –

+0

@IljaEverilä,是的,我絕對沒有想到,它可以更好地組織代碼和所有,但這並不真正回答我的問題......無論如何感謝 –

+0

你是btw期待只打印「翻譯」字符,如你的例子,或整個字符串,但翻譯?你可以用''str.maketrans()'](https://docs.python.org/3/library/stdtypes.html#str.maketrans)和'str.translate()'代替它。 –

回答

1

您可以使用str.maketrans()str.translate()爲這些類型的翻譯工作:

trans_tab = str.maketrans(dict(zip(alphabet, special_alphabet))) 
name = input('Please insert your name: ') 
translated_name = name.translate(trans_tab) 
print(translated_name) 

如果傳遞str.maketrans()是由長度爲1的字符串作爲鍵和任意長度的字符串作爲值的單個字典的說法,它」我將爲您創建一個可用於str.translate()的翻譯表,該表創建字符串的新副本,其中每個字符已通過給定的轉換表映射。

例如:

In [15]: trans = str.maketrans({ 
    ...:  'A': 'A ', 
    ...:  'm': 'M ', 
    ...:  'i': 'I ', 
    ...:  'n': 'N ', 
    ...:  'e': 'E ' 
    ...: }) 

In [16]: input("> ").translate(trans) 
> Amine 
Out[16]: 'A M I N E ' 
+0

非常感謝!有效!!我以前不知道這些,我一定會稍後詳細檢查它們。謝謝!!! –

0

字母和字母空間的dictionary可能是一個最好的設計

在你的情況下可以嘗試

;

for item in name: 
    ind = alphabet.find(item) 
    if ind != -1: 
     print(special_alphabet[ind])