具体地,用户输入单词。我想编制一个使用的所有元音和辅音的列表(没有重复,只是每个使用的元音的注释)。但是,我只想在找到单词中的最后一个元音之后开始计算辅音。
例如,如果输入是“你好”,它应该计算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 :(得分: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)