#python #string #for-loop #iterator
Вопрос:
Я новичок в Python, пытаюсь создать функцию, которая будет заглавными буквами указывать все значения с четным индексом, а строчными-все значения с нечетным индексом.
Я неоднократно боролся с циклами, дающими мне только первое значение. Я также пробовал использовать циклы while. Однако мне любопытно, есть ли способ заставить его работать с циклами for (нужно ли мне где-то » =1″?)
def func1(x): for (a,b) in enumerate (x): if a%2 == 0: return b.upper() else: return b.lower() func1('Testing Testing') gt;gt;gt;'T'
Комментарии:
1. Можете ли вы предоставить небольшой пример того, что вы хотите, чтобы ваша функция выполняла?
2. Вы
return
начинаете после первой итерации.
Ответ №1:
Функции заканчиваются, как только return
достигается а. Вам нужно будет вернуться один раз в конце, а не внутри цикла:
def func1(x): # The string to work on new_str = "" for (a,b) in enumerate (x): # Add to the new string instead of returning immediately if a%2 == 0: new_str = b.upper() else: new_str = b.lower() # Then return the complete string return new_str
Комментарии:
1. Большое вам спасибо!
Ответ №2:
Вы return
входите после первой итерации.
Попробуйте выполнить следующие действия:
def func1(x): result = '' for (a,b) in enumerate (x): if a%2 == 0: result = b.upper() else: result = b.lower() return result
Ответ №3:
Вы возвращаетесь на первой итерации цикла.
Добавьте алфавиты в список и возвращайте в связанном виде. Также добавьте 1
a
условие проверки при проверке, если вы хотите, чтобы даже индекс был заглавным, так как индекс начинается с 0. Используйте приведенный ниже пример:
def func1(x): result = [] for (a,b) in enumerate (x): if (a 1)%2 == 0: result.append(b.upper()) else: result.append(b.lower()) return "".join(result) print func1('Testing Testing')
Выход:
tEsTiNg tEsTiNg
Ответ №4:
Вы также можете использовать генератор, хотя он немного более продвинутый.
def fun1(x): for (a,b) in enumerate (x): if a%2 == 0: yield b.upper() else: yield b.lower() def func1(x): return [i for i in fun1(x)] func1('Testing Testing')
Ответ №5:
Вы возвращаетесь с работы пораньше. вам нужно собрать данные, которые вы хотите вернуть в переменной.
def func1(x): returnMe = {} for (a,b) in enumerate (x): if a%2 == 0: returnMe = b.upper() else: returnMe = b.lower() return returnMe func1('Testing Testing') gt;gt;gt;'T'
Комментарии:
1. Это было опубликовано почти одновременно с принятым ответом, но очевидные ошибки отступов (и в некоторой степени соглашение об именовании отклоняющихся переменных) портят его.