Python: форматирование строки с правой стороны - PullRequest
0 голосов
/ 12 декабря 2018

Вот мой исходный код:

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()

Ответы [ 6 ]

0 голосов
/ 12 декабря 2018

Попробуйте отформатировать оба значения:

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()

UPD: добавлена ​​поддержка переменной длины.

0 голосов
/ 12 декабря 2018

Вам необходимо указать ширину форматирования для правильного выравнивания по правому краю.

Код:

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)
0 голосов
/ 12 декабря 2018

Поскольку вы не знаете, сколько цифр имеет последнее число, вы должны сохранить результаты в списке, а затем добавить пробелы во время печати.

Например, получить длину последнего числа в виде строки

size = len(str(numbers[-1])))
padding = ""
for i in range(size):
    padding += " " 

, а затем выполнить цикл по массиву, добавив необходимые пробелы:

for num in numbers:
    print(padding[len(str(num)):] + str(num))
0 голосов
/ 12 декабря 2018

Вы можете использовать строку формата для выравнивания справа.Попробуйте это для печати:

print("{}. {:>20}".format(i + 1, res[i]))
0 голосов
/ 12 декабря 2018

Измените ваше заявление на печать на

print("{}. {:10}".format(i + 1, res[i])) # for left justify
print("{}. {:>10}".format(i + 1, res[i])) # for right justify

Если вам нужна дополнительная информация о том, как это сделать, обратитесь по этой ссылке

0 голосов
/ 12 декабря 2018

Попробуйте с:

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()
...