繁体   English   中英

用户输入的字符串中元音计数功能中的For循环

[英]For Loop in a Function for Counting Vowels in a User Inputted String

我试图在一个旨在对用户输入的字符串中的元音进行计数的函数中运行for循环。 但是,错误“ builtins:TypeError”不断出现。 我已经尝试过使用len函数使用字符串的长度,但是错误不会消失,因此代码最终被破坏了。 有针对这个的解决方法吗? 该代码的屏幕快照,并显示错误消息

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

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

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

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

功能的更好版本:

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

你有两个问题。

首先, 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':

我认为您想在此处使用“中”:

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)

我自己旋转。 使用更有效的集合。 如果您要解析整本书,则很有用

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)

快速解决方案

这是一个简单但非Python的解决方案

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM