如何使用 Python 移位输入字符串中的元音

How to shift vowels in input string with Python

提问人:Nairda123 提问时间:7/24/2020 最后编辑:GeorgyNairda123 更新时间:7/27/2020 访问量:1625

问:

我正在尝试编写一个函数,该函数可以让我移动字符串中的各个字母。字符串来自输入。

我正在看元音,所以“a、e、i、o、u”

我希望将单个字母向右移动一个。即世界“M E”将变成“M I”,因为 IE 之后的下一个字母。

这是我到目前为止所拥有的:

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)

然而,这会随机化单个元音的变化,让它转移到下一个字母的最佳方法是什么?

python 字符串

评论

1赞 Sai Sreenivas 7/24/2020
你想使用下一个字母,那你为什么要使用随机?
5赞 sushanth 7/24/2020
创建字典而不是元组{"a":"e", "e": "i",...}
3赞 tripleee 7/27/2020
另请参阅 stackoverflow.com/questions/8886947/...,其中有几个有趣的变体,其中一些可以轻松适应您的用例。

答:

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
另一种选择:完整的循环可以替换为fornew_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,除非它是元组中的最后一个元音,在这种情况下,它将索引设置为零。