Python 如何获取一个函数来读取输入并定义它

Python 如何获取一个函数来读取输入并定义它,python,Python,我正在尝试编写代码,允许我获取输入字符串并返回该输入字符串中有多少元音。我让它使用内置函数,但我的老师让我把它转换成用户定义的函数,我遇到了很多问题。我设法解决了大部分问题,花了几个小时试图寻找答案,但我还不知道足够的术语来搜索 我已经试过了(而且已经摆弄了几个小时了,但没有运气): 当前错误为“i”未定义。更新 首先,在count\u元音中使用input函数,这样就不会将string作为参数传递。请尝试以下操作: def count_vowels(): string = input('

我正在尝试编写代码,允许我获取输入字符串并返回该输入字符串中有多少元音。我让它使用内置函数,但我的老师让我把它转换成用户定义的函数,我遇到了很多问题。我设法解决了大部分问题,花了几个小时试图寻找答案,但我还不知道足够的术语来搜索

我已经试过了(而且已经摆弄了几个小时了,但没有运气):

当前错误为“i”未定义。

更新 首先,在
count\u元音中使用
input
函数,这样就不会将
string
作为参数传递。请尝试以下操作:

def count_vowels():
    string = input('Enter string: ')
    vowels = 0
    for i in string:
        if i.lower() in 'aieou':
            vowels += 1
    return vowels

print(count_vowels())
也可以在一行中完成:

print(len([x for x in input('Enter string: ') if x.lower() in 'aieou']))

您应该读取一个字符串参数作为输入,我将其命名为
input\u String
,然后逐字符检查它是否是元音,我使用变量
voterls
计算它,最后返回它作为答案

def count_vowels(input_string):
    vowels = 0
    for i in input_string:
    if(i=='a' or i=='e' or i=='i' or i=='o' or i=='u' or i=='A' or i=='E' or i=='I' or i=='O' or i=='U' ):
        vowels = vowels + 1
    return vowels

string = input('Enter string: ')
print(count_vowels(string))

以下是一个快速明确的解决方案:

def count_vowels():
    string = input('Enter string: ')
    vowels = 0
    for i in string:
        if i.lower() in 'aieou':
            vowels += 1
    return vowels

print(count_vowels())
string=input('输入字符串:')
def count_元音(i):
计数器=0
对于i中的字母:
如果['a','e','i','o','u']中的字母.lower():
计数器+=1
返回计数器
打印(计算元音(字符串))
函数的作用是:将每个字母转换为小写字母,以便比较

如果您对此有任何疑问,请随时询问


关于

你可以利用一个字符串实际上是一个可数字符的事实,去掉所有显式的
i=='a'或i=='a'
东西,只需写一个你想要匹配的字母字符串,然后检查
i
是否在其中

def count_vowels(string):
    vowels = 0
    for i in string:
        if i in 'AEIOUaeiou':
            vowels += 1
    return vowels


string = input('Enter string: ')
print(count_vowels(string))
输入

The quick brown fox jumps over the lazy dog
11
输出

The quick brown fox jumps over the lazy dog
11

您是否可以发布完整的错误,因为运行时给出的代码打印为true dosnt give error i未定义
返回和('aeiou'中的[item.lower()表示i中的item])
。您已经找到了问题的答案,这为您的学习提供了下一步:列表理解和布尔是整数的一个子类,因此可以对字符串中的i求和
:如果i.lower()in('a','e','i','o','u'):
?非常感谢,现在我知道了什么是有效的,我将花一些时间研究它为什么会这样工作。谢谢你,伙计。@roganjosh是的,当然。我有点懒得完全更改它,所以复制了他在
if
语句中的部分:@AldenTank更新了roganjosh的观察等等,我错过了这里的主要问题。函数中根本不需要有
input()
。OP的工作方式没有问题;事实上,这比你的方法更正确。唯一的问题是,
字符串
也是一个模块,因此可能会有名称冲突,但它本身是一个列表,所以可以用
['a','e','i','o','u']
代替
'aeiou'
@ChrisDoyle它不是一个列表,而是一个序列。对于较长的序列,将其设置为
set()
字符串不是列表,而是一个iterable可能是有意义的。所以,是的,事实上你是对的。['a','e','i','o','u']很容易被'aeiou'代替。是的,很抱歉,你是对的,列表是一个糟糕的单词选择,因为你说它是一个可编辑的