【问题标题】:Why does this code print out only the first letter?为什么这段代码只打印出第一个字母?
【发布时间】:2019-11-17 10:41:33
【问题描述】:
Word=input('please enter a word')
def cap(word):
      for char in word:
            if char in 'aeiou':
                  return letter.upper()

            else:
                  return letter

result=cap(word)
print result

【问题讨论】:

  • 因为你只能从给定的函数调用中返回一次。
  • 哦。请问如何让它迭代?
  • 构建单个结果以返回。另外我建议升级到 Python 3。
  • 收集列表中的字母或附加到字符串,最后(在循环之后)返回。
  • 除了主要问题,您的迭代变量是char,但您返回的是letter。还有Word != word

标签: python string return return-value uppercase


【解决方案1】:

检查完第一个字符后立即返回。相反,您应该检查所有这些,并修改您需要的那些。

def cap(word):
    result = ''
    for letter in word:
        if letter in 'aeiou':
            result += letter.upper()
        else:
            result += letter
    return result

但是请注意,这可能更容易使用列表推导式:

def cap(word):
    return ''.join(l.upper() if l in 'aeiou' else l for l in word)

【讨论】:

    【解决方案2】:

    在 python 中,您可以拥有连续返回值的函数——它们被称为生成器。您只需使用yield 而不是返回。然后,您可以将它们用作迭代器,或在它们上调用 list 以获取值:

    word=input('please enter a word')
    def cap(word):
          for letter in word:
                if letter in 'aeiou':
                      yield letter.upper()
    
                else:
                      yield letter
    
    result=cap(word)
    print(''.join(list(result)))
    

    但是,如果您的目标是将一组字符转换为另一组字符,则有一个 Python 字符串方法:translate()

    word=input('please enter a word')
    upper_vowels = word.translate(str.maketrans('aeiou', 'AEIOU'))
    
    print(upper_vowels)
    

    这应该比循环和连接更有效,并且更易于阅读。此外,如果要将翻译表应用于许多字符串,可以单独保存它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-24
      • 2021-05-28
      • 1970-01-01
      • 2017-05-08
      • 1970-01-01
      • 2011-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多