我想让用户输入一个句子并让程序打印出相同的句子除了,如下所示交换元音:
我已经开始编写以下代码了,但除了告诉程序如何为每一个字母做什么之外,还有更有效的方法吗?
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 = "")
答案 0 :(得分:3)
可能最有效的方法是使用str.translate
(str.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方法...),但我发现它非常有趣,因为它产生了一个单行。