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

3

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

你能提供一小部分你想让你的函数做什么的示例吗? - SmitM
2
你在第一次迭代后就进行了return - Phylogenesis
5个回答

7

一旦到达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

你在第一次迭代后就进行了return

请尝试以下操作:

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

0

你正在第一次循环中返回。

将字母添加到列表中并返回连接的字符串。在检查条件时,如果要使偶数索引大写,则将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
你也可以使用生成器,不过这需要一些更高级的技能。
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')

-2

你提前从函数中返回了。你需要将想要返回的数据收集到一个变量中。

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'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接