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