Python 用于计算用户输入字符串中元音的函数中的For循环

Python 用于计算用户输入字符串中元音的函数中的For循环,python,python-3.x,function,for-loop,Python,Python 3.x,Function,For Loop,我正在尝试在一个函数中运行for循环,该函数用于计算用户输入字符串中的元音。但是,错误“builtins:TypeError”不断出现。我尝试过简单地使用字符串的长度,使用len函数,但是错误不会消失,代码最终也因此而被破坏。有解决办法吗 例如,我首先要求用户输入一个字符串。然后应该使用print语句中调用的函数来计算用户输入字符串中的元音。当前,当键入字符串(如Kay)时,它在第6行生成一个错误代码,该代码表示“for char in(string):”这是for循环的开始。此循环的目的是确保

我正在尝试在一个函数中运行for循环,该函数用于计算用户输入字符串中的元音。但是,错误“builtins:TypeError”不断出现。我尝试过简单地使用字符串的长度,使用len函数,但是错误不会消失,代码最终也因此而被破坏。有解决办法吗


例如,我首先要求用户输入一个字符串。然后应该使用print语句中调用的函数来计算用户输入字符串中的元音。当前,当键入字符串(如Kay)时,它在第6行生成一个错误代码,该代码表示“for char in(string):”这是for循环的开始。此循环的目的是确保在代码退出之前检查所有字母的元音。有一个适当的缩进,由错误的缺乏和计算机科学和编程的原则表明。用户输入的部分,表示“string=input(“请输入短语”)”定义变量字符串,并放在代码顶部。

string.lower
更改为
string.lower()
<代码>字符串。下部引用函数。把字母用引号引起来。您没有定义这些变量

该函数的更好版本:

def countvowels(x):
    return sum([1 for a in x if a in "AEIOUaeiou"])

这是您的代码的一个修改版本

mystr = input('Please enter a phrase:\n')

def countvowels(x):
    counter = 0
    for i in x.lower():
        if i in set('aeiou'):
            counter += 1
    return counter

print(countvowels(mystr))
解释

  • 不要在类或内置函数后命名变量,例如使用
    计数器
    而不是
    求和
  • 使用
    x.lower()
    。请注意后面的括号,表示您希望执行函数
  • set('aeiou')
    创建一组元音,即
    {'a','e','i','o','u'}
    。检查变量是否具有O(1)复杂度的有效性
  • 默认情况下,
    input()
    返回字符串,因此无需手动转换为
    str

    • 您有两个问题

      首先,
      lower
      是一个函数,您必须在它后面加括号来调用它

      string = string.lower()
      
      您的代码只是将
      string
      设置为函数本身,而不是运行它并使用结果

      第二,当你测试这个字符是否是元音时,你需要在它们周围加引号。否则,您将尝试使用从未定义过的名为
      a
      e
      等的变量

      if char == 'a' or char == 'e' or char == 'i' or char == 'o' or char == 'u':
      
      您还可以将其简化为:

      if char in 'aeiou':
      
      我想你应该在这里用“in”:


      我自己的想法。使用更高效的集合。如果要分析整本书,则此功能非常有用

      from collections import Counter
      
      user_input = input("Please enter a string: ")
      
      # counter occurances of each letter
      counter = Counter(user_input)
      
      # drop non vowels
      vowels_only = {k : v for k, v in counter.items() if k in "aeiou"}
      
      # sum
      vowels_total = sum(vowels_only.values())
      
      print("Total vowels:", vowels_total)
      
      快速解决方案 这是一个简单但非pythonic(混乱)的解决方案


      使用正则表达式

      import re
      
      mystrings = input("Please enter a string: ")
      
      vowels = [len(re.findall('a|e|i|o|u', x.lower())) for x in mystrings]
      
      print sum(vowels)
      

      作为字符串,userString有自己的“count”方法。但不确定这是否有效。

      (不是屏幕截图)以获得良好的响应。请注意,
      count
      是一个类方法。@Prune,很好的观点,尽管这与我提到类名的观点没有冲突:)。也就是说,我将重新命名它。
      user_input = input("Please enter a string: ")
      
      # filter out everything that isn't a vowel, then count the len of what's left
      vowel_count = len(list(filter(lambda x: x in "aeiou", list(user_input))))
      
      print(vowel_count)
      
      import re
      
      mystrings = input("Please enter a string: ")
      
      vowels = [len(re.findall('a|e|i|o|u', x.lower())) for x in mystrings]
      
      print sum(vowels)
      
      sum(userString.count(c) for c in 'aeiouAEIOU')