替换在Encription程序中不起作用

时间:2018-11-17 19:10:53

标签: python python-3.x

我正在创建一个加密程序。该方案通过如下旋转消息中的元音来工作:

“ a”变成“ e”,“ e”变成“ i”,“ i”变成“ o”,“ o”变成“ u”,“ u”变成“ a”。

如果一个字母不是元音,它将被移动n次。如果n为5,则 “ b”变成“ g”,“ c”变成“ h”,“ d”变成“ i”,…,“ x”变成“ d”,“ z”变成“ e” 例如字母“ break”变成“ gwiep”。要对其解密,请执行相反的操作。 这是我的代码,但仅用于元音,无法提供所需的输出。

print('Welcome to the data encryption program.')

words = input('Enter your messsage:r ')

for char in words:
    if char == 'a':
        words = words.replace('a','e')
    elif char == 'e':
        words = words.replace('e','i')
    elif char == 'i':
        words = words.replace('i','o')
    elif char == 'o':
        words = words.replace('o','u')
    elif char == 'o':
        words = words.replace('o','u')


print(words)

这是我得到的结果。

Enter your messsage: aeiou
uuuuu

4 个答案:

答案 0 :(得分:1)

words.replace将替换字符串中的所有字母,因此在第一次遇到a之后,它们将被替换为e。然后,只要遇到e,您先前替换的a(现在为e)将翻译为i等等。

最好不要使用replace(),而是将每个翻译附加到翻译后的字符串上:

print('Welcome to the data encryption program.')

words = input('Enter your messsage: ')
translated = '';

for char in words:
    if char == 'a':
        translated += 'e'
    elif char == 'e':
        translated += 'i'
    elif char == 'i':
        translated += 'o'
    elif char == 'o':
        translated += 'u'
    else:
        translated += char

print(translated)

结果:

[bart@localhost playground]$ python3 foo.py 
Welcome to the data encryption program.
Enter your messsage: aeiou
eiouu

我还必须补充一点,这种“加密”绝对不能在真实的应用程序中使用。

答案 1 :(得分:1)

我认为最简单的方法是使用字典:

code = {"a":"e", "e":"i", "i":"o", "o":"u", "u":"a"}

word = input("Your word: ")

encoded = [code[w] if w in code else w for w in word]
encoded = ''.join(encoded)

首先,我用您的代码定义一个字典,我要求一个单词并将其转换为列表。我替换了应替换的元素,否则将旧元素保留在列表理解中。最后,我将列表添加到字符串中。

答案 2 :(得分:0)

这可能有效:

new_word = []

for char in words:
    if char == 'a':
        new_word.append('e')
    elif char == 'e':
        new_word.append('i')
    elif char == 'i':
        new_word.append('o')
    elif char == 'o':
        new_word.append('u')
    elif char == 'u':
        new_word.append('a')


print(''.join(new_word))

答案 3 :(得分:0)

实现的问题是,您要将所有字符变形为彼此,直到它们全部变成u。您的a变成e,然后您的a和e变成我,...,直到所有字符都变成u。

保留字符并交换到位的一种方法是先将它们替换为不同的值,然后将新字符串转换为所需的字符。一个示例是将它们与大写值交换,然后只需将字符串小写即可得到答案。

这也不必循环执行,可以在字符串上完成。

print('Welcome to the data encryption program.') 

words = input('Enter your message: ')
words = words.replace('a','E')
words = words.replace('e','I')
words = words.replace('i','O')
words = words.replace('o','U')
words = words.replace('u','A')

words = words.lower()

print(words)