Python 用于计算用户输入字符串中元音的函数中的For循环
我正在尝试在一个函数中运行for循环,该函数用于计算用户输入字符串中的元音。但是,错误“builtins:TypeError”不断出现。我尝试过简单地使用字符串的长度,使用len函数,但是错误不会消失,代码最终也因此而被破坏。有解决办法吗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循环的开始。此循环的目的是确保
例如,我首先要求用户输入一个字符串。然后应该使用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')
。检查变量是否具有O(1)复杂度的有效性{'a','e','i','o','u'}
- 默认情况下,
返回字符串,因此无需手动转换为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')