2017-09-25 60 views
1

具体来说,用户输入一个单词。我想编制一个所有使用的元音和辅音的列表(不重复,只是每个使用的音符)。但是,我只想在找到单词中的最后一个元音之后开始统计辅音。当在前一个循环中找到某个字符时,如何开始一个新循环?

例如,如果输入是“hello”,它应该计数e,o,但没有辅音,因为在最后一个元音之后不存在辅音,并且计数元音= 2,辅音= 0。如果输入是“swarm”,它应该计算a,r,m,元音= 1,辅音= 2。 “书”会给你o,k,元音= 1,辅音= 1。

我希望程序能够满足其他条件,但这是第一步,也是最重要的一步。

这里是我的,但它不工作,因为我需要它(因为有字母表中的每个字母行,我只需要使用引号,以显示报表的延续):

for i, ch in enumerate(word): 
    if ch in VOWELS: 
     if ch=="a" and ch not in VL: 
      VL=VL+"a" 
      VC+=1 
     if ch=="e" and ch not in VL: 
      VL=VL+"e" 
      VC+=1 
     #" " for each other vowel 
    if ch not in VOWELS: 
     if ch=="b" and ch not in CL: 
      CL=CL+"b" 
      CC+=1 
     if ch=="c" and ch not in CL: 
      CL=CL+"c" 
      CC+=1 
     #" " for each other consonant 
print(VL[1:]) 
print(VC) 
print(CL[1:]) 
print(CC) 

我已经尝试缩进辅音部分,只在元音搜索完成后才开始,但是,这似乎并不奏效。我需要索引最后一个元音的位置,然后启动辅音循环。

作为一个方面,我们只是在做非常基本的命令,比如布尔,串联和字符串方法。没有字典或列表或类似的东西。我很确定有一个简单的方法来做到这一点,但我似乎无法弄清楚。

回答

0

当您循环使用单词时,还可以使用i值通过其字符向后循环。然后,我们用一个布尔值,确定我们的向后搜索是否命中元音但还是不行,只有第一个元音被击中之前数辅音:

vowels = 'aeiou' 

VL='' 
VC=0 

CL='' 
CC=0 

word = 'hello' 
count_cons = True 
for i, c in enumerate(word): 
    if c in vowels and c not in VL: 
     VL += c 
     VC += 1 

    if word[-i-1] in vowels: 
     count_cons = False 
    elif count_cons: 
     CL += word[-i-1] 
     CC += 1 

print(VL) 
print(VC) 
print(CL) 
print(CC) 

此打印:

eo 
2 

0 

如果您第一个元音,你为什么不指望每一次之后

VL = set(c for c in word if c in vowels) 
CL = set(c for i, c in enumerate(word) 
     if c not in vowels and all(x not in vowels for x in word[i+1:])) 
VC = len(VL) 
CC = len(CL) 

print(VL) 
print(CL) 
print(VC) 
print(CC) 
+0

啊!使用VL来计数VC要比每次添加到它的单独命令好得多。这绝对缩短了代码。向后循环应该可以做到这一点,尽管我必须以相反的顺序打印它们......它们需要在写入时按顺序出现在打印中。但是可以这样做:print(CL [-1:],right? – Marty

+0

应该是print(CL [:: - 1]) – Marty

+0

是的,你确实可以这样做,也可以改变CL + = word [-i-1]'到'CL = word [-i-1] + CL'而不是 – asongtoruin

1

而是只计算consonents的,但每当你找到一个VO重置结果:想缩短这个了,你可以这样做WEL?

if ch=="a" and ch not in VL: 
     VL=VL+"a" 
     VC+=1 
     CL = "" # add these two lines to each condition 
     CC = 0 

而且因为我无法抗拒,代码可以进行更短,更高效:

VL = set() 
CL = set() 

for ch in word: 
    if ch in VOWELS: 
     VL.add(ch) 
     CL = set() 
    else: 
     CL.add(ch) 

VC = len(VL) 
CC = len(CL) 
+0

不能争论更短,更高效!我会尝试重置所有内容并查看它是否适用于少数其他条件我需要补充,其他条件比较容易,所以这应该处理更多的问题。 – Marty