使用 str.rjust 和变量进行格式化
Formatting with str.rjust and variables
我是编码和这个网站的新手,所以请多多包涵。我正在努力完成 "Automate the Boring Stuff with 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() = 而不是 > len(fruit) 的值有相同的问题,这会导致 .rjust 方法出现问题。但是,如果我这样做:
print(fruit.rjust(longest + 1))
.rjust 应该可以正常工作,因为它有更大的争论,对吗?然而还是不靠右。
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))
根据key
(设置为它的len
)抓取tableData[0]
中的最大值,然后得到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
函数中,按您需要的方式打印出来:
def test():
longest = 0
for fruit in tableData[0]:
if longest < len(fruit):
longest = len(fruit)
for fruit in tableData[0]:
print(fruit.rjust(longest))
test()
我是编码和这个网站的新手,所以请多多包涵。我正在努力完成 "Automate the Boring Stuff with 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() = 而不是 > len(fruit) 的值有相同的问题,这会导致 .rjust 方法出现问题。但是,如果我这样做:
print(fruit.rjust(longest + 1))
.rjust 应该可以正常工作,因为它有更大的争论,对吗?然而还是不靠右。
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))
根据key
(设置为它的len
)抓取tableData[0]
中的最大值,然后得到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
函数中,按您需要的方式打印出来:
def test():
longest = 0
for fruit in tableData[0]:
if longest < len(fruit):
longest = len(fruit)
for fruit in tableData[0]:
print(fruit.rjust(longest))
test()