【问题标题】:how to get a function to read input and define it [duplicate]如何获得一个函数来读取输入并定义它[重复]
【发布时间】:2019-10-04 19:44:24
【问题描述】:

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

我已经尝试过(现在已经摆弄了几个小时但没有运气。):

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

def count_vowels(i):
    return i in 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

print(count_vowels(string))

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

【问题讨论】:

  • 您能否将完整的错误发布为您在运行时给出的代码打印 true dosnt 给出错误 i 未定义
  • return sum([item.lower() in 'aeiou' for item in i])。您已经得到了问题的答案,这为您的学习提供了下一步:列表推导以及布尔值如何成为整数的子类,因此可以求和

标签: python


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    一个快速而清晰的解决方案如下:

    string = input('Enter string: ')
    
    def count_vowels(i):
      counter = 0
      for letter in i:
        if letter.lower() in ['a', 'e', 'i', 'o', 'u']:
          counter += 1
      return counter
    
    print(count_vowels(string))
    
    

    lower() 函数将每个字母转换为小写,因此可以更轻松地进行比较。

    如果您对此有任何疑问,请不要犹豫。

    问候

    【讨论】:

    • 一个字符串本身就是一个列表,所以你可以用'aeiou'代替['a', 'e', 'i', 'o', 'u']
    • @ChrisDoyle 这不是一个列表,而是一个序列。对于更长的序列,将其设为set() 可能更有意义
    • 字符串不是列表,而是可迭代的。所以,是的,你实际上是对的。 ['a', 'e', 'i', 'o', 'u'] 可以很容易地被 'aeiou' 替换。
    • 是的,对不起,你是对的,列表是一个糟糕的选择,因为你说它是一个可迭代的
    【解决方案3】:

    您可以使用字符串实际上是字符的可迭代这一事实,并摆脱所有显式的 i == 'a' or 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
    

    【讨论】:

      【解决方案4】:

      更新

      首先,您在count_vowels 中使用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']))
      

      【讨论】:

      • for i in string: if i.lower() in ('a', 'e', 'i', 'o', 'u'):?
      • 非常感谢,现在我知道什么是有效的了,我会花一些时间弄清楚为什么会这样。谢谢老兄。
      • @roganjosh 当然是的。我有点懒得完全改变它,所以复制了他在if 声明中的部分。 :)
      • @AldenTank 更新了 roganjosh 的观察结果
      • 等等,我错过了这里的主要问题。函数根本内不需要input()。 OP 的做法没有任何问题。它实际上比您的方法更正确。唯一的问题是string 也是一个模块,所以可能会发生名称冲突,但这种情况很少见
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-21
      • 2022-01-23
      • 1970-01-01
      • 2022-10-15
      • 1970-01-01
      • 1970-01-01
      • 2021-01-15
      相关资源
      最近更新 更多