卡在 python 中的循环 - 只返回第一个值

Stuck with loops in python - only returning first value

我是 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'

您正在 return第一次迭代后。

尝试以下操作:

def func1(x):
    result = ''
    for (a,b) in enumerate (x):
         if a%2 == 0:
              result += b.upper()
         else:
              result += b.lower()
    return result

函数在达到 return 后立即结束。你需要 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

您return提早离开了这个功能。您需要在变量中收集您想要 return 的数据。

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'

您正在 return 循环的第一次迭代中。

在列表中附加字母并 return 连接起来。如果您希望索引从 0 开始时甚至索引都大写,请在检查条件时将 1 添加到 a。使用下面的示例:

    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

您也可以使用生成器,尽管它更高级一些。

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