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

在python中交换用户输入的元音,python,string,for-loop,input,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

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

  • 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 = "")

最有效的方法可能是使用(与):


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

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
字典中,如果包含该字符,它将打印其值,否则将打印默认值(原始字符的第二个参数)。

实现这一点的最快和最简单的方法之一是使用字典

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

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='')

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

这是一个更清晰的答案,但不是最简洁的答案。
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)
使用字典,您可以将
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)

为了完整起见

下面是一个使用
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
、连接
方法…),但我觉得它非常有趣,因为它产生了一个线性

(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: "))