为什么此代码仅打印出第一个字母?

时间:2019-07-07 20:56:25

标签: python string return return-value uppercase

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

2 个答案:

答案 0 :(得分:3)

检查完第一个字符后,您将立即返回。相反,您应该查看所有这些内容,然后修改所需的内容。

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)

答案 1 :(得分:0)

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

这应该比循环和联接更有效,并且更易于阅读。另外,如果要将转换表应用于多个字符串,可以将其单独保存。