我需要输入一个字符串,计算该字符串中的元音数量,然后计算出发音最多和发音最少的元音。当字符串根本不包含元音时,应打印一条消息,说“没有输入元音”。在存在相同次数的元音的情况下(例如,如果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")
答案 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
使用defaultdict
或Counter
可让您更轻松;那么你不需要将计数显式初始化为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