我正在尝试处理一些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函数,但是已经有几个星期了。关于此代码的简单修复有什么建议吗?谢谢!!
答案 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;