根据python中子字符串的第一个字符打印结果



我想根据子字符串的第一个字符(元音/辅音(来计算python中字符串中子字符串的数量。例如,在字符串"Banana"中,"an"是以元音"a"开头的子字符串,它出现了2次,所以我想数两次。其他组合('ana'/'anan'…etc(也是如此。子字符串可以重复,这意味着'an'也显示在'ana'中,因此它将被计数两次。

但我只能计算字符串中出现的子字符串(元音(的数量,有没有办法根据子字符串的第一个字符来计算子字符串的数量?此外,它应该是重复的,就像上面讨论的"an"one_answers"ana"的情况一样。目前我的代码如下。非常感谢!!

string = input() #User input a string with vowel and consonant
def minion_game(string):
count_v = 0 #count the number of sub-string started with vowel
count_c = 0 #count the number of sub-string started with consonant
for i in range(len(string)):
if string[i] == 'a' or string[i] == 'e' or string[i] == 'i' or string[i] == 'o' or string[i] == 'u':
count_c += 1
else:
count_v += 1
return count_v, count_c

我认为您应该将问题分为两部分:

  1. 要计数的子字符串是什么
  2. 每个子字符串出现多少次

对于第一部分,搜索字符串中的每个元音,并返回每个从元音开始的子字符串,然后增加长度,直到到达字符串末尾。下面是一个实现示例:

def create_substrings(string):
l = len(string)
for vowel in "aeiou":
pos = 0
while pos != -1:
pos = string.find(vowel, pos)
if pos != -1:
# Found vowel at position pos
for i in range(pos, l):
# yield a string starting at pos and ending at i
yield string[pos:i+1]
pos += 1
for substr in create_substrings("bananaicecream"):
print(substr)

第2部分应该以类似的方式实现(使用循环和str.find(,并使用第一个函数返回的每个子字符串来调用该函数。

看起来您想要单独计算以元音或辅音开头的每个可能的子串,但不包括单个元音和辅音本身。此外,我认为子字符串列表可能会排除字符串本身,因此这里有一种方法可以创建两个列表:一个是所有可能的辅音子字符串,另一个是全部可能的元音子字符串。它使用一个简单的if statement过滤掉单个字符或整个字符串的结果,然后根据每个列表中的元素数量返回您要查找的计数:

def minion_game(userInput):
string = str.lower(userInput)#convert input to lowercase string
count_v = []
count_c = []
for i in range(2):# run loop twice, once to find vowels, and once to find consonants
keyRange = "aeiou"
if i > 0:
keyRange = "bcdfghjklmnpqrstvwxyz"
for keyLetter in keyRange:#create substring lists
letter = 0
while letter != -1:
letter = string.find(keyLetter, letter)
if letter != -1:
for num in range(letter, len(string)):
if len(string[letter:num+1])>1 and len(string[letter:num+1]) != len(string):
if i == 0:
count_v.append(string[letter:num+1])
else:
count_c.append(string[letter:num+1])
letter += 1

print "All vowel substrings: "+str(count_v)
print "Total count of vowel substrings: "+str(len(count_v))
print "All consonant substrings: "+str(count_c)
print "Total count of consonant substrings: "+str(len(count_c))
return (len(count_v), len(count_c))
userInput = "Banana"
print minion_game(userInput)

以下是此代码的输出:

All vowel substrings: ['an', 'ana', 'anan', 'anana', 'an', 'ana']
Total count of vowel substrings: 6
All consonant substrings: ['ba', 'ban', 'bana', 'banan', 'na', 'nan', 'nana', 'na']
Total count of consonant substrings: 8
(6, 8)

最新更新