将字符从列表中取出并将其转换为其他字符

时间:2016-10-30 15:58:20

标签: python string python-3.x

我已经制作了一种秘密语言,我可以将完整的单词放入输入并获得输出,因为列表中的字母应该是。比方说我输入“AB”我希望输出为“QW”。

while True:
    print("type sentence you want translated")
    Befor=input()
    After=list(Befor)

    if Befor=="A":
        print("Q")
    elif Befor=="B":
        print("W")
    elif Befor=="C":
        print("E")
    elif Befor=="D":
        print("R")
    else:
        print("--")

    print(After)

pass

3 个答案:

答案 0 :(得分:1)

您输入了两个字母,但您的测试条件每个只包含一个字符。您应该使用for迭代输入字符串,并逐个测试字符串中的每个字符:

before = input()

for i in before:
    if i=="A":
        print("Q")
    elif i=="B":
        print("W")
    elif i=="C":
        print("E")
    elif i=="D":
        print("R")
    else:
        print("--")

您还可以使用映射代替if/elif来改进代码,因为这可以帮助您更轻松地容纳新翻译:

before = input()
mapping = {'A': 'Q', 'B': 'W', 'C': 'E', 'D': 'R'}

after = ''
for i in before:
    after += mapping.get(i, '--') 

print(after)

注意当映射不包含字符时,字典的get方法如何用于返回默认值'--'

答案 1 :(得分:1)

您也可以自动填充,

before = input()

mapping = {chr(x):(chr(x+6) if x + 6 < 91 else chr(x+6-26)) for x in range(65,91)} 

print(mapping)

after = ''.join(mapping.get(x, '--') for x in before)
print(after)
SUBHAM
{'A': 'G', 'B': 'H', 'C': 'I', 'D': 'J', 'E': 'K', 'F': 'L', 'G': 'M', 'H': 'N', 'I': 'O', 'J': 'P', 'K': 'Q', 'L': 'R', 'M': 'S', 'N': 'T', 'O': 'U', 'P': 'V', 'Q': 'W', 'R': 'X', 'S': 'Y', 'T': 'Z', 'U': 'A', 'V': 'B', 'W': 'C', 'X': 'D', 'Y': 'E', 'Z': 'F'}
YAHNGS

[Program finished]

大概是环绕?这有点像塞塞尔密码?可以重用python中已有的很多东西

def genCipher(offset):
  from collections import deque
  from string import ascii_uppercase
  c = deque(ascii_uppercase)
  c.rotate(-offset)
  return dict(zip(ascii_uppercase, c))

print(genCipher(6))
 {A': 'G', 'B': 'H', 'C': 'I', 'D': 'J', 'E': 'K', 'F': 'L', 'G': 'M', 'H': 'N', 'I': 'O', 'J': 'P', 'K': 'Q', 'L': 'R', 'M': 'S', 'N': 'T', 'O': 'U', 'P': 'V', 'Q': 'W', 'R': 'X', 'S': 'Y', 'T': 'Z', 'U': 'A', 'V': 'B', 'W': 'C', 'X': 'D', 'Y': 'E', 'Z': 'F'} 

答案 2 :(得分:0)

您正在重新发明轮子,请使用str.translate。要使用str.translate,您需要先创建一个可用于将原始字符映射到新字符的字典。可以使用maketrans创建此转换表。

>>> mapping = {'A': 'Q', 'B': 'W', 'C': 'E', 'D': 'R'}
>>> str.maketrans(mapping)
{65: 'Q', 66: 'W', 67: 'E', 68: 'R'}

现在我们已准备好表格,我们只需要将其传递给translate

>>> table = str.maketrans(mapping)
>>> "AB".translate(table)
'QW'

现在我们得到了理想的结果。