2017-03-03 82 views
1

我想计算一个文本中的元音,我可以这样做。但是我也想要统计一个辅音的元音数量和一个元音的元音数量。有人可以帮助我吗?计数元音其次是辅音

这是我迄今为止,但它说,无效的语法,我在元音中使用i + 1的语法。

s = "text" 
vowels = set("aeuio") 
consonants = set("qwrtypsdfghjklzxcvbnm") 

vowelcount=0 
vowelvowelcount=0 
consonantcount=0 
consvowelcount=0 
consconscount=0 
vowelconscount=0 

for i in s: 
    if i in vowels: 
     vowelcount += 1 
    if i in consonants: 
     consonantcount +=1 

for i in s: 
    if (i in vowels,and i+1 in vowels): 
     vowelvowelcount +=1 

print ("number of vowels:", vowelcount) 
print ("number of consonants:", consonantcount) 
print ("number of vowels followed by vowels:", vowelvowelcount) 
+0

你会想要使用字符串切片并计算你的方式通过字符串。就像元音中的s [2:3]和元音中的s [3:4]一样。 – mba12

+0

@ mba12:但是[3:4]'相当于'[3]'... –

+0

@WillemVanOnsem你是对的,你的语法也很干净。我在看到你的答案之前写了我的评论。 – mba12

回答

1

如果使用for i in si不是索引:它是一个字符。要解决这个问题的一个快捷方法是使用:

for i in range(len(s)-1): 
    if s[i] in vowels and s[i+1] in consonants: 
     vowelconscount += 1 
    elif s[i] in vowels and s[i+1] in vowels: 
     vowelvowelcount += 1 
    # ...

这里我们使用range(..)所有指数遍历达(但不包括)len(s)-1。对于这些指数中的每一个i,我们检查位于i(即s[i])的s中的字符是否为vowels,并且下一个字符s[i+1]是否为共振子。

1

我喜欢Willem的回答。我有另一种选择。在这种情况下,我可能想要使用enumerate

for i, char in enumerate(s[:-1]): 
    if char in vowels and s[i+1] in vowels: 
     vowelvowelcount +=1 
+0

如果没有另一个'if'语句,这将不起作用,因为在上一次迭代中'i + 1'将超出's'范围。 –

+0

@WillemVanOnsem哦,忘了添加'[: - 1]'。谢谢! – sangheestyle

+1

也许你可以使用'enumerate(s [:-1],1)',因为你可以保存'+ 1'为'i + 1'。 –