从python中的用户输入交换元音

时间:2017-01-18 02:55:29

标签: python string for-loop input

我想让用户输入一个句子并让程序打印出相同的句子除了,如下所示交换元音:

  • A = E
  • E = I
  • I = O
  • O = U
  • U = A

我已经开始编写以下代码了,但除了告诉程序如何为每一个字母做什么之外,还有更有效的方法吗?

inp = input("Enter a sentence: ")
for letter in inp:
    if letter == "a":
        print("e", end = "")
    if letter == "b":
        print("b", end = "")
    if letter == "c":
        print("c", end = "")
    if letter == "d":
        print("d", end = "")
    if letter == "e":
        print("i", end = "")
    if letter == "f":
        print("f", end = "")
    if letter == "g":
        print("g", end = "")
    if letter == "i":
        print("o", end = "")
    if letter == "o":
        print("u", end = "")
    if letter == "u":
        print("a", end = "")

5 个答案:

答案 0 :(得分:3)

可能最有效的方法是使用str.translatestr.maketrans}:

>>> inp = input("Enter a sentence: ")
>>> print(inp.translate(str.maketrans('AaEeIiOoUu', 'EeIiOoUuAa')))
Enter a sentence: hello YOU
Hillu YUA

但是如果你想远离str - 方法,你可以使用dict而不是所有这些if

change = {'A': 'E', 'a': 'e',
          'E': 'I', 'e': 'i',
          'I': 'O', 'i': 'o',
          'O': 'U', 'o': 'u',
          'U': 'A', 'u': 'a'}

for char in inp:
    print(change.get(char, char), end='')

这将查找该字符是否在change字典中,如果包含它,则会打印它的值,否则为默认值(.get的第二个参数 - 原始字符)打印出来。

答案 1 :(得分:1)

实现这一目标的最快捷,最简单的方法之一是使用字典。

创建一个字典,其中键是要删除的字符,值是要插入的字符:

characters_to_swap = {'a':'e', 'e':'i', 'i':'o', 'o':'u', 'u':'a'}

然后迭代输入:

data = input()
for character in data:
    if character in characters_to_swap:
        print(characters_to_swap[character], end='')
    else:
        print(character, end='')

不要过于担心end中的print参数,它只对应于打印的最后一个字符。我将其设置为'',因此不会打印换行符。

答案 2 :(得分:1)

inp = input("Enter a sentence: ").lower()
output = ""
letters = {"a":"e", "e":"i", "i":"o", "o":"u", "u":"a"}
for letter in inp:
    if letter in letters:
        output = output + letters[letter]
    else:
        output = output + letter
print(output)

答案 3 :(得分:0)

这是一个更明确的答案,但不是最紧凑的答案。 使用词典,允许您将str个字符映射到其他人,并通过输入列表来交换它们。

inp = list(input("Enter a sentence: "))
letter_swap = {'A': 'E', 'E': 'I', 'I': 'O', 'O' : 'U', 'U' : 'A', 'a' : 'e', 'e' : 'i', 'i' : 'o', 'o' : 'u', 'u' : 'a'}

for i, letter in enumerate(inp):
    if letter in letter_swap:
         inp[i] = letter_swap[letter]

inp = ''.join(inp)

print(inp)

答案 4 :(得分:0)

为了完整起见......

以下是使用lambda函数的单行代码:

(lambda s: (lambda t, d: print("".join(d[c] if c in d else c for c in t)))(s, {'a':'e', 'e':'i', 'i':'o', 'o':'u', 'u':'a'}))(input("Enter a string: "))

然而,这很难阅读,甚至更难调试。

此解决方案使用的概念远远不是所提出的基本问题(复杂lambda函数,lambda函数评估,生成器,内联if...else,{{1方法...),但我发现它非常有趣,因为它产生了一个单行。