【问题标题】:How do I write my own function, which takes string and number as argument and prints "string*number" [duplicate]如何编写自己的函数,它将字符串和数字作为参数并打印“字符串*数字”[重复]
【发布时间】:2020-11-06 03:04:35
【问题描述】:

我的作业问题是这样的:

Python 允许您通过将字符串乘以整数来重复字符串,例如'Hi' * 3 将给出'HiHiHi'。假设此功能不存在,而是编写一个名为 repeat 的函数,该函数接受字符串和整数作为参数。该函数应返回重复指定次数的原始字符串的字符串,例如repeat('Hi', 3) 应该返回 'HiHiHi'。

我的回答如下:

def repeat(string,number):
    fstring = ""
    for var in range(1,number+1):
         fstring+=fstring+string
    print(fstring)
repeat("Hi",3)

但是the result 不是我所期望的: HiHiHiHiHiHiHi . 我看不到错误,帮帮我!

【问题讨论】:

    标签: python


    【解决方案1】:

    来自您的代码:

             fstring+=fstring+string
    

    这需要 fstring 已经是什么,加上 string添加fstring

    所以,fstring'' 变为'' + '' + 'Hi',即'Hi'。然后是'Hi' + 'Hi' + 'Hi',最后是'HiHiHi' + 'HiHiHi' + 'Hi'

    另外,您使用for var in range(1,number+1):,但使用for var in range(0, number): 会更易读、更快捷,因为您实际上并不需要number 的值从1number,您只是希望它运行number 次。

    你也不需要var,在这种情况下你可以使用_,它告诉Python忽略实际的循环变量名。

    您可能希望函数返回结果,而不是在最后打印,以便可以在某处使用它(例如用于打印)。

    最后,我建议不要调用变量string,因为这可能会与内置的str 混淆。 s 之类的东西是临时字符串的通用名称。

    所以,你最终会得到:

    def repeat(s, number):
        result = ''
        for _ in range(0, number):
             result += s
        return result
    
    print(repeat("Hi", 3))
    

    【讨论】:

      【解决方案2】:

      以下是每次将之前的fstring翻倍:

      fstring+=fstring+string
      

      由于它使用了+= 运算符,所以相当于:

      fstring = fstring + fstring + string
      

      只要改成这样:

      fstring += string
      

      修复它。

      【讨论】:

        【解决方案3】:

        赋值运算符+=同时添加字符串和新字符串,所以你需要使用其中一个:

        fstring=fstring+string
        

        或者

        fstring+=string
        

        【讨论】:

        • 我投了反对票,因为我觉得你的回答对之前提供的其他答案没有任何帮助,有些确实是你提供的。
        • 是的,我承认您和其他最佳答案是最快和最好的,值得投票,而我的则不然,但我仍然迟到了一两分钟,所以以我的拙见,您可能会删除反对票(或者如果你认为,我不会介意)
        • 我并没有与我自己的答案进行比较(详细介绍了其他一些方面,因此可能被认为有点过于宽泛),而是@TomKarzes 清晰、简短且中肯的答案,提供完全相同的解决方案,但在 3 分钟前发布。
        【解决方案4】:
        def repeat(string,number):
            fstring = ""
            for var in range(1,number+1):
                 fstring+=string
            return fstring
        repeat("Hi",3)
        

        记住这个函数是“返回值函数”,如果你想打印比使用:

        print(repeat("Hi",3))
        

        【讨论】:

          【解决方案5】:

          我认为解释这一点的最佳方法是手动运行迭代。 最初,fstring 为空,因此您将fstringstring 添加到fstring 变量中。 结果:"" + "Hi" = "Hi",都很好。

          第二次迭代: fstring = "嗨" 字符串=“嗨” 您会认为结果会是“HiHi”,但您正在累积到您的 fstring 变量! 所以它是:

          fstring + fstring + string = HiHiHi

          第三次迭代: 原来的已经是HiHiHi,我们添加另一个HiHiHi,我们添加了原始字符串。所以我们得到了七个“嗨”。

          该函数将不断将fstring 添加到自身,因此它会变得非常大,非常快。

          解决方案是只将原始字符串附加到 for 循环中的 fstring

          像这样:

              fstring = ""
              for var in range(1,number+1):
                   fstring+=string
              print(fstring)
          repeat("Hi",3)
          

          这样,您只附加原始字符串。

          【讨论】:

            【解决方案6】:

            我可以通过删除 for 循环中的 +1 来使其工作。代码是这样的

            def repeat(string,number):
            fstring = ""
            for var in range(1,number):
                 fstring+=fstring+string
            print(fstring)
            repeat("Hi",3)
            

            【讨论】:

            • 你的答案中的代码与问题中的代码相同。
            • @HiterDean 哦,我的错,我一定不能不小心从我的编辑器那里复制代码。
            • 此代码仅在 number=3 时有效,但如果我选择 number=1 或 number=4,则该代码将不起作用。 (repl.it/repls/CornyClassicDecagon#main.py)。
            猜你喜欢
            • 2018-11-18
            • 1970-01-01
            • 2021-11-17
            • 1970-01-01
            • 2018-03-14
            • 2011-01-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多