为什么这段代码只打印出第一个字母?
Why does this code print out only the first letter?
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
你 return 检查第一个字符后立即。相反,您应该检查所有这些,并修改您需要的那些。
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)
在 python 中,您可以拥有连续 return 值的函数——它们被称为生成器。您只需使用 yield
而不是 return。然后您可以将它们用作迭代器,或对它们调用 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)
这应该比循环和连接更有效,而且更易于阅读。另外,如果你想将它应用到许多字符串,你可以单独保存翻译 table 。
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
你 return 检查第一个字符后立即。相反,您应该检查所有这些,并修改您需要的那些。
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)
在 python 中,您可以拥有连续 return 值的函数——它们被称为生成器。您只需使用 yield
而不是 return。然后您可以将它们用作迭代器,或对它们调用 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)
这应该比循环和连接更有效,而且更易于阅读。另外,如果你想将它应用到许多字符串,你可以单独保存翻译 table 。