Программа, которую я должен был написать код в учебнике Python, выглядит следующим образом:
VOWELS = ('a', 'e', 'i', 'o', 'u', 'y')
pigLatin = [] # A list of the words in Pig Latin.
for word in message.split():
# Separate the non-letters at the start of this word:
prefixNonLetters = ''
while len(word) > 0 and not word[0].isalpha():
prefixNonLetters += word[0]
word = word[1:]
if len(word) == 0:
pigLatin.append(prefixNonLetters)
continue
# Separate the non-letters at the end of this word:
suffixNonLetters = ''
while not word[-1].isalpha():
suffixNonLetters += word[-1]
word = word[:-1]
# Remember if the word was in uppercase or title case.
wasUpper = word.isupper()
wasTitle = word.istitle()
word = word.lower() # Make the word lowercase for translation.
# Separate the consonants at the start of this word:
prefixConsonants = ''
while len(word) > 0 and not word[0] in VOWELS:
prefixConsonants += word[0]
word = word[1:]
# Add the Pig Latin ending to the word:
if prefixConsonants != '':
word += prefixConsonants + 'ay'
else:
word += 'yay'
# Set the word back to uppercase or title case:
if wasUpper:
word = word.upper()
if wasTitle:
word = word.title()
# Add the non-letters back to the start or end of the word.
pigLatin.append(prefixNonLetters + word + suffixNonLetters)
# Join all the words back together into a single string:
print(' '.join(pigLatin))
Итак, по сути, в конце каждой итерации я добавляю полное слово в список pigLatin. , включая само преобразованное слово, небуквенный суффикс и префикс (если они существуют).
Однако меня это немного сбивает с толку, потому что это бросает вызов тому, как я думал о циклах for до этого случая. Я думал, что содержимое таких переменных, как prefixNonLetters или prefixConsonants в этом случае, должно оставаться на каждой итерации. Но если это так, это испортит все слова, следующие за первым (они будут слишком длинными с частями предыдущих слов).
Итак, мой вопрос заключается в следующем: каждая итерация в for l oop очищает переменные внутри него? Мне это кажется довольно своеобразным и определенно не согласуется с тем, как я ранее рассматривал циклы for, но, похоже, это так, потому что программа, написанная таким образом, действительно работает правильно ...
Заранее спасибо и извините если вопрос, который я задаю, слишком прост c для некоторых из вас; В конце концов, я же просто новичок.