仅在字符串项索引==列表项索引时打印结果

时间:2017-06-05 05:36:23

标签: python python-3.x

我最近一直在做一个小项目,但我遇到了一个问题,我被困在了。我已经检查了各个地方,但我真的找不到我想要的东西。这是我的代码:

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语句并打印出特殊字符之前检查其中的所有项目。 提前谢谢。

2 个答案:

答案 0 :(得分: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 '

答案 1 :(得分:0)

dictionary字母和空格字母可能是最佳设计

在您的情况下尝试;

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