【问题标题】:Why do we need to define a string outside the for loop before making changes to it?为什么我们需要在对它进行更改之前在 for 循环之外定义一个字符串?
【发布时间】:2021-10-03 17:20:32
【问题描述】:
def paper_doll(text):
    for i in text:
        text1=''
        text1+= i*3
    return text1

paper_doll('tom')

在这里,通过这个特定的代码,我想将字符串“tom”中的每个字符打印三次。但是当我运行代码时,只有最后一个字符被打印三次。为什么会这样?

【问题讨论】:

标签: python


【解决方案1】:

在循环的最后一次迭代中,程序:

  1. 执行text1=''

  2. 执行text1+= i*3

所以,无论上次迭代之前发生了什么,都会在上面的第一步中删除。

考虑在循环之前移动初始化 (text1='')。

【讨论】:

    【解决方案2】:

    每次 for 循环中的代码运行时,变量 text1 都会被重置。所以设置为"ttt",然后重置并设置为"ooo",然后重置并设置为"mmm"。仅返回 "mmm"。为了在每次 for 循环运行时都不会重置它,请将其定义在 for lop 之外:

    def paper_doll(text):
        text1=''
        for i in text:
            text1+= i*3
        return text1
    
    paper_doll('tom')
    

    【讨论】:

      【解决方案3】:

      到目前为止,所有答案都解释了为什么您的代码无法按预期工作以及如何修复它。但我想你已经知道了,因为你的问题是“我们为什么需要......”

      那么,为什么?该字符串必须已经存在,因为您使用了“增强赋值运算符”,即+=。而且由于它必须存在并且您不想在每次迭代时都重置它,因此您需要在循环之外创建它。

      【讨论】:

        【解决方案4】:

        如果我们使用更明确的名称重写您的代码,则相当于:

        def paper_doll(text):
            for character in text:
                text1 = character * 3
            return text1
        
        paper_doll('tom')
        

        它没有给出你想要的结果,因为text1 在每个循环中都会被覆盖(因此只给你字符串的最后一个字符作为三元组)。

        你想要做的是:

        def paper_doll(text):
            text1 = ''  # define text1 outside the loop to avoid overwritting it
            for character in text:
                text1 += character * 3
            return text1
        
        paper_doll('tom')
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-06-15
          • 2012-10-18
          • 1970-01-01
          • 2018-03-30
          • 2017-01-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多