python - 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|
我很难达到这个预期的结果,需要帮助。谢谢
解决方案
我认为您想要的是使用str.ljust
,str.rjust
和str.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 |
推荐阅读
- c++ - 为什么在源文件中专门化模板不会导致错误?
- r - 无法使用包 rtweet 创建创建令牌,文件 '.rtweet_token.rds' 有问题
- javascript - 在仅使用 javascript(无库)单击所述元素时,如何将 html 元素类或 id 存储在变量中?
- image - 在 Flutter 中将具有自定义大小和旋转的图像绘制到 CustomPaint 中
- linux - dlopen 对“同一个库”的定义
- gulp - Gulpfile - 将 node_module dist 文件复制到根目录
- mysql - TRUNCATE 和 TRUNCATE TABLE 有什么区别?
- typescript - 如何获取 TypeScript 中重写方法的参数类型?
- php - 使用 $_SESSION 每次刷新(来自上一次)时数组中的唯一整数
- google-drive-api - 在 Google Drive 或 Dropbox 中托管图像以供应用使用