【问题标题】:Stuck with loops in python - only returning first value卡在python中的循环 - 只返回第一个值
【发布时间】:2019-02-06 15:50:02
【问题描述】:

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

【问题讨论】:

  • 你能提供一个小样本来说明你希望你的函数做什么吗?
  • 第一次迭代后你是returning。

标签: python-3.x loops enumerate


【解决方案1】:

您在第一次迭代后returning。

尝试以下方法:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 非常感谢!
    【解决方案3】:

    您将提前从函数中返回。您需要收集要在变量中返回的数据。

    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'
    

    【讨论】:

    • 这几乎与已接受的答案同时发布,但明显的缩进错误(以及在某种程度上异常的变量命名约定)使其变得糟糕。
    【解决方案4】:

    您将在循环的第一次迭代中返回。

    在列表中附加字母并返回连接。如果您希望索引从 0 开始时甚至索引大写,请在检查条件时添加 1a。使用以下示例:

        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
    

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-03
        • 1970-01-01
        相关资源
        最近更新 更多