首页 > 解决方案 > Python如何使用for循环对齐文本?

问题描述

这是上一个问题的补充。该函数接受 6 个参数,这些参数确定显示的信息及其显示方式。First_name 和 last_name 作为字符串。Align1,第 1 列对齐,一个字符串,R、L 或 C。 length1:第 1 列长度,一个整数。align2:第 2 列对齐方式,一个字符串,R、L 或 C 和 length2:第 2 列长度,一个整数。到目前为止,我从我所做的函数中得到的输出如下所示

def display_name(first_name,last_name,align1,length1,align2,length2):
  str = ""

 #first name
 #align left
  if align1 == "L":
    str = first_name
    for i in range(0, length1 - len(first_name)):
        str += " "
    print("|First name|")       
    print("|" + str + "|")

  #align right
  if align1 == "R":
      
    for i in range(0, length1 - len(first_name)):
      str += " "
    str += first_name               
    print("|First name|")       
    print("|" + str + "|")


  #align centre
  if align1 == "C":
    
    for i in range(0, (length1 - len(first_name))//2):
      str += " "
    str += first_name 
    for i in range(0, length1 - len(str)):
      str += " "
    print("|First name|")       
    print("|" + str + "|")

 #last name
 #align left
  if align2 == "L":
    str = last_name
    for i in range(0, length2 - len(last_name)):
        str += " "
    print("|last name|")       
    print("|" + str + "|")


  #align right
  if align2 == "R":
      
    for i in range(0, length2 - len(last_name)):
      str += " "
    str += last_name               
    print("|last name|")       
    print("|" + str + "|")

  #align centre
  if align2 == "C":
    
    for i in range(0, (length2 - len(last_name))//2):
      str += " "
    str += last_name 
    for i in range(0, length2 - len(str)):
      str += " "
    print("|last name|")       
    print("|" + str + "|")

display_name("John", "Smith", "L", 12, "R", 10)
|First name|
|John        |
|last name|
|John             Smith|

我设法显示以下内容,显示对齐确实有效,但我需要如下所示的不同输出

|First name  | Last name|
|John        |     Smith|

我很难达到这个预期的结果,需要帮助。谢谢

标签: python

解决方案


我认为您想要的是使用str.ljust,str.rjuststr.center分别用于左对齐、右对齐和居中的字符串填充。

def display_name(first_name,last_name,align1,length1,align2,length2):
    if align1 == 'R':
        align1 = str.rjust
    elif align1 == 'L':
        align1 = str.ljust
    elif align1 == 'C':
        align1 = str.center
    else:
        # stops function because of invalid argument
        print('Invalid argument for parameter align1')
        return None
    
    if align2 == 'R':
        align2 = str.rjust
    elif align2 == 'L':
        align2 = str.ljust
    elif align2 == 'C':
        align2 = str.center
    else:
        # stops function because of invalid argument
        print('Invalid argument for parameter align2')
        return None
    
    def pad_first_name(name):
        '''Pads first_name with whitespace'''
        return align1(name, max(length1, len('First Name')))
    def pad_last_name(name):
        return align1(name, max(length2, len('Last Name')))
    
    print('|'+pad_first_name('First Name')+'|'+pad_last_name('Last Name')+'|')
    print('|'+pad_first_name(first_name)+'|'+pad_last_name(last_name)+'|')    

display_name('Guido', 'van Russo', 'C', 7, 'R', 20)
print()
display_name('Leonardo', 'Di Caprio', 'L', 3, 'L', 16)
|First Name|     Last Name      |
|  Guido   |     van Russo      |

|First Name|Last Name       |
|Leonardo  |Di Caprio       |

推荐阅读