如何计算并打印字符串中出现最少和最多的元音字母?
我需要输入一个字符串,然后计算这个字符串中元音字母的数量,接着找出出现次数最多和最少的元音字母。如果字符串里没有任何元音字母,就要打印一条消息,告诉我“没有输入元音”。如果有多个元音字母出现的次数相同,比如说“a”和“e”都出现了两次,这些元音字母都应该被列为出现次数最多或最少的。如果字符串里有一些元音字母,但不是全部,那么那些没有出现的元音字母就应该被忽略,而不是显示“a=0”。我觉得一开始的计数部分基本上是对的,但还不够准确。至于找出出现次数最多和最少的部分,我甚至不知道从哪里开始。任何帮助都非常感谢!
myString = str(input("Please type a sentence: ").lower())
count = [0, 0, 0, 0, 0]
for vowel in myString:
if vowel == "a" :
count[0]=count[0]+1
if vowel == "e" :
count[1]=count[1]+1
if vowel == "i" :
count[2]=count[2]+1
if vowel == "o" :
count[3]=count[3]+1
if vowel == "u" :
count[4]=count[4]+1
while count[0] > 0:
print ("acount :",count[0])
break
while count[1] > 0:
print ("ecount :",count[1])
break
while count[2] > 0:
print ("icount :",count[2])
break
while count[3] > 0:
print ("ocount :",count[3])
break
while count[4] > 0:
print ("ucount :",count[4])
break
else:
if count[0] == 0 and count[1] == 0 and count[2] == 0 and count[3] == 0 and count[4] == 0:
print ("No vowels were found")
3 个回答
0
from collections import Counter
d = Counter(input("Enter Sentence:"))
print sorted("aeiou",key=lambda x:d.get(x,0))
这看起来是个简单多了的方法...
0
好吧,你有一个列表,叫做 count
,里面有5个计数。你怎么找出哪个计数是最大的呢?只需要对它使用 max
函数就可以了:
>>> count = [7, 1, 3, 10, 2]
>>> max(count)
10
现在你知道最大值是10了,怎么知道哪些字母的计数是10呢?
>>> max_count = max(count)
>>> for i, n in enumerate(count):
... if n == max_count:
... # use i the same way you use it above
你应该也能想出怎么找出最小计数。
不过,最小计数还有一个额外的问题:听起来你想要的是不为0的最小值,而不是绝对的最小值。我会这样写:
>>> min_count = min(x for x in count if x>0)
……或者,也许可以更简洁一些:
>>> min_count = min(filter(bool, count))
但我猜你还不太懂列表推导式。如果是这样的话,你需要明确地遍历这些值,记录下不为0的最小值。这段 max
的实现应该能帮助你找到正确的方向:
def my_max(iterable):
max_value = None
for value in iterable:
if max_value is None or value > max_value:
max_value = value
return max_value
说到这里,这就是很多情况下使用合适的数据结构能让事情变得简单得多的例子。例如,如果你用字典而不是列表,你可以用这个替代你代码的前半部分:
count = dict.from_keys('aeiou', 0)
for vowel in myString:
if vowel in 'aeiou':
count[vowel] += 1
使用 defaultdict
或 Counter
会更简单;这样你就不需要显式地把计数初始化为0了。
0
count=[0,0,0,0,0]
myString = str(input("Please type a sentence: ").lower())
for x in mystring:
flag = 'aeiou'.find(x)
if flag>=0:
count[flag] +=1
print max(count)
这里的 find
函数会尝试在 aeiou
这个字符串中找到 'x',如果找到了,就返回 'x' 的位置;如果没找到,就返回 -1。所以在变量 flag 中,我会得到 'x' 的位置,如果没找到,就会是 -1。