Застрял с циклами в Python - только возвращая первое значение - PullRequest
0 голосов
/ 31 августа 2018

Я новичок в Python, пытаюсь создать функцию, которая будет использовать все значения с четным индексом и делать строчные буквы для всех значений с нечетным индексом.

Я неоднократно боролся с циклами for, давая мне только первое значение. Я также пробовал с циклами 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')

>>>'T'

Ответы [ 4 ]

0 голосов
/ 31 августа 2018

Вы возвращаетесь в первой итерации цикла.

Добавить алфавиты в список и вернуть конкатенированные. Также добавьте 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
0 голосов
/ 31 августа 2018

Функции заканчиваются, как только достигается 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
0 голосов
/ 31 августа 2018

Вы рано возвращаетесь из функции. вам нужно собрать данные, которые вы хотите вернуть, в переменную.

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

>>>'T'
0 голосов
/ 31 августа 2018

Вы return после первой итерации.

Попробуйте следующее:

def func1(x):
    result = ''
    for (a,b) in enumerate (x):
         if a%2 == 0:
              result += b.upper()
         else:
              result += b.lower()
    return result
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...