Почему этот код печатает только первую букву? - PullRequest
0 голосов
/ 07 июля 2019
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 ]

3 голосов
/ 08 июля 2019

Вы возвращаетесь сразу после изучения первого символа. Вместо этого вы должны просмотреть все их и изменить те, которые вам нужны.

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)
0 голосов
/ 08 июля 2019

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

Это должно быть более эффективным, чем зацикливание и объединение, а также более легким для чтения. Кроме того, вы можете сохранить таблицу перевода отдельно, если хотите применить ее ко многим строкам.

...