我试图在一个函数中运行for循环,该函数用于计算用户输入字符串中的元音。但是,错误" builtins:TypeError"不断出现。我尝试使用len函数简单地使用字符串的长度,但错误只是不会消失,因此代码最终会被破坏。这个问题有方法解决吗? Screenshot of the code with the error message showing
例如,我首先要求用户输入一个字符串。然后应该使用在print语句中调用的函数来计算用户输入的字符串中的元音。目前,当键入一个字符串(例如Kay)时,它会在第6行产生一个错误代码,表示"对于char in(string):"这是for循环的开始。此循环的目的是确保在代码退出之前检查所有字母的元音。有一个适当的缩进,由缺乏错误和计算机科学和编程原则表明。用户输入的部分,表示" string = input("请输入短语。")"定义变量字符串,并放在代码的顶部。
答案 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
设置为函数本身,而不是运行它并使用结果。
其次,当你测试角色是否是元音时,你需要在它们周围加上引号。否则,您正在尝试使用您从未定义过的名为a
,e
等的变量。
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'方法。不确定这是不是真的表现。