首页 > 解决方案 > 编写一个接收字符串并计算元音的while循环?

问题描述

编写一个 while 循环,它接受一个字符串并计算元音。使用字符串“愿原力与你同在”。打印结果。(答案:8)

对此的任何帮助将不胜感激!我一直想出一个连续的循环。它必须使用一个while循环并打印元音的数量(8)。谢谢!!

count = 0
vowels = ['a', 'e', 'i', 'o', 'u']
s = "May the force be with you."
while i in s:
    if i in vowels:
        count += 1
print(count)

标签: python

解决方案


该声明:

while i in s:

不按你的想法做。如果是whilea for,它将一次遍历一个字符的字符串,并且可能会起作用。

但是,表达式 i in s(即while语句中的内容)仅检查是否is“集合”中的事物之一,并为您提供真或假。它不会遍历 集合。is

如果i已设置为某个值,则 while 循环将无限执行或从不执行,具体取决于i. 如果i未绑定到值,您将收到运行时错误。


作为一种解决方案,您可以使用以下内容迭代字符串中的字符(来自实际成绩单):

>>> str = "pax"
>>> for ch in str:
...     print(ch)
...
p
a
x

等效while版本是:

>>> str = "pax"
>>> idx = 0                 # OR: idx, slen = 0, len(str)
>>> while idx < len(str):   #     while idx < slen:
...     print str[idx]
...     idx += 1
...
p
a
x

尽管for对于此类任务,该变体通常被认为更 Pythonic。

此外,您可以使用 来检测字符是否是一组字符中的一个in,例如在以下脚本中:

>>> str = "pax"
>>> for ch in str:
...     if ch in "ABCabc":
...         print(f"{ch} is either a, b, or c")
...
a is either a, b, or c

因此,您应该能够结合该for/while循环和if语句来计算元音并输出它(使用print)。

特别注意我用于元音检查的字符串,它还包含大写元音。请记住,尽管您的规范可能只使用拉丁元音,但今天的 Unicode 世界不会原谅这种疏忽。例如,请参见此处


推荐阅读