Python: 字符串格式化到右边
Python: String formatting to the right side
这是我的源代码:
def fibonacci_numbers():
how_many_numbers = int(input("\nHow many Fibbonacci numbers you want print: "))
i = 0
res = [0, 1]
while i < how_many_numbers:
res.append(sum(res[-2:]))
print("{}. {}".format(i + 1, res[i]))
i += 1
fibonacci_numbers()
现在的输出是:
How many Fibbonacci numbers you want print: 30
1. 0
2. 1
3. 1
4. 2
5. 3
6. 5
7. 8
8. 13
9. 21
10. 34
11. 55
12. 89
13. 144
...
30. 514229
但我需要这样的东西:
How many Fibbonacci numbers you want print: 30
1. 0
2. 1
3. 1
4. 2
5. 3
6. 5
7. 8
8. 13
9. 21
10. 34
11. 55
12. 89
13. 144
...
30. 514229
等等。这取决于我选择的数字。如果我取 50 个数字,那么我需要更多空间,但所有内容都需要放在右侧。
我怎样才能做到这一点?
我尝试了 {:>width}
和 .rjust
方法,但我无法得到它。
有没有简单的解决方案?
或者我可能需要制作另一个循环并在那里打印?
最终解:
感谢您的回答。我拿起其中的一些,然后做了这个:
def fibonacci_numbers():
how_many_numbers = int(input("\nHow many Fibbonacci numbers you want print: "))
i = 0
res = [0, 1]
while i < how_many_numbers:
res.append(sum(res[-2:]))
i += 1
size_of_i = len(str(i))
i = 0
for num in res[:-1]:
size = len(str(res[-2]))
print("{:<{width_of_i}} {:>{width}}".format(str(i)+":", num, width_of_i=size_of_i + 1, width=size))
i += 1
fibonacci_numbers()
试试:
def fibonacci_numbers():
how_many_numbers = int(input("\nHow many Fibbonacci numbers you want print: "))
i = 0
res = [0, 1]
while i < how_many_numbers:
res.append(sum(res[-2:]))
print("{}. \t\t{}".format(i + 1, res[i]))
i += 1
fibonacci_numbers()
将您的打印语句更改为此
print("{}. {:10}".format(i + 1, res[i])) # for left justify
print("{}. {:>10}".format(i + 1, res[i])) # for right justify
如果您需要有关如何操作的更多信息,请参阅此 link
您可以使用格式字符串右对齐。试试这个打印:
print("{}. {:>20}".format(i + 1, res[i]))
由于你不知道最后一个数字有多少位,所以你必须将结果存储在一个列表中,然后在打印时添加空格。
例如获取最后一个数字的长度作为字符串
size = len(str(numbers[-1])))
padding = ""
for i in range(size):
padding += " "
然后遍历数组添加所需的空格:
for num in numbers:
print(padding[len(str(num)):] + str(num))
您需要指定格式宽度才能正确右对齐。
代码:
def fibonacci_numbers(format_width):
how_many_numbers = int(input("\nHow many Fibbonacci numbers you want print: "))
i = 0
res = [0, 1]
while i < how_many_numbers:
res.append(sum(res[-2:]))
# Here we specify alignment to right with certain width
# which is >= number of digits of the largest integer in your sequence.:
print("{}. {:>{width}}".format(i + 1, res[i], width=format_width))
i += 1
fibonacci_numbers(30)
尝试格式化这两个值:
import math
def fibonacci_numbers():
how_many_numbers = int(input("\nHow many Fibbonacci numbers you want print: "))
i = 0
res = [0, 1]
for i in range(how_many_numbers):
res.append(sum(res[-2:]))
digits = int(math.log10(res[i]))+1
ind_digits = int(math.log10(how_many_numbers-1))+2
for i in range(how_many_numbers):
print("{:<{ind_digits}} {:>{digits}}".format("{}.".format(i + 1), res[i], ind_digits=ind_digits, digits=digits))
fibonacci_numbers()
更新: 添加了对可变长度的支持。
这是我的源代码:
def fibonacci_numbers():
how_many_numbers = int(input("\nHow many Fibbonacci numbers you want print: "))
i = 0
res = [0, 1]
while i < how_many_numbers:
res.append(sum(res[-2:]))
print("{}. {}".format(i + 1, res[i]))
i += 1
fibonacci_numbers()
现在的输出是:
How many Fibbonacci numbers you want print: 30
1. 0
2. 1
3. 1
4. 2
5. 3
6. 5
7. 8
8. 13
9. 21
10. 34
11. 55
12. 89
13. 144
...
30. 514229
但我需要这样的东西:
How many Fibbonacci numbers you want print: 30
1. 0
2. 1
3. 1
4. 2
5. 3
6. 5
7. 8
8. 13
9. 21
10. 34
11. 55
12. 89
13. 144
...
30. 514229
等等。这取决于我选择的数字。如果我取 50 个数字,那么我需要更多空间,但所有内容都需要放在右侧。
我怎样才能做到这一点?
我尝试了 {:>width}
和 .rjust
方法,但我无法得到它。
有没有简单的解决方案?
或者我可能需要制作另一个循环并在那里打印?
最终解:
感谢您的回答。我拿起其中的一些,然后做了这个:
def fibonacci_numbers():
how_many_numbers = int(input("\nHow many Fibbonacci numbers you want print: "))
i = 0
res = [0, 1]
while i < how_many_numbers:
res.append(sum(res[-2:]))
i += 1
size_of_i = len(str(i))
i = 0
for num in res[:-1]:
size = len(str(res[-2]))
print("{:<{width_of_i}} {:>{width}}".format(str(i)+":", num, width_of_i=size_of_i + 1, width=size))
i += 1
fibonacci_numbers()
试试:
def fibonacci_numbers():
how_many_numbers = int(input("\nHow many Fibbonacci numbers you want print: "))
i = 0
res = [0, 1]
while i < how_many_numbers:
res.append(sum(res[-2:]))
print("{}. \t\t{}".format(i + 1, res[i]))
i += 1
fibonacci_numbers()
将您的打印语句更改为此
print("{}. {:10}".format(i + 1, res[i])) # for left justify
print("{}. {:>10}".format(i + 1, res[i])) # for right justify
如果您需要有关如何操作的更多信息,请参阅此 link
您可以使用格式字符串右对齐。试试这个打印:
print("{}. {:>20}".format(i + 1, res[i]))
由于你不知道最后一个数字有多少位,所以你必须将结果存储在一个列表中,然后在打印时添加空格。
例如获取最后一个数字的长度作为字符串
size = len(str(numbers[-1])))
padding = ""
for i in range(size):
padding += " "
然后遍历数组添加所需的空格:
for num in numbers:
print(padding[len(str(num)):] + str(num))
您需要指定格式宽度才能正确右对齐。
代码:
def fibonacci_numbers(format_width):
how_many_numbers = int(input("\nHow many Fibbonacci numbers you want print: "))
i = 0
res = [0, 1]
while i < how_many_numbers:
res.append(sum(res[-2:]))
# Here we specify alignment to right with certain width
# which is >= number of digits of the largest integer in your sequence.:
print("{}. {:>{width}}".format(i + 1, res[i], width=format_width))
i += 1
fibonacci_numbers(30)
尝试格式化这两个值:
import math
def fibonacci_numbers():
how_many_numbers = int(input("\nHow many Fibbonacci numbers you want print: "))
i = 0
res = [0, 1]
for i in range(how_many_numbers):
res.append(sum(res[-2:]))
digits = int(math.log10(res[i]))+1
ind_digits = int(math.log10(how_many_numbers-1))+2
for i in range(how_many_numbers):
print("{:<{ind_digits}} {:>{digits}}".format("{}.".format(i + 1), res[i], ind_digits=ind_digits, digits=digits))
fibonacci_numbers()
更新: 添加了对可变长度的支持。