当在前一个循环中找到某个字符时,如何开始新的循环?

时间:2017-09-25 16:28:43

标签: python methods boolean

具体地,用户输入单词。我想编制一个使用的所有元音和辅音的列表(没有重复,只是每个使用的元音的注释)。但是,我只想在找到单词中的最后一个元音之后开始计算辅音。

例如,如果输入是“你好”,它应该计算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)

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

作为一方,我们只做了非常基本的命令,比如布尔,连接和字符串方法。没有字典或列表或类似的东西。我很确定有一种简单的方法可以做到这一点,但我似乎无法弄明白。

2 个答案:

答案 0 :(得分:1)

不是只计算第一个元音后的元素,为什么不每次都计算,但每当找到元音时重置结果?

    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)

答案 1 :(得分: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)