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

时间:2018-03-01 00:21:18

标签: python python-3.x function for-loop

我试图在一个函数中运行for循环,该函数用于计算用户输入字符串中的元音。但是,错误" builtins:TypeError"不断出现。我尝试使用len函数简单地使用字符串的长度,但错误只是不会消失,因此代码最终会被破坏。这个问题有方法解决吗? Screenshot of the code with the error message showing

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

7 个答案:

答案 0 :(得分:1)

这是您的代码的重写版本。

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))

<强>解释

  • 不要在类或内置函数之后命名变量,例如使用counter代替sum
  • 使用x.lower()。注意后面的括号,表示你想要执行的功能。
  • set('aeiou')创建了一组元音,即{'a', 'e', 'i', 'o', 'u'}。检查变量是否有效,O(1)复杂度。
  • input()默认返回一个字符串,因此无需手动转换为str

答案 1 :(得分:0)

string.lower更改为string.lower()string.lower引用了这些函数。把字母放在引号中。您没有定义这些变量。

该功能的更好版本:

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

答案 2 :(得分:0)

你有两个问题。

首先,lower是一个函数,你必须通过在它后面添加括号来调用它。

string = string.lower()

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

其次,当你测试角色是否是元音时,你需要在它们周围加上引号。否则,您正在尝试使用您从未定义过的名为ae等的变量。

if char == 'a' or char == 'e' or char == 'i' or char == 'o' or char == 'u':

您还可以将其简化为:

if char in 'aeiou':

答案 3 :(得分:0)

我认为你想在#34;中使用&#34;这里:

string = raw_input('Please enter a phrase. ')
def countvowels(string):
  string = str(string).lower()
  sum = 0
  for char in string:
    if char in ('a', 'e', 'i', 'o', 'u'):
      sum += 1
  print(sum)
  return sum


countvowels(string)

答案 4 :(得分:0)

我自己的旋转。使用更高效的集合。如果您正在解析整本书,则非常有用

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(凌乱)的解决方案

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)

答案 5 :(得分:0)

使用正则表达式

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)

答案 6 :(得分:0)

sum(userString.count(c) for c in 'aeiouAEIOU')

userString作为字符串,具有其自己的'count'方法。不确定这是不是真的表现。