在Python中的字符串中查找元音的位置

时间:2019-02-24 23:33:53

标签: python python-3.x

我正在尝试处理一些Python代码,在该代码中会提示一个人输入文本字符串。然后,我需要找到字符串中所有元音的位置。我有这个,但是不能用...

userInput = (input("Enter a line of text: ")
vowels = ("aeiouAEIOU")
position = 0
for char in userInput :
    if char in vowels :
        position = userInput.find(vowels)
        print(char, position)

它返回元音,但每个位置为-1。我究竟做错了什么?我已经读到可以使用index函数,但是已经有几个星期了。关于此代码的简单修复有什么建议吗?谢谢!!

5 个答案:

答案 0 :(得分:2)

您的代码有一个错误,当您执行userInput.find(vowels)时,请记住字符串vowels"aeiouAEIOU",因此除非其中一个字符串"aeiouAEIOU"位于{ {1}}。相反,最好userInput并返回这些索引。

enumerate

答案 1 :(得分:1)

您可以通过列表理解并枚举来做到这一点:

positions = [i for i, char in enumerate(userInput) if char in vowels]

这将为您提供元音索引的列表-它将您的用户输入字符串枚举为带有索引的字符列表,并应用谓词-在这种情况下,如果字符不是元音。

答案 2 :(得分:0)

一旦测试char in vowels得到验证,您当前正在阅读的字母char元音,此时可以直接输出。另一方面,您需要记住位置,每次移动到下一个char时都将其递增:

userInput = "This is some input from the user"
vowels = "aeiouAEIOU"
position = 0
for char in userInput:
    if char in vowels:
        print(char, position)
    position += 1

可以将这段代码改进为更多的Python语言,使用enumerate可以使您免于手动跟踪位置:

serInput = "This is some input from the user"
vowels = "aeiouAEIOU"
for position, char in enumerate(userInput):
    if char in vowels :
        print(char, position)

可以进行另一项改进,这次我们可以改进性能。检查char in vowels的时间成本与字符串vowels的大小成正比。另一方面,您可以将vowels的类型从string更改为set,检查项目是否属于集合是在固定时间内完成的:

userInput = "This is some input from the user"
vowels = set("aeiouAEIOU")
for pos, char in enumerate(userInput):
    if char in vowels:
        print(char, pos)

答案 3 :(得分:0)

string find(str,str, beg=0, end=len(string)) 

方法确定字符串str是出现在字符串中还是出现在字符串的子字符串中(如果给出了起始索引beg和结束索引end)。在您的代码中,userInput.find(vowels)将检查userInput是否包含完整的元音串,即“ aeiouAEIOU”。因此可以对代码进行如下改进:

userInput = (input("Enter a line of text: ")
vowels = ("aeiouAEIOU")
position = 0
for char in userInput :
    if char in vowels :
        position = userInput.find(char)
        print(char, position)

答案 4 :(得分:0)

尝试以下代码,它与您的代码相似:

library ieee;

use ieee.std_logic_1164.all;

package output_array_types is

    type op_arr is array(0 to 7) of STD_LOGIC;
    type op_arr_32bit is array(0 to 7) of STD_LOGIC_VECTOR(31 downto 0);

end package output_array_types;