Застрял с циклами в python — возвращает только первое значение

#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. Это было опубликовано почти одновременно с принятым ответом, но очевидные ошибки отступов (и в некоторой степени соглашение об именовании отклоняющихся переменных) портят его.