提问人:Nairda123 提问时间:7/24/2020 最后编辑:GeorgyNairda123 更新时间:7/27/2020 访问量:1625
如何使用 Python 移位输入字符串中的元音
How to shift vowels in input string with Python
问:
我正在尝试编写一个函数,该函数可以让我移动字符串中的各个字母。字符串来自输入。
我正在看元音,所以“a、e、i、o、u”
我希望将单个字母向右移动一个。即世界“M E”将变成“M I”,因为 I 是E 之后的下一个字母。
这是我到目前为止所拥有的:
import random
vowels = ("a", "e", "i", "o", "u")
message = input("Enter a string")
new_message = ""
for letter in message:
if letter not in vowels:
new_message += letter
else:
new_message += random.choice(vowels)
print(new_message)
然而,这会随机化单个元音的变化,让它转移到下一个字母的最佳方法是什么?
答:
0赞
Kanza Sheikh
7/24/2020
#1
您可以将方法更改为:
for letter in message:
if letter not in vowels:
new_message += letter
else:
i = vowels.index(letter)
i+=1
new_message += vowels[i]
这样,该函数将在元音数组中找到元音的索引,并将其更新一个以在新消息中添加下一个元音
评论
0赞
vestronge
7/24/2020
不考虑替换“u”
1赞
vestronge
7/24/2020
#2
vowels = ["a", "e", "i", "o", "u"]
mapper = dict(zip(vowels, vowels[1:] + [vowels[0]])
message = input("Enter a string")
new_message = ""
for letter in message:
new_message += mapper.get(letter, letter)
print(new_message)
但是,我建议使用 re 库
import re
new_message = re.sub("\S", lambda x: mapper.get(x.group(0), x.group(0)))
请注意,在这两种方法中,如果不存在相应的映射器,则字符将替换为其自身,否则将替换为映射器项
6赞
Hampus Larsson
7/24/2020
#3
如果你想翻译整个字符串,那么我会看看.str.translate
下面是一个使用元音的简单示例:
>>> v = "aeiou"
>>> vDict = {v[i]: v[(i+1)%len(v)] for i in range(len(v))}
>>> vDict
{'a': 'e', 'e': 'i', 'i': 'o', 'o': 'u', 'u': 'a'}
>>> "This is a test-string. hope it works!".translate(str.maketrans(vDict))
'Thos os e tist-strong. hupi ot wurks!'
评论
0赞
Chris Charley
7/25/2020
我不知道你可以给一本字典.好!str.maketrans
2赞
Philip Purwoko
7/24/2020
#4
这是真的。使用字典应该可以解决它
import random
vowels = {"a":"e", "e":"i", "i":"o", "o":"u", "u":"a"}
message = input("Enter a string : ")
new_message = ""
for letter in message:
if letter not in vowels:
new_message += letter
else:
new_message += vowels[letter]
print("Converted text : " + new_message)
输出:
Enter a string : hello sir
Converted text : hillu sor
评论
2赞
Matthias
7/24/2020
另一种选择:完整的循环可以替换为for
new_message = ''.join(vowels.get(c, c) for c in message)
0赞
Martijn Bots
7/24/2020
#5
也许你的可能看起来像这样:else
next_vowel_index = vowels.index(letter) + 1
if next_vowel_index >= len(vowels):
next_vowel_index = 0
new_message += vowels[next_vowel_index]
此代码采用当前元音的索引并将其递增 1,除非它是元组中的最后一个元音,在这种情况下,它将索引设置为零。
评论
{"a":"e", "e": "i",...}