【问题标题】:prints the string with enough leading spaces?打印具有足够前导空格的字符串?
【发布时间】:2012-11-06 14:04:53
【问题描述】:

Python 提供了一个名为 len 的内置函数,它返回字符串的长度,因此 len('allen') 的值是 5

编写一个名为right_justify 的函数,它接受一个名为s 的字符串作为参数,并打印带有足够前导空格的字符串,以便字符串的最后一个字母在显示的第70 列中。

>>> right_justify('allen')
                                                       allen

我是这样解决的:

def right_justify(s):
    print "                                                                 " + s    

right_justify('allen')

对吗?

是否有内置的 Python 方法可以做我需要做的事情?

【问题讨论】:

  • Python 字符串实际上直接在字符串对象上有两个内置方法。 rjustljust 完全按照您的预期进行,分别右对齐和左对齐。

标签: python function


【解决方案1】:

为了让最后一个字母出现在第 70 列中,您需要从 70 中减去 s 的长度,像这样

def right_justify(s):
    print(" " * (70 - (len(s)) + s)

【讨论】:

    【解决方案2】:

    我会做这样的事情,这是许多简单的方法之一:

    def right_just(s):    
        print(s.rjust(70))
    
    right_just('allen')
    

    【讨论】:

      【解决方案3】:

      刚刚想到了另一种让它更有活力的方法:)

      功能

      def right_justify(s,num):

      print(s.rjust(num))
      

      调用函数

      right_justify("艾伦",50)

      【讨论】:

        【解决方案4】:

        这是工作代码

            def right_justify(s):
        
            length = len('s')
        
            spaces = 70 - length 
            print "required space is",spaces
        
            print(" " * spaces) + s
        
        right_justify('allen')
        

        输出

        required  space is  69
                                                                             allen
        

        【讨论】:

          【解决方案5】:
          def right_justify(s):
              length =len(s)
              spaces = 70-length
              print((" " * spaces) + s)
          
          word = "monty"
          right_justify(word)
          

          定义后,长度取决于选择的单词,而不是(s)......所以你创建了公式。长度、空格和打印应该缩进。 必须发明一个变量,以便单词可以从 str 转换为变量格式。

          【讨论】:

          • 如果s 超过 70 个字符怎么办?最好使用内置的格式化函数而不是重新实现它们。
          【解决方案6】:

          也许我误读了这个问题,但如果变量是一个字符长,似乎给出的答案只会给出正确的结果。 我对编码也很陌生,所以这可能有点离谱。

          def right_justify(s):
                  length = len(s)
                  adjustedLength = len(s) -1
                  spaces = 70 - length + adjustedLength
                  print(spaces * " " + "s")
          
          
          s = "whatever you want to enter"
          right_justify(s)
          

          我这样做了,所以无论 s 被定义为什么,你都会得到 69 个空格,然后是“s”。

          如果有误,请告诉我,以便我调整思路。

          【讨论】:

            【解决方案7】:
            def right_justify (s):
                x = ' '
                w = (70-len(s))*x + s
                print (w)
            

            【讨论】:

              【解决方案8】:
              def right_justify(s):
                  print ('')
                  print ('Number of chars: ' + str(len(s)))
                  print ('')
                  print (' '* (70 - len(s)) + s)
              
              word = input('Enter any word: ')
              right_justify(word)
              

              【讨论】:

              • 请在这里坚持英文。
              【解决方案9】:
              def right_justify(s):
              ...  length=len(s)
              ...  spaces=70-length
              ...  print (' ' * spaces) + s
              ...
              >>> right_justify('allen')
              

              【讨论】:

                【解决方案10】:
                def right_justify(s):
                    print len(s)
                    print ' '* (70 - len(s)) + s
                
                word = raw_input('enter any word')
                right_justify(word)
                

                【讨论】:

                  【解决方案11】:

                  使用format:

                  In [60]: strs="allen"
                  
                  In [61]: format(strs,">70s")
                  Out[61]: '                                                                 allen'
                  
                  In [62]: format(strs,">70s").index('n')
                  Out[62]: 69
                  

                  或使用str.format:

                  In [68]: "{0:>70s}".format(strs)
                  Out[68]: '                                                                 allen'
                  

                  【讨论】:

                  • 我是python新手,所以你的解决方案让我有点困惑,对不起,但不明白你写了什么
                  • @BassamBadr 这是简单的字符串格式,请参阅我对您问题的评论。
                  【解决方案12】:
                       def right_justify(s):
                           print((70-len(s))*' '+s)
                  

                  【讨论】:

                  • 当您提供代码时,您还应该提供解释,以便提出问题的人知道哪里出了问题、您做了什么以及为什么。
                  【解决方案13】:

                  string formatting 很容易:

                  def right_justify(s):
                      print "%70s" % s
                  

                  【讨论】:

                  • 如何将其对齐到左侧而不是右侧? @Jochen Ritzel
                  【解决方案14】:

                  当然,您可以在这里应用一个巧妙的小技巧:

                  def right_justify(s, total_length=70):
                      return ' ' * (total_length - len(s)) + s
                  

                  如果不是很清楚,这将打印出 total_length - s 个空格的长度。

                  【讨论】:

                  • 首先,我更喜欢 Jochen Ritzel 的解决方案,它比我的更干净。但是你没有得到任何输出的原因是这个函数返回你的值。 Return 是所有计算机编程中非常基本的声明,我建议您尝试一下。
                  【解决方案15】:

                  我不会为你做作业,但这里有一个简单的算法:

                  1. 找出你的字符串有多长(提示:len())。

                  2. 找出你需要打印多少个空格(提示:如果你的字符串是 5 个字符,总长度应该是 70,你想打印 65 个空格)。

                  3. 打印空格。

                  4. 打印字符串。

                  【讨论】:

                  • 这不是作业,只是这里的一个问题greenteapress.com/thinkpython/html/book004.html无论如何谢谢你
                  • 我假设@Tim 试图避免使用内置方法,因为假设避免使用它们是家庭作业要求的一部分(通常是这种情况)。这是重新发明内置方法有意义的唯一情况。
                  猜你喜欢
                  • 2019-10-26
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-09-19
                  • 1970-01-01
                  • 2012-07-09
                  • 2014-04-07
                  相关资源
                  最近更新 更多