如何计算和打印字符串中发音最少和最多的元音?

时间:2014-11-04 23:07:42

标签: python

我需要输入一个字符串,计算该字符串中的元音数量,然后计算出发音最多和发音最少的元音。当字符串根本不包含元音时,应打印一条消息,说“没有输入元音”。在存在相同次数的元音的情况下(例如,如果a和e都出现两次),这些元音应该都表现为最多或最少发生。但是,如果某些元音在字符串中但不是全部,那么应该忽略那些没有出现在sting中的元音(而不是打印“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 :(得分:0)

from collections import Counter

d = Counter(input("Enter Sentence:"))
print sorted("aeiou",key=lambda x:d.get(x,0))

似乎是一种更简单的方法......

答案 1 :(得分:0)

嗯,你已经有一个清单count,里面有5个计数。你怎么知道哪个数最高?只需拨打max就可以了:

>>> count = [7, 1, 3, 10, 2]
>>> max(count)
10

现在你知道max是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

使用defaultdictCounter可让您更轻松;那么你不需要将计数显式初始化为0。

答案 2 :(得分: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功能会尝试查找' x'来自aeiou如果找到' x`的返回位置,则返回-1。所以在旗帜中我将得到其他位置-1