使用str.rjust和变量进行格式化

时间:2016-11-22 21:08:17

标签: python string python-3.x variables justify

我是编码和本网站的新手,所以请耐心等待。我正在努力完成#34;使用Python自动化无聊的东西,"这是章节复习问题之一。我不太关心解决.rjust方法的奇怪行为的答案。该项目的目标是对几个字符串列表进行右对齐。为了测试我的过程,我编写了一个函数来处理一个列表。

我的目标:

   apples
  oranges
 cherries
  bananas

以下是代码:

tableData = [['apples', 'oranges', 'cherries', 'bananas'],
                     ['Alice', 'Bob', 'Carol', 'David'],
                     ['dogs', 'cats', 'moose', 'goose']]

def test():
    for fruit in tableData[0]:
        longest = len(tableData[0][0])
        longestlen = len(fruit)
        if longest < len(fruit):
            longest = fruit
            longestlen = len(fruit)
        print(fruit.rjust(longestlen))

test()

我试图通过引用每个列表中最长的字符串来使.rjust动态,但是使用"fruit.rjust(longestlen)"打印列表而不是证明它:

apples
oranges
cherries
bananas

如果我将"longestlen"int交换为8,那就可以了。为什么我不能使用变量来定义理由,或者我在做其他错误的事情?我还没有找到任何关于此的文档。

编辑:

我意识到我在代码中添加了额外的变量。它现在读成:

def test():
    for fruit in tableData[0]:
        longest = len(tableData[0][0])
        if longest < len(fruit):
            longest = len(fruit)
        print(fruit.rjust(longest))

test()

这会输出相同的,不合理的输出,但更清晰。 我意识到这与我的.rjust()=而不是&gt;的值有同样的问题。 len(fruit),导致.rjust方法出现问题。但是,如果我这样做:

print(fruit.rjust(longest + 1))

。如果它有更大的争议,我应该正常工作,对吗?但它仍然无法证明这一权利。

1 个答案:

答案 0 :(得分:1)

import datetime datetime.datetime.strptime('<date string>', '%d%m%Y').date() 与你试图证明的字符串长度具有相同的值,因此,你不会得到任何理由:

rjust

但:

print("foo".rjust(3))
foo

所以,为了让这个工作,首先需要获取最大长度,然后证明:

print("foo".rjust(4))
 foo

此处def test(): l = len(max(tableData[0], key=len)) print(l) for fruit in tableData[0]: print(fruit.rjust(l)) test() 根据l = len(max(tableData[0], key=len))(设置为tableData[0])获取key中的最大值,然后获取len的{​​{1}}该字符串(len将被返回,因此将使用cherries

现在正确打印出来:

len(cherries) == 8

如果您无法使用 apples oranges cherries bananas ,则必须迭代max一次以找到最大值,然后再次循环以打印出合理的值。

首先,通过将初始计数器设置为tableData[0]并在找到更长的单词时递增它来完成最大值:

0

此循环结束后,longest = 0 for fruit in tableData[0]: if longest < len(fruit): longest = len(fruit) 将具有值longest。现在,只需再次遍历列表并进行格式化,即:

8

将所有内容放在for fruit in tableData[0]: print(fruit.rjust(longest)) 函数中,以您需要的方式打印出来:

test